krippenspiele/Assets/AblaufKleinerStern3.cs

126 lines
4.6 KiB
C#

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<Task> 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<Rigidbody2D>().simulated = false;
globalLight.GetComponent<Light2D>().intensity = 0;
}
// Update is called once per frame
void Update()
{
List<Task> 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<Lichtsteuerung>().FadeToIntensity(1, 0.5f);
FigurMitBeinenBewegung josephBewegung = joseph.GetComponent<FigurMitBeinenBewegung>();
josephBewegung.GoToXPosition(targetJoseph);
mariaAufEsel.GetComponent<FigurMitBeinenBewegung>().GoToXPosition(targetMaria);
scheduleNewTask(mariaJosephStreckeAuftritt/josephBewegung.movementVelocity + 0.2f, delegate(){
josephBewegung.GoToXPosition(targetJoseph - 0.01f);
});
nextStep = AuftrittKleinerStern;
}
private void AuftrittKleinerStern(){
kleinerStern.GetComponent<SternBewegung>().GoToPositionWithVelocity(new Vector2(targetStern, 3.0f), 1);
HaseBewegung haseBewegung = hase.GetComponent<HaseBewegung>();
haseBewegung.Turn();
haseBewegung.GoToXPosition(targetHase);
hase.GetComponent<Rigidbody2D>().simulated = true;
scheduleNewTask(1.5f, delegate(){
joseph.GetComponent<FigurMitBeinenBewegung>().GoToXPosition(targetJoseph);
});
nextStep = EinStueckWeiter;
}
private void EinStueckWeiter(){
joseph.GetComponent<FigurMitBeinenBewegung>().GoToXPosition(targetJoseph + kleinesStueck);
mariaAufEsel.GetComponent<FigurMitBeinenBewegung>().GoToXPosition(targetMaria + kleinesStueck);
scheduleNewTask(0.5f, delegate(){
kleinerStern.GetComponent<SternBewegung>().GoToPositionWithVelocity(new Vector2(targetStern + kleinesStueck, 3.0f), 1);
HaseBewegung haseBewegung = hase.GetComponent<HaseBewegung>();
haseBewegung.Turn();
haseBewegung.GoToXPosition(targetHase + kleinesStueck);
});
nextStep = Abgang;
}
private void Abgang(){
joseph.GetComponent<FigurMitBeinenBewegung>().GoToXPosition(20);
mariaAufEsel.GetComponent<FigurMitBeinenBewegung>().GoToXPosition(20);
scheduleNewTask(0.5f, delegate(){
kleinerStern.GetComponent<SternBewegung>().GoToPositionWithVelocity(new Vector2(20, 3.0f), 1);
hase.GetComponent<HaseBewegung>().GoToXPosition(20);
});
scheduleNewTask(3, delegate(){
globalLight.GetComponent<Lichtsteuerung>().FadeToIntensity(0, 1);
});
scheduleNewTask(4.1f, delegate(){
SceneManager.LoadScene("kleiner_Stern_4");
});
nextStep = delegate(){};
}
}