full turns
This commit is contained in:
parent
7bd61df481
commit
6ff1531662
15 changed files with 879 additions and 100 deletions
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue