✨ Tiles able to deconstruct
This commit is contained in:
		| @@ -1,3 +1,4 @@ | |||||||
|  | #nullable enable | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using Godot; | using Godot; | ||||||
|  |  | ||||||
| @@ -21,6 +22,11 @@ public partial class GridManager : Node | |||||||
|     { |     { | ||||||
|         _grid.Remove(cell); |         _grid.Remove(cell); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     public Node2D? GetBuildingAtCell(Vector2I cell) | ||||||
|  |     { | ||||||
|  |         return _grid.GetValueOrDefault(cell); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
| public static class GridUtils | public static class GridUtils | ||||||
|   | |||||||
| @@ -44,13 +44,23 @@ public partial class PlacementManager : Node2D | |||||||
|         _ghostBuilding.SetGhostMode(canPlace); |         _ghostBuilding.SetGhostMode(canPlace); | ||||||
|  |  | ||||||
|         // Left click to place |         // Left click to place | ||||||
|         if (!Input.IsActionPressed("build_tile") || !canPlace) return; |         if (Input.IsActionPressed("build_tile") && canPlace) | ||||||
|  |         { | ||||||
|  |             _ghostBuilding.FinalizePlacement(); | ||||||
|  |             Grid.OccupyCell(_hoveredCell, _ghostBuilding); | ||||||
|  |  | ||||||
|         _ghostBuilding.FinalizePlacement(); |             _ghostBuilding = (BaseTile)BuildingScene.Instantiate(); | ||||||
|         Grid.OccupyCell(_hoveredCell, _ghostBuilding); |             _ghostBuilding.SetGhostMode(true); | ||||||
|  |             AddChild(_ghostBuilding); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         _ghostBuilding = (BaseTile)BuildingScene.Instantiate(); |         if (Input.IsActionPressed("destroy_tile") && !Grid.IsCellFree(_hoveredCell)) | ||||||
|         _ghostBuilding.SetGhostMode(true); |         { | ||||||
|         AddChild(_ghostBuilding); |             // Right click to destroy | ||||||
|  |             var building = Grid.GetBuildingAtCell(_hoveredCell); | ||||||
|  |             if (building == null) return; | ||||||
|  |             building.QueueFree(); | ||||||
|  |             Grid.FreeCell(_hoveredCell); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
| @@ -50,6 +50,11 @@ build_tile={ | |||||||
| "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(680, 19),"global_position":Vector2(699, 115),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null) | "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(680, 19),"global_position":Vector2(699, 115),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null) | ||||||
| ] | ] | ||||||
| } | } | ||||||
|  | destroy_tile={ | ||||||
|  | "deadzone": 0.2, | ||||||
|  | "events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(481, 42),"global_position":Vector2(500, 138),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null) | ||||||
|  | ] | ||||||
|  | } | ||||||
|  |  | ||||||
| [rendering] | [rendering] | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user