Compare commits

...

4 Commits

Author SHA1 Message Date
Cat Flynn 653b4ab0b8 WIP RESET THIS 2022-12-10 03:39:30 +00:00
Cat Flynn 006510956c produce/absorb heat by tile type #6 2022-12-10 03:39:30 +00:00
Cat Flynn 7a02c9a951 move scripts #6 2022-12-10 03:39:30 +00:00
Cat Flynn ac5a2a2aec remove obsolete script 2022-12-10 03:39:11 +00:00
12 changed files with 93 additions and 27 deletions

View File

@ -0,0 +1,6 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://scripts/overlays/HeatOverlay.cs" type="Script" id=1]
[node name="Heat Overlay" type="Node"]
script = ExtResource( 1 )

View File

@ -1,6 +1,6 @@
[gd_resource type="Resource" load_steps=2 format=2] [gd_resource type="Resource" load_steps=2 format=2]
[ext_resource path="res://scripts/TileType.cs" type="Script" id=1] [ext_resource path="res://scripts/tile/TileType.cs" type="Script" id=1]
[resource] [resource]
script = ExtResource( 1 ) script = ExtResource( 1 )
@ -8,3 +8,4 @@ Name = "Developed"
BuildLabel = "[D]eveloped" BuildLabel = "[D]eveloped"
Key = 68 Key = 68
Color = Color( 0.372549, 0.372549, 0.372549, 1 ) Color = Color( 0.372549, 0.372549, 0.372549, 1 )
HeatGeneration = 0.1

View File

@ -1,6 +1,6 @@
[gd_resource type="Resource" load_steps=3 format=2] [gd_resource type="Resource" load_steps=3 format=2]
[ext_resource path="res://scripts/TileTypeCollection.cs" type="Script" id=1] [ext_resource path="res://scripts/tile/TileTypeCollection.cs" type="Script" id=1]
[ext_resource path="res://resources/tile_types/developed.tres" type="Resource" id=2] [ext_resource path="res://resources/tile_types/developed.tres" type="Resource" id=2]
[resource] [resource]

View File

@ -1,6 +1,6 @@
[gd_resource type="Resource" load_steps=2 format=2] [gd_resource type="Resource" load_steps=2 format=2]
[ext_resource path="res://scripts/TileType.cs" type="Script" id=1] [ext_resource path="res://scripts/tile/TileType.cs" type="Script" id=1]
[resource] [resource]
script = ExtResource( 1 ) script = ExtResource( 1 )
@ -8,3 +8,4 @@ Name = "Wild"
BuildLabel = "[W]ild" BuildLabel = "[W]ild"
Key = 87 Key = 87
Color = Color( 0, 0.545098, 0.0196078, 1 ) Color = Color( 0, 0.545098, 0.0196078, 1 )
HeatGeneration = -0.025

View File

@ -40,7 +40,7 @@ public class WorldGrid : Node2D
{ {
var tile = _tiles[x, y]; var tile = _tiles[x, y];
var material = tile.material; var material = tile.material;
material.SetShaderParam("t", tile.value); material.SetShaderParam("t", tile.temperature);
} }
} }
} }
@ -100,7 +100,7 @@ public class WorldGrid : Node2D
{ {
var tile = new Tile(); var tile = new Tile();
tile.isHighlighted = false; tile.isHighlighted = false;
tile.value = 0.0f; tile.temperature = 0.0f;
tile.type = _startTileType; tile.type = _startTileType;
var node = TileScene.Instance<Node2D>(); var node = TileScene.Instance<Node2D>();
@ -122,6 +122,7 @@ public class WorldGrid : Node2D
public void _on_Clock_OnTick(int ticks) public void _on_Clock_OnTick(int ticks)
{ {
GenerateHeat();
Diffuse(); Diffuse();
} }
@ -135,13 +136,27 @@ public class WorldGrid : Node2D
private void GetNeighbourTemperatures(int x, int y, out float nx, out float ny, out float px, out float py) private void GetNeighbourTemperatures(int x, int y, out float nx, out float ny, out float px, out float py)
{ {
// default value // default value
var t = _tiles[x, y].value; var t = _tiles[x, y].temperature;
nx = x > 0 ? _tiles[x - 1, y].value : t; nx = x > 0 ? _tiles[x - 1, y].temperature : t;
px = x < Size - 1 ? _tiles[x + 1, y].value : t; px = x < Size - 1 ? _tiles[x + 1, y].temperature : t;
ny = y > 0 ? _tiles[x, y - 1].value : t; ny = y > 0 ? _tiles[x, y - 1].temperature : t;
py = y < Size - 1 ? _tiles[x, y + 1].value : t; py = y < Size - 1 ? _tiles[x, y + 1].temperature : t;
}
private void GenerateHeat()
{
for (int x = 0; x < Size; x++)
{
for (int y = 0; y < Size; y++)
{
var tile = _tiles[x, y];
var type = tile.type;
tile.temperature += type.HeatGeneration;
_tiles[x, y] = tile;
}
}
} }
private void Diffuse() private void Diffuse()
@ -150,7 +165,7 @@ public class WorldGrid : Node2D
{ {
for (int y = 0; y < Size; y++) for (int y = 0; y < Size; y++)
{ {
float t = _tiles[x, y].value; float t = _tiles[x, y].temperature;
var D = DiffusionCoefficient; var D = DiffusionCoefficient;
GetNeighbourTemperatures( GetNeighbourTemperatures(
@ -161,7 +176,10 @@ public class WorldGrid : Node2D
out var py); out var py);
// current value // current value
_nextValues[x, y] = TransferHeat(t, D, nx, ny, px, py); var temperature = TransferHeat(t, D, nx, ny, px, py);
// TODO: what if it's really really cold out?
temperature = Mathf.Max(0, temperature);
_nextValues[x, y] = temperature;
} }
} }
@ -169,7 +187,7 @@ public class WorldGrid : Node2D
{ {
for (int y = 0; y < Size; y++) for (int y = 0; y < Size; y++)
{ {
_tiles[x, y].value = _nextValues[x, y]; _tiles[x, y].temperature = _nextValues[x, y];
} }
} }
} }

View File

@ -1,13 +0,0 @@
using Godot;
using System;
public class SelectionMode : Mode
{
protected override void OnDisabled()
{
}
protected override void OnEnabled()
{
}
}

View File

@ -0,0 +1,10 @@
using Godot;
using System;
public class HeatOverlay : Node
{
public override void _Ready()
{
}
}

View File

@ -0,0 +1,6 @@
using Godot;
public class NoOverlay : Node
{
}

View File

@ -0,0 +1,34 @@
using Godot;
using System;
public class Overlays : Node
{
[Export]
private KeyList _cycleOverlayKey;
public override void _Ready()
{
}
public override void _Input(InputEvent @event)
{
base._Input(@event);
if (!(@event is InputEventKey keyEvent))
return;
if (!(keyEvent.Pressed))
return;
if ((KeyList)keyEvent.Scancode != _cycleOverlayKey)
return;
}
private void CycleOverlay()
{
}
}

View File

@ -3,7 +3,7 @@ using Godot;
public struct Tile public struct Tile
{ {
public bool isHighlighted; public bool isHighlighted;
public float value; public float temperature;
public ShaderMaterial material; public ShaderMaterial material;
public TileType type; public TileType type;
} }

View File

@ -14,6 +14,9 @@ public class TileType : Resource
[Export] [Export]
public Color Color { get; private set; } public Color Color { get; private set; }
[Export]
public float HeatGeneration { get; private set; }
public override string ToString() public override string ToString()
{ {
return Name; return Name;