From d3780d5b48825b09d67b35132b37b5afb5132635 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A4=D1=91=D0=B4=D0=BE=D1=80=20=D0=92=D0=B5=D1=81=D0=B5?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2?= Date: Mon, 16 Sep 2024 17:05:57 +0500 Subject: [PATCH] Shovel done --- scripts/Utility.cs | 3 +++ scripts/components/gui/ShovelButton.cs | 13 +++++++++++-- scripts/components/level/PlantField.cs | 2 +- scripts/components/plants/RuntimePlantData.cs | 4 ++-- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/scripts/Utility.cs b/scripts/Utility.cs index 7b5d9b0..7fc941b 100644 --- a/scripts/Utility.cs +++ b/scripts/Utility.cs @@ -9,6 +9,9 @@ public partial class Utility { public const int TileWidth = 50; public const int TileHeight = 60; + + public const int LayersCount = 3; public static readonly Vector2I LeftFieldBoundary = new Vector2I(305,76); public static readonly Vector2I RightFieldBoundary = new Vector2I(755,376); + } diff --git a/scripts/components/gui/ShovelButton.cs b/scripts/components/gui/ShovelButton.cs index 35a281f..5402248 100644 --- a/scripts/components/gui/ShovelButton.cs +++ b/scripts/components/gui/ShovelButton.cs @@ -29,9 +29,18 @@ public partial class ShovelButton : TextureButton { if (@event.IsActionPressed("primary_action")) { - if (_shovelCast.IsColliding() && (_shovelCast.GetCollider() as CollisionObject2D).GetParent() is RuntimePlantData plant) + if (_shovelCast.IsColliding()) { - plant.Kill(); + var checkedPosition = (_shovelCast.GetCollider() as Node).GetParent().GlobalPosition; + + for (int i = Utility.LayersCount-1; i >= 0; i--) + { + if (LevelController.Instance.Pools.EntityField[i].TryGetValue(checkedPosition, out var entity) && entity is RuntimePlantData plantData) + { + plantData.Kill(); + break; + } + } } ButtonPressed = false; } diff --git a/scripts/components/level/PlantField.cs b/scripts/components/level/PlantField.cs index aaaf5ab..65c19aa 100644 --- a/scripts/components/level/PlantField.cs +++ b/scripts/components/level/PlantField.cs @@ -71,7 +71,7 @@ public partial class PlantField : Node2D var plant = _resource.Scene.Instantiate(); LevelController.Instance.Pools.Plants.AddChild(plant); plant.GlobalPosition = (_plantSetter.GlobalPosition / tile).Ceil() * tile - new Vector2(20, 14); - plant.Layer = _resource.Layer; + plant.Resource = _resource; LevelController.Instance.Pools.EntityField[_resource.Layer].Add(plant.GlobalPosition, plant as IEntity); diff --git a/scripts/components/plants/RuntimePlantData.cs b/scripts/components/plants/RuntimePlantData.cs index fe72a3e..8f3697a 100644 --- a/scripts/components/plants/RuntimePlantData.cs +++ b/scripts/components/plants/RuntimePlantData.cs @@ -15,7 +15,7 @@ public partial class RuntimePlantData : Node2D, IEntity public int Hp => _hp; public int MaxHp => _maxHP; public int Line => _line; - public int Layer; + public PlantResource Resource; public override void _Ready() { @@ -44,7 +44,7 @@ public partial class RuntimePlantData : Node2D, IEntity public void Kill() { - LevelController.Instance.Pools.EntityField[Layer].Remove(GlobalPosition); + LevelController.Instance.Pools.EntityField[Resource.Layer].Remove(GlobalPosition); QueueFree(); } }