refactor: TileRegistry replaces parallel tile/view collections
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user