refactor: LevelDefinition ScriptableObject drives floor count and geometry
This commit is contained in:
@@ -16,19 +16,15 @@ namespace Infrastructure.Unity
|
||||
[SerializeField] private JumpPadAdapter jumpPadPrefab;
|
||||
[SerializeField] private TeleporterAdapter teleporterPrefab;
|
||||
|
||||
[Header("Level")]
|
||||
[SerializeField] private LevelDefinition levelDefinition;
|
||||
|
||||
[Header("Settings")]
|
||||
[SerializeField] private int gridSizeX = 10;
|
||||
[SerializeField] private int gridSizeY = 10;
|
||||
[SerializeField] private int floorsCount = 3;
|
||||
[SerializeField] private float floorHeightDistance = 15f;
|
||||
[SerializeField] private float decayTime = 0.5f;
|
||||
[SerializeField] private float fallingTime = 2.0f;
|
||||
[SerializeField] private float minimumDistanceBetweenTeleporters = 3f;
|
||||
|
||||
public float FloorHeightDistance => floorHeightDistance;
|
||||
public int FloorsCount => floorsCount;
|
||||
public int GridSizeX => gridSizeX;
|
||||
public int GridSizeY => gridSizeY;
|
||||
public LevelDefinition Definition => levelDefinition;
|
||||
|
||||
private TilePool _tilePool;
|
||||
|
||||
@@ -39,20 +35,35 @@ namespace Infrastructure.Unity
|
||||
var stopwatch = new Stopwatch();
|
||||
stopwatch.Start();
|
||||
|
||||
yield return GenerateFloorAsync(0, MapPatterns.GenerateSquare(gridSizeX, gridSizeY), soundManager, registry, camera, rumble, stopwatch);
|
||||
yield return GenerateFloorAsync(1, MapPatterns.GenerateDonut(gridSizeX, Mathf.FloorToInt(gridSizeX / 3f)), soundManager, registry, camera, rumble, stopwatch);
|
||||
yield return GenerateFloorAsync(2, MapPatterns.GenerateCircle(gridSizeX), soundManager, registry, camera, rumble, stopwatch);
|
||||
for (var i = 0; i < levelDefinition.FloorCount; i++)
|
||||
{
|
||||
var coords = GetCoordsForFloor(levelDefinition.Floors[i].pattern);
|
||||
yield return GenerateFloorAsync(i, coords, soundManager, registry, camera, rumble, stopwatch);
|
||||
}
|
||||
|
||||
stopwatch.Stop();
|
||||
onComplete?.Invoke();
|
||||
}
|
||||
|
||||
private List<Vector2Int> GetCoordsForFloor(FloorPatternType pattern)
|
||||
{
|
||||
var sizeX = levelDefinition.GridSizeX;
|
||||
var sizeY = levelDefinition.GridSizeY;
|
||||
return pattern switch
|
||||
{
|
||||
FloorPatternType.Square => MapPatterns.GenerateSquare(sizeX, sizeY),
|
||||
FloorPatternType.Donut => MapPatterns.GenerateDonut(sizeX, Mathf.FloorToInt(sizeX / 3f)),
|
||||
FloorPatternType.Circle => MapPatterns.GenerateCircle(sizeX),
|
||||
_ => MapPatterns.GenerateSquare(sizeX, sizeY)
|
||||
};
|
||||
}
|
||||
|
||||
private IEnumerator GenerateFloorAsync(int floorIndex, List<Vector2Int> coordinates, SoundManager soundManager,
|
||||
TileRegistry registry, CameraController camera, RumbleManager rumble, Stopwatch stopwatch)
|
||||
{
|
||||
var yOffset = -(floorIndex * floorHeightDistance);
|
||||
var xOffset = gridSizeX / 2f;
|
||||
var zOffset = gridSizeY / 2f;
|
||||
var yOffset = -(floorIndex * levelDefinition.FloorHeightDistance);
|
||||
var xOffset = levelDefinition.GridSizeX / 2f;
|
||||
var zOffset = levelDefinition.GridSizeY / 2f;
|
||||
|
||||
const long frameBudgetMs = 5;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user