88 lines
2.4 KiB
C#
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();
|
||
|
}
|
||
|
}
|
||
|
}
|