BGJ-2022.1/Assets/Scripts/Level/LevelManager.cs

88 lines
2.4 KiB
C#

using System;
using System.Collections.Generic;
using UI;
using UnityEngine;
namespace Level
{
public class LevelManager : MonoBehaviour
{
private static LevelManager _instance = null;
public static LevelManager Instance
{
get
{
if (_instance == null)
{
GameObject gameObject = new GameObject("Level Manager");
_instance = gameObject.AddComponent<LevelManager>();
_instance.Initialize();
}
return _instance;
}
}
private Dictionary<string, Level> _levels = null;
public Dictionary<string, Level> Levels
{
get
{
if (_levels == null)
Initialize();
return _levels;
}
}
private Level currentLevel = null;
private void Awake()
{
if (_instance == null)
_instance = this;
if (_instance != this)
Destroy(this);
}
private void Initialize()
{
GameObject[] levelPrefabs = Resources.LoadAll<GameObject>("Levels/");
Transform levelContainer = new GameObject("Levels").transform;
_levels = new Dictionary<string, Level>(levelPrefabs.Length);
System.Array.Sort(levelPrefabs, (x, y) => Int32.Parse(x.name).CompareTo(Int32.Parse(y.name)));
GameObject levelInstance = null;
Level level = null;
foreach (GameObject levelPrefab in levelPrefabs)
{
levelInstance = new GameObject(levelPrefab.gameObject.name);
levelInstance.transform.SetParent(levelContainer);
level = levelInstance.AddComponent<Level>();
level.SetLevel(levelPrefab.name);
_levels.Add(levelPrefab.gameObject.name, level);
}
}
public void SwitchToLevel(string levelName)
{
DisableAllLevels();
currentLevel = Levels[levelName];
currentLevel.Enable();
// TODO Move Player To currentLevel.StartingPoint
UIManager.Instance.CloseAllCanvases();
}
private void DisableAllLevels()
{
foreach (Level level in Levels.Values)
level.Disable();
}
}
}