From 69c703de29778cf92b9a38705f66fd456231bd80 Mon Sep 17 00:00:00 2001 From: ktyl Date: Tue, 13 Dec 2022 00:26:58 +0000 Subject: [PATCH] wild tiles take heat damage from developed tiles #7 --- half-earth/resources/overlays/no_overlay.tres | 2 ++ .../resources/tiles/tile_types/developed.tres | 2 +- half-earth/resources/tiles/tile_types/wild.tres | 7 ++++--- half-earth/scripts/WorldGrid.cs | 17 ++++++++++++++++- half-earth/scripts/overlays/NoOverlay.cs | 15 +++++++++++++++ half-earth/scripts/tile/IDamageable.cs | 4 ++++ half-earth/scripts/tile/Tile.cs | 1 + half-earth/scripts/tile/TileGrid.cs | 3 ++- half-earth/scripts/tile/Wild.cs | 7 +++++++ 9 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 half-earth/scripts/tile/IDamageable.cs create mode 100644 half-earth/scripts/tile/Wild.cs diff --git a/half-earth/resources/overlays/no_overlay.tres b/half-earth/resources/overlays/no_overlay.tres index d4a783f..5f79807 100644 --- a/half-earth/resources/overlays/no_overlay.tres +++ b/half-earth/resources/overlays/no_overlay.tres @@ -4,3 +4,5 @@ [resource] script = ExtResource( 1 ) +_healthy = Color( 0.0431373, 0.541176, 0.0235294, 1 ) +_depleted = Color( 0.670588, 0.572549, 0.27451, 1 ) diff --git a/half-earth/resources/tiles/tile_types/developed.tres b/half-earth/resources/tiles/tile_types/developed.tres index 8f5f1d1..d9ffdac 100644 --- a/half-earth/resources/tiles/tile_types/developed.tres +++ b/half-earth/resources/tiles/tile_types/developed.tres @@ -7,4 +7,4 @@ script = ExtResource( 1 ) Name = "Developed" Key = 68 Color = Color( 0.372549, 0.372549, 0.372549, 1 ) -HeatGeneration = 0.4 +HeatGeneration = 0.15 diff --git a/half-earth/resources/tiles/tile_types/wild.tres b/half-earth/resources/tiles/tile_types/wild.tres index 370bb83..20cc915 100644 --- a/half-earth/resources/tiles/tile_types/wild.tres +++ b/half-earth/resources/tiles/tile_types/wild.tres @@ -1,10 +1,11 @@ [gd_resource type="Resource" load_steps=2 format=2] -[ext_resource path="res://scripts/tile/TileType.cs" type="Script" id=1] +[ext_resource path="res://scripts/tile/Wild.cs" type="Script" id=1] [resource] script = ExtResource( 1 ) Name = "Wild" Key = 87 -Color = Color( 0, 0.545098, 0.0196078, 1 ) -HeatGeneration = -0.2 +Color = Color( 0.14902, 1, 0, 0 ) +HeatGeneration = -0.02 +Threshold = 0.6 diff --git a/half-earth/scripts/WorldGrid.cs b/half-earth/scripts/WorldGrid.cs index 6a7b01a..83c546e 100644 --- a/half-earth/scripts/WorldGrid.cs +++ b/half-earth/scripts/WorldGrid.cs @@ -96,7 +96,7 @@ public class WorldGrid : Node2D TileView view = default; view.material = (ShaderMaterial)canvasItem.Material; - view.material.SetShaderParam("lowColor", _tileGrid.StartTileType.Color); + //view.material.SetShaderParam("lowColor", _tileGrid.StartTileType.Color); _tileViews[i] = view; } } @@ -129,6 +129,20 @@ public class WorldGrid : Node2D py = y < _tileGrid.Size - 1 ? _tileGrid[x, y + 1].temperature : t; } + private void ApplyHeatDamage(ref Tile tile) + { + if (!(tile.type is IDamageable damageable)) + return; + + var surplus = tile.temperature - damageable.Threshold; + if (surplus < 0) + return; + + // TODO: parameterised balancing + tile.currentHealth -= surplus; + tile.currentHealth = Mathf.Clamp(tile.currentHealth, 0, 1); + } + private void GenerateHeat() { for (int i = 0; i < _tileGrid.Count; i++) @@ -136,6 +150,7 @@ public class WorldGrid : Node2D var tile = _tileGrid[i]; var type = tile.type; tile.temperature += type.HeatGeneration; + ApplyHeatDamage(ref tile); _tileGrid[i] = tile; } } diff --git a/half-earth/scripts/overlays/NoOverlay.cs b/half-earth/scripts/overlays/NoOverlay.cs index 49f8b1b..1222cec 100644 --- a/half-earth/scripts/overlays/NoOverlay.cs +++ b/half-earth/scripts/overlays/NoOverlay.cs @@ -2,10 +2,25 @@ using Godot; public class NoOverlay : Overlay { + [Export] + private Color _healthy; + + [Export] + private Color _depleted; + // in this view we want to draw tiles with their normal colour public override void Apply(Tile tile, ShaderMaterial material) { var type = tile.type; + + if (type is Wild wild) + { + material.SetShaderParam("lowColor", _depleted); + material.SetShaderParam("highColor", _healthy); + material.SetShaderParam("t", tile.currentHealth); + return; + } + material.SetShaderParam("lowColor", type.Color); material.SetShaderParam("t", 0); } diff --git a/half-earth/scripts/tile/IDamageable.cs b/half-earth/scripts/tile/IDamageable.cs new file mode 100644 index 0000000..6279a0d --- /dev/null +++ b/half-earth/scripts/tile/IDamageable.cs @@ -0,0 +1,4 @@ +public interface IDamageable +{ + float Threshold { get; } +} \ No newline at end of file diff --git a/half-earth/scripts/tile/Tile.cs b/half-earth/scripts/tile/Tile.cs index 662c72c..3a51b55 100644 --- a/half-earth/scripts/tile/Tile.cs +++ b/half-earth/scripts/tile/Tile.cs @@ -5,4 +5,5 @@ public struct Tile public bool isHighlighted; public float temperature; public TileType type; + public float currentHealth; } \ No newline at end of file diff --git a/half-earth/scripts/tile/TileGrid.cs b/half-earth/scripts/tile/TileGrid.cs index 7a2eb08..ef2c812 100644 --- a/half-earth/scripts/tile/TileGrid.cs +++ b/half-earth/scripts/tile/TileGrid.cs @@ -10,7 +10,7 @@ public class TileGrid : Resource, IReadOnlyList [Export] private Resource _startTileTypeResource; - public TileType StartTileType => (TileType)_startTileTypeResource; + private TileType StartTileType => (TileType)_startTileTypeResource; public int Count => Size * Size; @@ -58,6 +58,7 @@ public class TileGrid : Resource, IReadOnlyList tile.isHighlighted = false; tile.temperature = 0.0f; tile.type = StartTileType; + tile.currentHealth = 1.0f; tiles.Add(tile); } diff --git a/half-earth/scripts/tile/Wild.cs b/half-earth/scripts/tile/Wild.cs new file mode 100644 index 0000000..5cfef22 --- /dev/null +++ b/half-earth/scripts/tile/Wild.cs @@ -0,0 +1,7 @@ +using Godot; + +public class Wild : TileType, IDamageable +{ + [Export] + public float Threshold { get; private set; } +} \ No newline at end of file