full turns

This commit is contained in:
reisenlol 2026-01-11 04:22:09 -08:00
parent 7bd61df481
commit 6ff1531662
No known key found for this signature in database
15 changed files with 879 additions and 100 deletions

View file

@ -21,16 +21,17 @@ public class EnemyMovement : MonoBehaviour
private Queue<TileObject> frontier = new();
private HashSet<TileObject> visited = new();
private Dictionary<TileObject, TileObject> currentPaths = new();
public List<TileObject> pathRequested;
public void PathfindToTarget(TileObject target, Entity selectedEntity)
{
frontier.Clear();
visited.Clear();
currentPaths.Clear();
GetTilesInRange(selectedEntity);
TileObject requestedTile = GetPathToTarget(target, selectedEntity);
selectedEntity.currentTile = requestedTile;
selectedEntity.transform.position = requestedTile.transform.position;
GetPathToTarget(GridManager.instance.FindClosestEmptyTile(target), selectedEntity);
selectedEntity.currentTile.hasUnit = null;
selectedEntity.currentTile.hasUnit = selectedEntity;
StartCoroutine(selectedEntity.MoveToLocation(pathRequested.ToArray()));
}
private void GetTilesInRange(Entity selectedEntity)
{
@ -40,7 +41,7 @@ public class EnemyMovement : MonoBehaviour
TileObject currentTile = frontier.Dequeue();
foreach (TileObject neighboringTiles in currentTile.neighbors)
{
if (!visited.Contains(neighboringTiles))
if (!visited.Contains(neighboringTiles) && (!neighboringTiles.hasUnit && !neighboringTiles.blocked))
{
visited.Add(neighboringTiles);
frontier.Enqueue(neighboringTiles);
@ -48,20 +49,23 @@ public class EnemyMovement : MonoBehaviour
}
}
}
Debug.Log(frontier.Count);
}
private TileObject GetPathToTarget(TileObject target, Entity selectedEntity)
private void GetPathToTarget(TileObject target, Entity selectedEntity)
{
TileObject currentTile = target;
List<TileObject> pathToTarget = new();
pathRequested.Clear();
while (currentTile != selectedEntity.currentTile)
{
pathToTarget.Add(currentTile);
pathRequested.Add(currentTile);
currentTile = currentPaths[currentTile];
}
pathToTarget.Reverse();
int validMovementRange = Mathf.Min(pathToTarget.Count, selectedEntity.maxMovement) - 1;
return pathToTarget[validMovementRange];
pathRequested.Reverse();
int validMovementRange = Mathf.Min(pathRequested.Count, selectedEntity.maxMovement) - 1;
if (pathRequested.Count > selectedEntity.maxMovement)
{
int tilesToRemove = pathRequested.Count - selectedEntity.maxMovement;
pathRequested.RemoveRange(selectedEntity.maxMovement, tilesToRemove);
}
}
}