using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering.Universal; using UnityEngine.SceneManagement; public class AblaufKleinerStern3 : MonoBehaviour { public GameObject mariaAufEsel; public GameObject joseph; public GameObject hase; public GameObject kleinerStern; public GameObject globalLight; private Action nextStep; private class Task { private Action action; private float time; public Task(Action action, float time){ this.action = action; this.time = time; } public bool isDue(){ return Time.time >= time; } public void Do(){ action(); } } private List taskList; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { nextStep = AuftrittMariaUndJoseph; taskList = new(); mariaAufEsel.transform.position = new Vector2(targetMaria - mariaJosephStreckeAuftritt, -1.5f); joseph.transform.position = new Vector2(targetJoseph - mariaJosephStreckeAuftritt, -2.81f); kleinerStern.transform.position = new Vector2(10.2f, 3.0f); hase.transform.position = new Vector2(10.5f, -4.33f); hase.GetComponent().simulated = false; globalLight.GetComponent().intensity = 0; } // Update is called once per frame void Update() { List newlist = new(); foreach (Task t in taskList){ if (t.isDue()){ t.Do(); } else { newlist.Add(t); } } taskList = newlist; if (Input.GetKeyDown(KeyCode.Space)){ nextStep(); } } private void scheduleNewTask(float timeFromNow, Action action){ Task t = new(action, Time.time + timeFromNow); taskList.Add(t); } private const float targetJoseph = -1.1f; private const float targetMaria = -5.5f; private const float targetStern = 3.5f; private const float targetHase = 5.0f; private const float kleinesStueck = 1.0f; private const float mariaJosephStreckeAuftritt = 6.5f; private void AuftrittMariaUndJoseph(){ globalLight.GetComponent().FadeToIntensity(1, 0.5f); FigurMitBeinenBewegung josephBewegung = joseph.GetComponent(); josephBewegung.GoToXPosition(targetJoseph); mariaAufEsel.GetComponent().GoToXPosition(targetMaria); scheduleNewTask(mariaJosephStreckeAuftritt/josephBewegung.movementVelocity + 0.2f, delegate(){ josephBewegung.GoToXPosition(targetJoseph - 0.01f); }); nextStep = AuftrittKleinerStern; } private void AuftrittKleinerStern(){ kleinerStern.GetComponent().GoToPositionWithVelocity(new Vector2(targetStern, 3.0f), 1); HaseBewegung haseBewegung = hase.GetComponent(); haseBewegung.Turn(); haseBewegung.GoToXPosition(targetHase); hase.GetComponent().simulated = true; scheduleNewTask(1.5f, delegate(){ joseph.GetComponent().GoToXPosition(targetJoseph); }); nextStep = EinStueckWeiter; } private void EinStueckWeiter(){ joseph.GetComponent().GoToXPosition(targetJoseph + kleinesStueck); mariaAufEsel.GetComponent().GoToXPosition(targetMaria + kleinesStueck); scheduleNewTask(0.5f, delegate(){ kleinerStern.GetComponent().GoToPositionWithVelocity(new Vector2(targetStern + kleinesStueck, 3.0f), 1); HaseBewegung haseBewegung = hase.GetComponent(); haseBewegung.Turn(); haseBewegung.GoToXPosition(targetHase + kleinesStueck); }); nextStep = Abgang; } private void Abgang(){ joseph.GetComponent().GoToXPosition(20); mariaAufEsel.GetComponent().GoToXPosition(20); scheduleNewTask(0.5f, delegate(){ kleinerStern.GetComponent().GoToPositionWithVelocity(new Vector2(20, 3.0f), 1); hase.GetComponent().GoToXPosition(20); }); scheduleNewTask(3, delegate(){ globalLight.GetComponent().FadeToIntensity(0, 1); }); scheduleNewTask(4.1f, delegate(){ SceneManager.LoadScene("kleiner_Stern_4"); }); nextStep = delegate(){}; } }