Added exploration node to DSL and worked on vertical pathfinding (Closed gates blocked horizontal movement as well)

This commit is contained in:
=
2026-05-02 21:53:31 +02:00
parent 7f13505759
commit f3c551e792
12 changed files with 169 additions and 16 deletions
+30 -7
View File
@@ -8,7 +8,7 @@ public class Pathfinding
private static Dictionary<Vector3I, long> coordToId = new();
private static Dictionary<long, Vector3I> idToCoord = new();
private static long nextId = 1;
private static long[] layerGateIds = new long[GameData.ruinSize];
private static Dictionary<int, (long fromId, long toId)> verticalConnections = new();
private static long GetOrCreateId(Vector3I coord)
{
@@ -27,7 +27,7 @@ public class Pathfinding
aStar.Clear();
coordToId.Clear();
idToCoord.Clear();
layerGateIds = new long[GameData.ruinSize];
verticalConnections.Clear();
nextId = 1;
for (int y = 0; y < GameData.ruinSize; y++)
@@ -45,10 +45,6 @@ public class Pathfinding
long id = GetOrCreateId(coord);
aStar.AddPoint(id, tile.Position);
if (tile.collapsedMesh == "gate")
{
layerGateIds[y] = id;
}
}
}
}
@@ -74,6 +70,19 @@ public class Pathfinding
long toId = coordToId[to];
if (from.Y != to.Y && GameData.map[from.Y].tiles[from.X, from.Z].collapsedMesh == "gate")
{
verticalConnections[from.Y] = (fromId, toId);
if (GameData.map[from.Y].isGateOpen)
{
if (!aStar.ArePointsConnected(fromId, toId))
{
aStar.ConnectPoints(fromId, toId, true);
}
}
continue;
}
if (!aStar.ArePointsConnected(fromId, toId))
{
aStar.ConnectPoints(fromId, toId);
@@ -89,7 +98,21 @@ public class Pathfinding
public static void UpdateGatePoint(int layer, bool isOpen)
{
aStar.SetPointDisabled(layerGateIds[layer], !isOpen);
if (!verticalConnections.ContainsKey(layer))
return;
var (fromId, toId) = verticalConnections[layer];
if (isOpen)
{
if (!aStar.ArePointsConnected(fromId, toId))
aStar.ConnectPoints(fromId, toId, true);
}
else
{
if (aStar.ArePointsConnected(fromId, toId))
aStar.DisconnectPoints(fromId, toId);
}
}
public static List<Vector3> GetPath(Vector3I start, Vector3I end)