Compare commits
3 Commits
653b4ab0b8
...
62416307ef
Author | SHA1 | Date |
---|---|---|
Cat Flynn | 62416307ef | |
Cat Flynn | 7d8d80350b | |
Cat Flynn | b65ce58684 |
|
@ -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 )
|
|
@ -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
|
||||||
|
|
|
@ -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]
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
using Godot;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
public class HeatOverlay : Node
|
||||||
|
{
|
||||||
|
public override void _Ready()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
using Godot;
|
||||||
|
|
||||||
|
public class NoOverlay : Node
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
|
@ -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()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
|
@ -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;
|
||||||
}
|
}
|
|
@ -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;
|
Loading…
Reference in New Issue