126 lines
4.6 KiB
C#
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(){};
|
|
}
|
|
}
|