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

@@ -1,5 +1,4 @@
using System.Collections;
using System.Collections.Generic;
using Core.Domain;
using Core.Ports;
using TMPro;
@@ -36,8 +35,7 @@ namespace Infrastructure.Unity
[Header("Power Ups")]
[SerializeField] private PowerUpViewAdapter powerUpPrefab;
private readonly List<Tile> _allTiles = new();
private readonly Dictionary<string, TileViewAdapter> _tileViews = new();
private readonly TileRegistry _tileRegistry = new();
private GameSession _gameSession;
private IPersistenceService _persistenceService;
private InputSystem_Actions _actions;
@@ -67,7 +65,7 @@ namespace Infrastructure.Unity
{
_inputBlockTimer = 0.5f;
_persistenceService = new PlayerPrefsPersistenceAdapter();
_gameSession = new GameSession(_allTiles, _persistenceService);
_gameSession = new GameSession(_tileRegistry.AllTiles, _persistenceService);
// Set Theme based on High Score
ThemeManager.CurrentTheme = ThemeManager.GetTheme(_gameSession.HighScore);
@@ -76,7 +74,7 @@ namespace Infrastructure.Unity
if (levelGenerator)
{
StartCoroutine(levelGenerator.GenerateAsync(soundManager, _allTiles, _tileViews, cameraController,
StartCoroutine(levelGenerator.GenerateAsync(soundManager, _tileRegistry, cameraController,
rumbleManager,
() =>
{
@@ -84,7 +82,7 @@ namespace Infrastructure.Unity
{
floorVisibilityManager = gameObject.AddComponent<FloorVisibilityManager>();
}
floorVisibilityManager.Initialize(_gameSession, _allTiles, _tileViews, floorsCount);
floorVisibilityManager.Initialize(_tileRegistry, floorsCount);
SpawnDeathPlane();
SpawnPlayer();
@@ -155,9 +153,10 @@ namespace Infrastructure.Unity
// Hard Mode: Decay faster as score increases
var decayMultiplier = 1.0f + (_gameSession.Score / 500f);
for (var i = _allTiles.Count - 1; i >= 0; i--)
var allTiles = _tileRegistry.AllTiles;
for (var i = allTiles.Count - 1; i >= 0; i--)
{
_allTiles[i].Tick(dt * dilation * decayMultiplier);
allTiles[i].Tick(dt * dilation * decayMultiplier);
}
}
@@ -185,7 +184,7 @@ namespace Infrastructure.Unity
{
if (_currentOrbInstance) Destroy(_currentOrbInstance);
if (!_tileViews.TryGetValue(tileId, out var tileView)) return;
if (!_tileRegistry.TryGetView(tileId, out var tileView)) return;
if (!tileView) return;
var spawnPos = tileView.transform.position + Vector3.up;
@@ -303,18 +302,18 @@ namespace Infrastructure.Unity
private void SpawnNpc()
{
var validTiles = _allTiles.FindAll(t => t.Floor == 0 && t.CurrentState == TileState.Stable);
var validTiles = _tileRegistry.FindTiles(t => t.Floor == 0 && t.CurrentState == TileState.Stable);
if (validTiles.Count == 0)
{
validTiles = _allTiles.FindAll(t => t.CurrentState == TileState.Stable);
validTiles = _tileRegistry.FindTiles(t => t.CurrentState == TileState.Stable);
}
if (validTiles.Count == 0) return;
var randomTile = validTiles[Random.Range(0, validTiles.Count)];
if (!_tileViews.TryGetValue(randomTile.Id, out var tileView)) return;
if (!_tileRegistry.TryGetView(randomTile.Id, out var tileView)) return;
if (!tileView) return;
var spawnPos = tileView.transform.position + Vector3.up * 5f;
@@ -359,7 +358,7 @@ namespace Infrastructure.Unity
private void SpawnPowerUp(PowerUpType type, string tileId)
{
if (!_tileViews.TryGetValue(tileId, out var tileView)) return;
if (!_tileRegistry.TryGetView(tileId, out var tileView)) return;
if (!tileView) return;
var spawnPos = tileView.transform.position + Vector3.up * 0.5f;
@@ -381,21 +380,22 @@ namespace Infrastructure.Unity
private void OnBeatMeasure()
{
if (_allTiles.Count == 0) return;
var allTiles = _tileRegistry.AllTiles;
if (allTiles.Count == 0) return;
var pulseCount = 25;
for (var i = 0; i < pulseCount; i++)
{
var randIndex = Random.Range(0, _allTiles.Count);
var tile = _allTiles[randIndex];
var randIndex = Random.Range(0, allTiles.Count);
var tile = allTiles[randIndex];
if (tile.Floor < _currentPlayerFloorIndex) continue;
if (tile.Floor > _currentPlayerFloorIndex + 1) continue;
if (tile.CurrentState != TileState.Stable) continue;
if (_tileViews.TryGetValue(tile.Id, out var tileView))
if (_tileRegistry.TryGetView(tile.Id, out var tileView))
{
tileView.PulseEmission(Random.Range(1.2f, 2.0f));
}