using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering.Universal; public class AblaufKleinerStern1 : MonoBehaviour { public GameObject kleinerStern; public GameObject grosserStern; public GameObject globalLight; public GameObject sternenhimmel; public GameObject hintergrund; private enum Step {GROSSE_AUFREGUNG, AUFTRITT_KLEINER_STERN, AUFTRITT_GROSSER_STERN, ABGANG_GROSSER_STERN, KLEINER_STERN_FAELLT} private Step nextStep; private class Task { public readonly float time; public readonly Action action; public Task(float time, Action action) { this.time = time; this.action = action; } } private List taskList; private Camera cameraComponent; private SternBewegung kleinerSternBewegung; private SternBewegung grosserSternBewegung; // Start is called once before the first execution of Update after the MonoBehaviour is created void Start() { nextStep = Step.GROSSE_AUFREGUNG; taskList = new List(); globalLight.GetComponent().intensity = 0; cameraComponent = GetComponent(); kleinerSternBewegung = kleinerStern.GetComponent(); grosserSternBewegung = grosserStern.GetComponent(); } // Update is called once per frame void Update() { List doneList = new List(); foreach (Task t in taskList) { if (Time.time >= t.time) { doneList.Add(t); t.action(); } } foreach (Task t in doneList) { taskList.Remove(t); } if (Input.GetKeyDown(KeyCode.Space)){ switch (nextStep) { case Step.GROSSE_AUFREGUNG: GrosseAufregung(); nextStep = Step.AUFTRITT_KLEINER_STERN; break; case Step.AUFTRITT_KLEINER_STERN: AuftrittKleinerStern(); nextStep = Step.AUFTRITT_GROSSER_STERN; break; case Step.AUFTRITT_GROSSER_STERN: AuftrittGrosserStern(); nextStep = Step.ABGANG_GROSSER_STERN; break; case Step.ABGANG_GROSSER_STERN: AbgangGrosserStern(); nextStep = Step.KLEINER_STERN_FAELLT; break; case Step.KLEINER_STERN_FAELLT: KleinerSternFaellt(); break; } } } private void GrosseAufregung(){ globalLight.GetComponent().FadeToIntensity(1, 2); kleinerSternBewegung.GoToPosition(new Vector2(-12, -3.5f), 0f); grosserSternBewegung.GoToPosition(new Vector2(12, -3.5f), 0f); } private void AuftrittKleinerStern(){ kleinerSternBewegung.GoToPosition(new Vector2(-3, -2f), 2f); } private void AuftrittGrosserStern(){ kleinerSternBewegung.randomnessIntensity = .01f; kleinerSternBewegung.wobblingAngle = 2f; kleinerSternBewegung.wobblingDuration = 1.5f; grosserSternBewegung.GoToPosition(new Vector2(3, -2f), 2.4f); } private void AbgangGrosserStern(){ grosserStern.GetComponent().flipX = true; grosserSternBewegung.GoToPosition(new Vector2(12, 0), 2); kleinerSternBewegung.randomnessIntensity = 1; kleinerSternBewegung.wobblingAngle = 10; kleinerSternBewegung.wobblingDuration = .6f; } private void KleinerSternFaellt(){ kleinerSternBewegung.angularVelocity = 300; kleinerSternBewegung.GoToPosition(new Vector2(-4, -6), 1); kleinerSternBewegung.randomnessIntensity = 0.01f; doDelayed(1.0f, delegate(){ globalLight.GetComponent().FadeToIntensity(0, .5f); kleinerSternBewegung.GoToPosition(new Vector2(1, 6.5f), 0); }); doDelayed(1.5f, delegate(){ hintergrund.GetComponent().color = Color.black; sternenhimmel.SetActive(false); globalLight.GetComponent().FadeToIntensity(1, 0); kleinerSternBewegung.GoToPosition(new Vector2(-1, -6.5f), 3); }); } private void doDelayed(float delay, Action task) { taskList.Add(new Task(Time.time + delay, task)); } }