using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering.Universal; public class AblaufKleinerStern2 : MonoBehaviour { public GameObject kleinerStern; public GameObject hase; 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 = SternFaellt; taskList = new List(); kleinerStern.GetComponent().simulated = false; 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 SternFaellt(){ globalLight.GetComponent().FadeToIntensity(1, .3f); Rigidbody2D sternRigBod = kleinerStern.GetComponent(); sternRigBod.simulated = true; kleinerStern.transform.position = new Vector2(-0.8f, 6.0f); hase.transform.position = new Vector2(11, -4); hase.GetComponent().Turn(); scheduleNewTask(2.5f, delegate(){ sternRigBod.simulated = false; SternBewegung sternBewegung = kleinerStern.GetComponent(); sternBewegung.enabled = true; sternBewegung.GoToPositionWithVelocity(new Vector2(-2.1f, -2.6f), 1); hase.GetComponent().simulated = true; }); nextStep = AuftrittHase; } private void AuftrittHase(){ hase.GetComponent().GoToXPosition(2.0f); nextStep = Abgang; } private void Abgang(){ HaseBewegung haseBewegung = hase.GetComponent(); haseBewegung.GoToXPosition(15); haseBewegung.Turn(); SternBewegung sternBewegung = kleinerStern.GetComponent(); sternBewegung.GoToPositionWithVelocity(new Vector2(12, 0), haseBewegung.jumpVelocityX * .8f); sternBewegung.randomnessIntensity = 1; sternBewegung.randomnessBaseAngle = 5; sternBewegung.randomMovementDuration = .6f; sternBewegung.wobblingAngle = 10; sternBewegung.wobblingDuration = .6f; scheduleNewTask(3, delegate(){ globalLight.GetComponent().FadeToIntensity(0, .5f); }); nextStep = delegate(){}; } private void scheduleNewTask(float timeFromNow, Action action){ Task t = new(action, Time.time + timeFromNow); taskList.Add(t); } }