89 lines
2.4 KiB
C#
89 lines
2.4 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using UnityEngine.SceneManagement;
|
|
using System.Collections;
|
|
|
|
public class LevelManager : MonoBehaviour
|
|
{
|
|
// A serializable structure that holds a UI button and its corresponding scene
|
|
[System.Serializable]
|
|
public class LevelEntry
|
|
{
|
|
public Button levelButton;
|
|
public string sceneName;
|
|
public string jumpPoint;
|
|
}
|
|
|
|
[SerializeField]
|
|
private string jumpPointGrottoEssen;
|
|
|
|
[SerializeField]
|
|
private string jumpPointGrottoKueche;
|
|
|
|
|
|
// A list of LevelEntry objects that can be filled in the inspector
|
|
public List<LevelEntry> levels = new List<LevelEntry>();
|
|
|
|
private void Awake()
|
|
{
|
|
// Reset entry level points
|
|
EntryLevel.GoToGrottoKueche = false;
|
|
EntryLevel.GoToGrottoEssen = false;
|
|
|
|
// Loop through each level entry and hook up the button to load the correct scene
|
|
foreach (var entry in levels)
|
|
{
|
|
// Check if both the button and scene name are set
|
|
if (entry.levelButton != null && !string.IsNullOrEmpty(entry.sceneName))
|
|
{
|
|
// Store the scene name locally to avoid closure issues in the lambda
|
|
string sceneToLoad = entry.sceneName;
|
|
|
|
entry.levelButton.onClick.AddListener(() => OnClickLoadLevel(sceneToLoad));
|
|
|
|
string goToJumpPoint = entry.jumpPoint;
|
|
|
|
entry.levelButton.onClick.AddListener(() => SetEntryLevel(goToJumpPoint));
|
|
}
|
|
}
|
|
}
|
|
|
|
// This method is called when a button is clicked, and loads the given scene by name
|
|
public void OnClickLoadLevel(string sceneName)
|
|
{
|
|
StartCoroutine(LoadAsyncScene(sceneName));
|
|
}
|
|
|
|
IEnumerator LoadAsyncScene(string sceneName)
|
|
{
|
|
AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(sceneName);
|
|
|
|
// Wait until the asynchronous scene fully loads
|
|
while (!asyncLoad.isDone)
|
|
{
|
|
yield return null;
|
|
}
|
|
}
|
|
|
|
public void SetEntryLevel(string entryPoint)
|
|
{
|
|
if (string.IsNullOrEmpty(entryPoint))
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (entryPoint == jumpPointGrottoEssen)
|
|
{
|
|
EntryLevel.GoToGrottoEssen = true;
|
|
return;
|
|
}
|
|
|
|
if (entryPoint == jumpPointGrottoKueche)
|
|
{
|
|
EntryLevel.GoToGrottoKueche = true;
|
|
return;
|
|
}
|
|
}
|
|
}
|