using System; using System.Collections.Generic; using Core.Domain; using UnityEngine; namespace Infrastructure.Unity { public class TileRegistry { private readonly List _tiles = new(); private readonly Dictionary _views = new(); public IReadOnlyList AllTiles => _tiles; public void Register(Tile tile, TileViewAdapter view = null) { _tiles.Add(tile); if (view != null) _views[tile.Id] = view; } public bool TryGetView(string tileId, out TileViewAdapter view) => _views.TryGetValue(tileId, out view); public List FindTiles(Predicate predicate) => _tiles.FindAll(predicate); public List> GroupViewsByFloor(int floorCount) { var floors = new List>(floorCount); for (var i = 0; i < floorCount; i++) floors.Add(new List()); foreach (var tile in _tiles) { if (tile.Floor >= floorCount) { Debug.LogWarning($"TileRegistry: tile '{tile.Id}' floor {tile.Floor} >= floorCount {floorCount}, skipping"); continue; } if (_views.TryGetValue(tile.Id, out var view)) floors[tile.Floor].Add(view); } return floors; } } }