refactor: TileRegistry replaces parallel tile/view collections

This commit is contained in:
2026-05-14 01:12:47 +02:00
parent 34a329ad02
commit 49c9a7904d
6 changed files with 136 additions and 85 deletions

View File

@@ -32,34 +32,34 @@ namespace Infrastructure.Unity
private TilePool _tilePool;
public IEnumerator GenerateAsync(SoundManager soundManager, List<Tile> allTiles, Dictionary<string, TileViewAdapter> tileViews, CameraController camera, RumbleManager rumble, Action onComplete)
public IEnumerator GenerateAsync(SoundManager soundManager, TileRegistry registry, CameraController camera, RumbleManager rumble, Action onComplete)
{
_tilePool = new TilePool(tilePrefab, transform);
var stopwatch = new Stopwatch();
stopwatch.Start();
yield return GenerateFloorAsync(0, MapPatterns.GenerateSquare(gridSizeX, gridSizeY), soundManager, allTiles, tileViews, camera, rumble, stopwatch);
yield return GenerateFloorAsync(1, MapPatterns.GenerateDonut(gridSizeX, Mathf.FloorToInt(gridSizeX / 3f)), soundManager, allTiles, tileViews, camera, rumble, stopwatch);
yield return GenerateFloorAsync(2, MapPatterns.GenerateCircle(gridSizeX), soundManager, allTiles, tileViews, camera, rumble, stopwatch);
yield return GenerateFloorAsync(0, MapPatterns.GenerateSquare(gridSizeX, gridSizeY), soundManager, registry, camera, rumble, stopwatch);
yield return GenerateFloorAsync(1, MapPatterns.GenerateDonut(gridSizeX, Mathf.FloorToInt(gridSizeX / 3f)), soundManager, registry, camera, rumble, stopwatch);
yield return GenerateFloorAsync(2, MapPatterns.GenerateCircle(gridSizeX), soundManager, registry, camera, rumble, stopwatch);
stopwatch?.Stop();
onComplete?.Invoke();
}
private IEnumerator GenerateFloorAsync(int floorIndex, List<Vector2Int> coordinates, SoundManager soundManager,
List<Tile> allTiles, Dictionary<string, TileViewAdapter> tileViews, CameraController camera, RumbleManager rumble, Stopwatch stopwatch)
TileRegistry registry, CameraController camera, RumbleManager rumble, Stopwatch stopwatch)
{
var yOffset = -(floorIndex * floorHeightDistance);
var xOffset = gridSizeX / 2f;
var zOffset = gridSizeY / 2f;
const long frameBudgetMs = 5;
foreach (var coord in coordinates)
{
var pos = new Vector3(coord.x - xOffset, yOffset, coord.y - zOffset);
CreateTile(pos, $"{floorIndex}_{coord.x}_{coord.y}", floorIndex, soundManager, allTiles, tileViews, camera, rumble);
CreateTile(pos, $"{floorIndex}_{coord.x}_{coord.y}", floorIndex, soundManager, registry, camera, rumble);
if (stopwatch.ElapsedMilliseconds > frameBudgetMs)
{
@@ -129,7 +129,7 @@ namespace Infrastructure.Unity
}
private void CreateTile(Vector3 position, string id, int floorIndex, SoundManager soundManager,
List<Tile> allTiles, Dictionary<string, TileViewAdapter> tileViews, CameraController camera, RumbleManager rumble)
TileRegistry registry, CameraController camera, RumbleManager rumble)
{
var go = _tilePool.Get();
go.transform.position = position;
@@ -172,8 +172,7 @@ namespace Infrastructure.Unity
}
};
allTiles.Add(tileLogic);
tileViews.Add(id, go);
registry.Register(tileLogic, go);
}
}
}