summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/DungeonLevel.cs17
-rw-r--r--scripts/Utils/Grid.cs2
-rw-r--r--scripts/actors/actions/MovementAction.cs2
3 files changed, 17 insertions, 4 deletions
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<Actor> actors = [];
- private Node2D actors;
+ private Node2D actorsNode;
public override void _Ready()
{
base._Ready();
buildingLayer = GetNode<TileMapLayer>("Dungeon");
- actors = GetNode<Node2D>("Actors");
- player = actors.GetNode<Player>("Player");
+ actorsNode = GetNode<Node2D>("Actors");
+ player = actorsNode.GetNode<Player>("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);
}
}