finally get pathfinding done?

This commit is contained in:
reisenlol 2026-01-10 02:37:44 -08:00
parent 7b151c1a53
commit 7bd61df481
No known key found for this signature in database
23 changed files with 1408 additions and 785 deletions

View file

@ -22,7 +22,7 @@ public class PlayerEntityMovement : MonoBehaviour
#endregion
[SerializeField] private Grid gameplayGrid;
public Entity selectedEntity;
public PlayerEntity selectedEntity;
public GameObject templateObject;
public bool isMoving;
@ -37,6 +37,7 @@ public class PlayerEntityMovement : MonoBehaviour
private Queue<TileObject> frontier = new();
private HashSet<TileObject> visited = new();
private Dictionary<TileObject, TileObject> currentPaths = new();
private Dictionary<TileObject, int> movementCosts = new();
public List<TileObject> pathRequested;
private TileObject requestedTile;
@ -77,7 +78,7 @@ public class PlayerEntityMovement : MonoBehaviour
}
}
public void SelectEntity(Entity entitySelected)
public void SelectEntity(PlayerEntity entitySelected)
{
selectedEntity = entitySelected;
isMoving = true;
@ -87,8 +88,9 @@ public class PlayerEntityMovement : MonoBehaviour
visited.Clear();
currentPaths.Clear();
pathRequested.Clear();
currentMovableTiles.Clear();
movementCosts.Clear();
GetAllTiles();
GetTilesInRange();
CreateTemplate();
}
@ -103,19 +105,31 @@ public class PlayerEntityMovement : MonoBehaviour
private void GetAllTiles()
{
frontier.Enqueue(selectedEntity.currentTile);
movementCosts.TryAdd(selectedEntity.currentTile, 0);
while (frontier.Count > 0)
{
TileObject currentTile = frontier.Dequeue();
if (movementCosts[currentTile] <= selectedEntity.maxMovement)
{
currentMovableTiles.Add(currentTile);
}
foreach (TileObject neighboringTiles in currentTile.neighbors)
{
int newCost = movementCosts[currentTile] + 1;
if (!visited.Contains(neighboringTiles))
{
visited.Add(neighboringTiles);
frontier.Enqueue(neighboringTiles);
currentPaths.TryAdd(neighboringTiles, currentTile);
movementCosts.TryAdd(neighboringTiles, newCost);
}
}
}
foreach (TileObject tileObject in currentMovableTiles)
{
tileObject.sprite.color = Color.green;
}
}
private void PathfindToTarget()
@ -134,32 +148,6 @@ public class PlayerEntityMovement : MonoBehaviour
}
}
private void GetTilesInRange()
{
foreach (TileObject neighboringTiles in selectedEntity.currentTile.neighbors)
{
if (!neighboringTiles.blocked && !neighboringTiles.hasUnit)
{
currentMovableTiles.Add(neighboringTiles);
neighboringTiles.sprite.color = Color.green;
}
}
for (int i = 0; i < selectedEntity.maxMovement - 1; i++)
{
foreach (TileObject tileObject in currentMovableTiles.ToArray())
{
foreach (TileObject neighboringTiles in tileObject.neighbors)
{
if (!neighboringTiles.blocked && !neighboringTiles.hasUnit)
{
currentMovableTiles.Add(neighboringTiles);
neighboringTiles.sprite.color = Color.green;
}
}
}
}
}
private bool SelectLocation()
{
if (!requestedTile || requestedTile.blocked || requestedTile.hasUnit || !currentMovableTiles.Contains(requestedTile))