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

@ -28,17 +28,24 @@ public class GridManager : MonoBehaviour
[SerializeField] Camera cam;
private Dictionary<Vector2, TileObject> allTiles = new();
[SerializeField] private Transform grid;
private void Start()
{
GenerateGrid();
cam.transform.position = new Vector3((float)width / 2, (float)height / 2, 0);
foreach (PlayerEntity player in TurnHandler.instance.playerEntities)
{
player.currentTile = GetTile(player.transform.position);
player.currentTile = GetTileFromWorldPos(player.transform.position);
player.currentTile.hasUnit = player;
}
foreach (Enemy enemy in TurnHandler.instance.enemyEntities)
{
enemy.currentTile = GetTile(enemy.transform.position);
enemy.currentTile = GetTileFromWorldPos(enemy.transform.position);
enemy.currentTile.hasUnit = enemy;
}
foreach (Transform spawnLocation in EnemySpawner.instance.spawnLocationPos)
{
EnemySpawner.instance.spawnLocations.Add(GetTileFromWorldPos(spawnLocation.position));
}
}
@ -52,6 +59,7 @@ public class GridManager : MonoBehaviour
TileObject newTile = Instantiate(tilePrefab, pos, Quaternion.identity);
newTile.name = $"Tile {x} {y}";
allTiles[pos] = newTile;
newTile.transform.SetParent(grid);
}
}
GetTileNeighbors();
@ -65,15 +73,15 @@ public class GridManager : MonoBehaviour
{
Vector2 pos = new Vector2(x - ((float)width / 2) + 0.5f, y - ((float)height / 2) + 0.5f);
TileObject currentTile = allTiles[pos];
if (GetTile(pos + Vector2.up)) { currentTile.neighbors.Add(GetTile(pos+Vector2.up));}
if (GetTile(pos + Vector2.down)) { currentTile.neighbors.Add(GetTile(pos+Vector2.down));}
if (GetTile(pos + Vector2.left)) { currentTile.neighbors.Add(GetTile(pos+Vector2.left));}
if (GetTile(pos + Vector2.right)) { currentTile.neighbors.Add(GetTile(pos+Vector2.right));}
if (GetTileFromWorldPos(pos + Vector2.up)) { currentTile.neighbors.Add(GetTileFromWorldPos(pos+Vector2.up));}
if (GetTileFromWorldPos(pos + Vector2.down)) { currentTile.neighbors.Add(GetTileFromWorldPos(pos+Vector2.down));}
if (GetTileFromWorldPos(pos + Vector2.left)) { currentTile.neighbors.Add(GetTileFromWorldPos(pos+Vector2.left));}
if (GetTileFromWorldPos(pos + Vector2.right)) { currentTile.neighbors.Add(GetTileFromWorldPos(pos+Vector2.right));}
}
}
}
public TileObject GetTile(Vector2 pos)
public TileObject GetTileFromWorldPos(Vector2 pos)
{
if (allTiles.TryGetValue(pos, out TileObject tile))
{
@ -81,4 +89,31 @@ public class GridManager : MonoBehaviour
}
return null;
}
public TileObject FindClosestEmptyTile(TileObject requestedTile)
{
if (!requestedTile.hasUnit)
{
return requestedTile;
}
Queue<TileObject> frontier = new();
List<TileObject> visited = new();
frontier.Enqueue(requestedTile);
while (frontier.Count > 0)
{
TileObject currentTile = frontier.Dequeue();
foreach (TileObject neighbor in currentTile.neighbors)
{
if (!visited.Contains(neighbor))
{
if (!neighbor.hasUnit && !neighbor.blocked)
{
return neighbor;
}
visited.Add(neighbor);
frontier.Enqueue(neighbor);
}
}
}
return null;
}
}