Level Selection related stuff added

This commit is contained in:
2022-02-24 00:21:59 +03:00
parent ed15d8b75b
commit 8d1bacaf31
21 changed files with 1401 additions and 107 deletions

View File

@@ -0,0 +1,44 @@
using UnityEngine;
namespace Level
{
public class Level : MonoBehaviour
{
public const string ResourcesDirectory = "Levels/";
public string LevelName { get; private set; } = "";
public Transform StartingPoint { get; private set; } = null;
private GameObject prefab = null;
private GameObject instance = null;
private bool needsRestart = true;
public void SetLevel(string levelName)
{
LevelName = levelName;
prefab = Resources.Load<GameObject>($"{ ResourcesDirectory }{ levelName }");
Disable();
}
public void Enable()
{
gameObject.SetActive(true);
needsRestart = true;
}
public void Disable()
{
if (!needsRestart)
return;
if (instance != null)
Destroy(instance);
instance = Instantiate(prefab, transform.position, Quaternion.identity, transform);
StartingPoint = instance.transform.Find("Starting Point");
gameObject.SetActive(false);
needsRestart = false;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 69df2de2c96af5a4484964cc90840292
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -0,0 +1,87 @@
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();
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 10b4751f48f29094981414367190e392
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: