From bf74afcdd07e59b1a48dbfacdce9d52fad765865 Mon Sep 17 00:00:00 2001 From: Matheus Date: Sun, 17 Aug 2025 20:18:47 -0300 Subject: Inimigos sólidos. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/DungeonLevel.cs | 17 ++++++++++++++--- scripts/Utils/Grid.cs | 2 +- scripts/actors/actions/MovementAction.cs | 2 ++ 3 files changed, 17 insertions(+), 4 deletions(-) (limited to 'scripts') diff --git a/scripts/DungeonLevel.cs b/scripts/DungeonLevel.cs index 6fccc20..d3a5aee 100644 --- a/scripts/DungeonLevel.cs +++ b/scripts/DungeonLevel.cs @@ -5,16 +5,18 @@ public partial class DungeonLevel : Node2D { public Player player; private TileMapLayer buildingLayer; + [Export] + private Godot.Collections.Array actors = []; - private Node2D actors; + private Node2D actorsNode; public override void _Ready() { base._Ready(); buildingLayer = GetNode("Dungeon"); - actors = GetNode("Actors"); - player = actors.GetNode("Player"); + actorsNode = GetNode("Actors"); + player = actorsNode.GetNode("Player"); } public bool IsTileWalkable(Vector2I pos) { @@ -24,4 +26,13 @@ public partial class DungeonLevel : Node2D return (bool)tile.GetCustomData("isWalkable"); } + + public Actor GetBlockingActorAtPosition(Vector2I pos) { + foreach (Actor actor in actors) { + if (actor.GridPosition == pos && actor.BlocksMovement) { + return actor; + } + } + return null; + } } diff --git a/scripts/Utils/Grid.cs b/scripts/Utils/Grid.cs index bf5d98f..cde01f6 100644 --- a/scripts/Utils/Grid.cs +++ b/scripts/Utils/Grid.cs @@ -1,7 +1,7 @@ using Godot; using System; -public partial class Grid : GodotObject { +public abstract partial class Grid : GodotObject { public static readonly Vector2I tileSize = new(16, 16); public static Vector2I WorldToGrid(Vector2 coord) { diff --git a/scripts/actors/actions/MovementAction.cs b/scripts/actors/actions/MovementAction.cs index 8d864bd..6fa3491 100644 --- a/scripts/actors/actions/MovementAction.cs +++ b/scripts/actors/actions/MovementAction.cs @@ -15,6 +15,8 @@ public partial class MovementAction : Action if (!game.Map.IsTileWalkable(finalDestination)) return; + if (game.Map.GetBlockingActorAtPosition(finalDestination) != null) return; + actor.Walk(Offset); } } -- cgit v1.2.3