Files
2025-07-03 13:31:47 +02:00

80 lines
3.1 KiB
C#

using Cysharp.Threading.Tasks;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class SceneLoader : MonoBehaviour
{
[SerializeField] private int baseSceneIndex;
private bool isLoaded;
private int currentScene = 0;
public int prevScene = 0;
private void Awake()
{
currentScene = baseSceneIndex; // holt sich den Index der aktuellen Szene
}
public void LoadScene(string sceneName) // ist die Funktion zum gewögnlichen Laden von Szenen
{
SceneManager.LoadScene(sceneName);
}
public void LoadNextSceneAdditive() // Lädt die nach Index nächste Szene additiv hinzu. Wird asynchron ausgeführt.
{
Debug.LogError("Triggered");
if (currentScene >= SceneManager.sceneCountInBuildSettings - 1 || SceneManager.loadedSceneCount > 2) return; // die aktuelle Szene darf nicht die letzte sein und es dürfen nöch keine zwei Szenen geladen sein.
int nextScene = currentScene + 1; // setzt den Index für die nächste Szene
prevScene = currentScene; // die aktuelle Szene wird zur "Previous Scene". Nun kann sie entladen werden.
currentScene = nextScene; // die nächste Szene wird zur neuen "Current Scene".
SceneManager.LoadSceneAsync(nextScene, LoadSceneMode.Additive); // nun wird die nächste Szene (in diesem moment dieselbe wie "Current Scene" asynchron hinzugeladen.
Debug.Log("Loaded Scene " + nextScene);
}
public void UnloadPrevSceneAdditive() // Entlädt die Szene, deren Index als "Previous Scene" festgehalten ist.
{
if (prevScene == baseSceneIndex) return; // Wird nicht ausgeführt, wenn die "Previous Scene" die Basis-Szene ist.
SceneManager.UnloadSceneAsync(prevScene); // Die "Previous Scene" wird entladen.
if (SceneManager.GetSceneByName("CurrentResults").isLoaded)
{
SceneManager.UnloadSceneAsync("CurrentResults");
Debug.Log("Unloaded CurrentResults");
}
}
public void LoadResultsAdditive() // Lädt die Results zur aktuellen Szene
{
SceneManager.LoadScene("CurrentResults", LoadSceneMode.Additive);
}
public void NewRoom()
{
LoadNewRoom();
}
private async UniTaskVoid LoadNewRoom() // Aktuelle Methode zum Laden von Szenen
{
int sceneCount = SceneManager.sceneCount;
for (int i = 0; i < sceneCount; i++)
{
Scene myScene = SceneManager.GetSceneAt(i);
if (myScene.isLoaded && myScene != SceneManager.GetSceneByBuildIndex(baseSceneIndex))
{
currentScene = myScene.buildIndex;
await SceneManager.UnloadSceneAsync(myScene);
}
}
if (currentScene == SceneManager.sceneCountInBuildSettings-1)
{
await SceneManager.LoadSceneAsync(baseSceneIndex); // Lädt die Basis-Szene komplett neu, falls vorherige Szene die letzte war.
}
else
{
await SceneManager.LoadSceneAsync(currentScene + 1, LoadSceneMode.Additive); // Lädt die nächste Szene additiv
Debug.Log("Loaded Room " + (currentScene + 1));
}
}
}