Refactor level generation to use asynchronous processing; improve performance with frame budget management

This commit is contained in:
2025-12-13 03:09:06 +01:00
parent 1ae7190fd3
commit e5388bc5e0
3 changed files with 44 additions and 20 deletions

View File

@@ -71,24 +71,29 @@ namespace Infrastructure.Unity
if (levelGenerator)
{
levelGenerator.Generate(soundManager, _allTiles, _tileViews, cameraController, rumbleManager);
StartCoroutine(levelGenerator.GenerateAsync(soundManager, _allTiles, _tileViews, cameraController,
rumbleManager,
() =>
{
if (!floorVisibilityManager)
{
floorVisibilityManager = gameObject.AddComponent<FloorVisibilityManager>();
}
floorVisibilityManager.Initialize(_gameSession, _allTiles, _tileViews, floorsCount);
if (!floorVisibilityManager)
{
floorVisibilityManager = gameObject.AddComponent<FloorVisibilityManager>();
}
floorVisibilityManager.Initialize(_gameSession, _allTiles, _tileViews, floorsCount);
SpawnDeathPlane();
SpawnPlayer();
if (gameOverUi) gameOverUi.SetActive(false);
if (startScreenUi) startScreenUi.SetActive(true); // Show start screen NOW
WireEvents();
UpdateScoreUi(_gameSession.Score);
}));
}
SpawnDeathPlane();
SpawnPlayer();
if (gameOverUi) gameOverUi.SetActive(false);
if (startScreenUi) startScreenUi.SetActive(true);
WireEvents();
UpdateScoreUi(_gameSession.Score);
}
private void Update()