Implement DynamicLevelData interface and refactor LevelManager
This commit is contained in:
parent
6160c52428
commit
0251b20cb2
5 changed files with 42 additions and 13 deletions
9
Assets/Scripts/src/Interfaces/IDynamicLevelData.cs
Normal file
9
Assets/Scripts/src/Interfaces/IDynamicLevelData.cs
Normal file
|
@ -0,0 +1,9 @@
|
|||
using src.Level.src.Level;
|
||||
|
||||
namespace src.Interfaces
|
||||
{
|
||||
public interface IDynamicLevelData
|
||||
{
|
||||
void SetLevelData(LevelData levelData);
|
||||
}
|
||||
}
|
3
Assets/Scripts/src/Interfaces/IDynamicLevelData.cs.meta
Normal file
3
Assets/Scripts/src/Interfaces/IDynamicLevelData.cs.meta
Normal file
|
@ -0,0 +1,3 @@
|
|||
fileFormatVersion: 2
|
||||
guid: 80c7acaaae4f4352a6564a3ede932f13
|
||||
timeCreated: 1564830284
|
|
@ -1,6 +1,7 @@
|
|||
using System.Collections.Generic;
|
||||
using src.Base;
|
||||
using src.Helpers;
|
||||
using src.Interfaces;
|
||||
using src.Level.src.Level;
|
||||
using src.Managers;
|
||||
using src.Wall;
|
||||
|
@ -9,7 +10,7 @@ using Random = UnityEngine.Random;
|
|||
|
||||
namespace src.Level
|
||||
{
|
||||
public class LevelManager : GameplayComponent
|
||||
public class LevelManager : GameplayComponent, IDynamicLevelData
|
||||
{
|
||||
public Count DestructibleWallCount
|
||||
{
|
||||
|
@ -31,10 +32,12 @@ namespace src.Level
|
|||
|
||||
/* Used to group spawned objects */
|
||||
public Transform boardHolder;
|
||||
|
||||
/* Holds the starting position of the player */
|
||||
public Transform startPosition;
|
||||
|
||||
/* Holds references to prefabs for the specified level. */
|
||||
public GameObject indestructibleWallPrefab;
|
||||
private GameObject _indestructibleWallPrefab;
|
||||
private GameObject[] _destructibleWallPrefabs;
|
||||
private GameObject[] _enemiesPrefab;
|
||||
|
||||
|
@ -46,6 +49,7 @@ namespace src.Level
|
|||
/* The size of the board. */
|
||||
private const int Columns = 30;
|
||||
private const int Rows = 20;
|
||||
private bool _isBoardInitialized;
|
||||
|
||||
/* Holds the available positions */
|
||||
private readonly List<Vector3> _freeGridPositionsBoard = new List<Vector3>();
|
||||
|
@ -63,6 +67,7 @@ namespace src.Level
|
|||
_enemyCount = levelData.enemyCount;
|
||||
_enemiesPrefab = levelData.enemiesPrefab;
|
||||
_destructibleWallPrefabs = levelData.destructibleWallsPrefab;
|
||||
_indestructibleWallPrefab = levelData.indestructibleWallsPrefab.ChoseRandom();
|
||||
}
|
||||
|
||||
/* Modifies walls from _destructibleWalls in order to setup upgrades*/
|
||||
|
@ -100,6 +105,12 @@ namespace src.Level
|
|||
* unused positions in a list. */
|
||||
public void InitBoard()
|
||||
{
|
||||
if (_isBoardInitialized)
|
||||
{
|
||||
/* We only want to initialize the board once since it doesn't change... for now*/
|
||||
return;
|
||||
}
|
||||
|
||||
/* We want to iterate over the X axis taking into consideration the startPosition's offset */
|
||||
for (var x = startPosition.position.x; x < Columns; x++)
|
||||
{
|
||||
|
@ -134,6 +145,8 @@ namespace src.Level
|
|||
_freeGridPositionsBoard.Add(new Vector3(x, y, 0f));
|
||||
}
|
||||
}
|
||||
|
||||
_isBoardInitialized = true;
|
||||
}
|
||||
|
||||
/* Randomly places destructible tiles on the level. */
|
||||
|
@ -148,10 +161,12 @@ namespace src.Level
|
|||
{
|
||||
break;
|
||||
}
|
||||
|
||||
usedPositions.Add(nextPosition);
|
||||
PlaceDestructibleTile(nextPosition);
|
||||
numberOfWallsRemaining -= 1;
|
||||
}
|
||||
|
||||
foreach (var usedPosition in usedPositions)
|
||||
{
|
||||
_freeGridPositions.Remove(usedPosition);
|
||||
|
@ -179,7 +194,7 @@ namespace src.Level
|
|||
}
|
||||
|
||||
var instance =
|
||||
Instantiate(indestructibleWallPrefab, new Vector3(x, y, 0f), Quaternion.identity);
|
||||
Instantiate(_indestructibleWallPrefab, new Vector3(x, y, 0f), Quaternion.identity);
|
||||
instance.transform.SetParent(boardHolder);
|
||||
return true;
|
||||
}
|
||||
|
@ -234,6 +249,7 @@ namespace src.Level
|
|||
{
|
||||
Destroy(wall);
|
||||
}
|
||||
|
||||
DebugHelper.LogInfo("LevelManager: Cleared level!");
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,17 +45,17 @@ namespace src.Managers
|
|||
|
||||
public void Start()
|
||||
{
|
||||
_levelManager.InitBoard();
|
||||
StartLevel();
|
||||
}
|
||||
|
||||
private void StartLevel()
|
||||
{
|
||||
var levelData = LevelResource.GetLevelData(_gameStateManager.Level);
|
||||
StartCoroutine(PreInitGame());
|
||||
_levelManager.SetLevelData(levelData);
|
||||
_upgradeManager.SetLevelData(levelData);
|
||||
_levelManager.InitBoard();
|
||||
|
||||
StartCoroutine(PreInitGame());
|
||||
_upgradeManager.SetLevelData(levelData);
|
||||
_levelManager.InitLevel();
|
||||
_playerController.Respawn();
|
||||
}
|
||||
|
|
|
@ -2,12 +2,13 @@ using System;
|
|||
using System.Collections.Generic;
|
||||
using src.Base;
|
||||
using src.Helpers;
|
||||
using src.Interfaces;
|
||||
using src.Level.src.Level;
|
||||
using UnityEngine;
|
||||
|
||||
namespace src.Managers
|
||||
{
|
||||
public class UpgradeManager : GameplayComponent
|
||||
public class UpgradeManager : GameplayComponent, IDynamicLevelData
|
||||
{
|
||||
public static UpgradeManager Instance;
|
||||
private List<GameObject> _unclaimedUpgrades = new List<GameObject>();
|
||||
|
|
Loading…
Reference in a new issue