finally get pathfinding done?
This commit is contained in:
parent
7b151c1a53
commit
7bd61df481
23 changed files with 1408 additions and 785 deletions
|
|
@ -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))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue