Add NPC and Power-Up features with associated prefabs and effects

This commit is contained in:
2025-12-12 23:05:40 +01:00
parent 1cfcd09928
commit ee7a2fb4cb
24 changed files with 1051 additions and 5 deletions

View File

@@ -17,6 +17,7 @@ namespace Infrastructure.Unity
[SerializeField] private DeathPlaneAdapter deathPlanePrefab;
[SerializeField] private SoundManager soundManager;
[SerializeField] private CameraController cameraController;
[SerializeField] private NpcController npcPrefab;
[Header("Level Generation")]
[SerializeField] private int floorsCount = 3;
@@ -30,7 +31,10 @@ namespace Infrastructure.Unity
[Header("Settings")]
[SerializeField] private float restartTime = 3f;
[Header("Power Ups")]
[SerializeField] private PowerUpViewAdapter lightFootedPrefab;
[SerializeField] private PowerUpViewAdapter speedBoostPrefab;
private readonly List<Tile> _allTiles = new();
private readonly Dictionary<string, TileViewAdapter> _tileViews = new();
@@ -93,6 +97,9 @@ namespace Infrastructure.Unity
}
var dt = Time.deltaTime;
if (_isGameRunning) _gameSession.Tick(dt);
for (var i = _allTiles.Count - 1; i >= 0; i--)
{
_allTiles[i].Tick(dt);
@@ -180,6 +187,8 @@ namespace Infrastructure.Unity
_gameSession.OnOrbSpawned += SpawnVisualOrb;
_gameSession.OnOrbReset += HandleOrbReset;
_gameSession.OnGameOver += HandleGameOver;
_gameSession.OnSpawnNpc += SpawnNpc;
_gameSession.OnSpawnPowerUp += SpawnPowerUp;
if (!soundManager) return;
@@ -191,6 +200,16 @@ namespace Infrastructure.Unity
};
}
private void SpawnNpc()
{
if (!npcPrefab) return;
var spawnPos = new Vector3(levelGenerator.GridSizeX / 2f, 7f, levelGenerator.GridSizeY / 2f);
Instantiate(npcPrefab, spawnPos, Quaternion.identity);
soundManager.PlayNpcSpawn();
}
private void StartGameSequence()
{
_isGameRunning = true;
@@ -211,5 +230,22 @@ namespace Infrastructure.Unity
_gameSession.StartGame();
}
private void SpawnPowerUp(PowerUpType type, string tileId)
{
if (!_tileViews.TryGetValue(tileId, out var tileView)) return;
if (!tileView) return;
var spawnPos = tileView.transform.position + Vector3.up * 0.5f;
var prefabToSpawn = type == PowerUpType.LightFooted
? lightFootedPrefab
: speedBoostPrefab;
if (!prefabToSpawn) return;
var instance = Instantiate(prefabToSpawn, spawnPos, Quaternion.identity);
instance.Configure(type);
}
}
}