You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

223 lines
7.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Otter;
using _1869_Remake;
namespace _1869_Remake.Scenes
{
// Intro ist ein ImageSequenzer, welcher die aufelisteten Images nacheinander ein- und ausblendet und beim letzten stehen bleibt
// Hier muss der User ein letztes Mal Bestätigen um ins Hauptmenü(neue Szene) zu gelangen
public class Intro : Scene
{
// Imageobjekte mit den Intro Bildschirmen
public Image IntroImage = new Image(Assets.INTRO_IMG_Company);
public Image IntroImage2 = new Image(Assets.INTRO_IMG_ART);
public Image IntroImage3 = new Image(Assets.INTRO_IMG_PROGRAMMING);
public Image IntroImage4 = new Image(Assets.INTRO_IMG_MUSIK);
public Image IntroImage5 = new Image(Assets.TITLE_IMG);
public Image BlackScreen = new Image(Assets.BLACKSCREEN);
public Image aktuellesImage = null;
//Blinkender Text
public Text enterText1 = new Text("Drücke Enter", Assets.FONT_AMIGA4EVER2, 12);
public Text enterText2 = new Text("oder", Assets.FONT_AMIGA4EVER2, 12);
public Text enterText3 = new Text("Linke Maustaste", Assets.FONT_AMIGA4EVER2, 12);
//Intromusik
public Music titleSong = new Music(Assets.MUSIC_TITLE,false);
//Nummer des gerade Angezeigten Bildes
public int ImageNummer = 0;
public const float TIMER_ANZEIGE = 720f;
//AnzeigeTimer muss hoch starten damit sofort erstes bild angezeigt wird
public float anzeigeTimer = 280f;
public float TIMER_BLINK = 60f;
public float TIMER_BLINK_FAST = 10f;
public float blinkTimer = 0f;
//Wenn auf 1 -> User hat bestätigt
public int bestätigt = 0;
public bool soundEnde = false;
public Intro()
{
Globals.aktuelleSzene = "Intro";
//Vorbereiten des Blinktextes
enterText1.Color = new Otter.Color("a01010");
enterText2.Color = new Otter.Color("a01010");
enterText3.Color = new Otter.Color("a01010");
enterText1.CenterOrigin();
enterText2.CenterOrigin();
enterText3.CenterOrigin();
enterText1.X = Globals.Remake.Width - 200;
enterText2.X = Globals.Remake.Width - 200;
enterText3.X = Globals.Remake.Width - 200;
enterText1.Y = Globals.Remake.Height - 150;
enterText2.Y = Globals.Remake.Height - 125;
enterText3.Y = Globals.Remake.Height - 100;
enterText1.Visible = false;
enterText2.Visible = false;
enterText3.Visible = false;
//Vorbereiten des Blackscreens
BlackScreen.CenterOrigin();
BlackScreen.X = Globals.Remake.HalfWidth;
BlackScreen.Y = Globals.Remake.HalfHeight;
BlackScreen.Alpha = 0f;
//Abspielen der Musik(looped nicht sondern geht am ende einfach aus)
titleSong.Play();
}
public override void Update()
{
base.Update();
//Wenn Musik zuende ohne User Eingabe -> Neubeginn
if (!titleSong.IsPlaying)
{
if (soundEnde == false)
{
AddGraphic(BlackScreen);
Tween(BlackScreen, new { Alpha = 1f }, 64f, 0f).Ease(Ease.BackInOut);
soundEnde = true;
}
if (BlackScreen.Alpha >= 0.999f)
{
Globals.LetzteSzene = "Intro";
Globals.Remake.SwitchScene(new Intro());
}
}
//Wenn Taste gedrückt dann bei nächstem Tween weiter zu nächster Szene
if ((Globals.PlayerSession.Controller.Button("Enter").Released || Globals.PlayerSession.Controller.Button("MausLinks").Released) && bestätigt == 0 && ImageNummer != 5)
{
bestätigt = 1;
AddGraphic(BlackScreen);
Tween(BlackScreen, new { Alpha = 1f }, 64f, 0f).Ease(Ease.BackInOut);
}
if (bestätigt == 1)
{
if (BlackScreen.Alpha >= 0.999f)
{
titleSong.Stop();
Globals.Remake.SwitchScene(new ConfigScreen());
}
}
anzeigeTimer++;
//Daueranzeige des letzten Screens mit blinkendem text
if (anzeigeTimer >= TIMER_ANZEIGE/2 && ImageNummer == 5)
{
blinkTimer++;
if (Globals.PlayerSession.Controller.Button("Enter").Released || Globals.PlayerSession.Controller.Button("MausLinks").Released)
{
bestätigt = 1;
TIMER_BLINK = TIMER_BLINK_FAST;
AddGraphic(BlackScreen);
Tween(BlackScreen, new { Alpha = 1f }, 64f, 0f).Ease(Ease.BackInOut);
}
if (blinkTimer >= TIMER_BLINK)
{
enterText1.Visible = !enterText1.Visible;
enterText2.Visible = !enterText2.Visible;
enterText3.Visible = !enterText3.Visible;
blinkTimer = 0;
}
if (bestätigt == 1)
{
if (BlackScreen.Alpha >= 0.999f)
{
titleSong.Stop();
Globals.Remake.SwitchScene(new ConfigScreen());
}
}
}
//Wechsel des Screens
if (anzeigeTimer >= TIMER_ANZEIGE && ImageNummer != 5)
{
//Nächstes Intro Bild
aktuellesImage = null;
ImageNummer++;
//Laden des Nächsten Bildes und beim letzten Bild Welchseln in den Titelbildschirm) [Erweiterbar um endlos viele Screens]
switch(ImageNummer)
{
case 1: aktuellesImage = IntroImage; break;
case 2: aktuellesImage = IntroImage2; break;
case 3: aktuellesImage = IntroImage3; break;
case 4: aktuellesImage = IntroImage4; break;
case 5: aktuellesImage = IntroImage5; break;
// hier eventuell einen Extra screen für Remake einfügen (evtl im Pixelstil Mensch mit Laptop und Otter symbol auf dem Laptop)
}
aktuellesImage.CenterOrigin();
aktuellesImage.X = Globals.Remake.HalfWidth;
aktuellesImage.Y = Globals.Remake.HalfHeight;
aktuellesImage.Alpha = 0f;
ClearGraphics();
AddGraphic(aktuellesImage);
// Tweenen des Alpha wertes für einen "Fade In & Out" effekt
if (ImageNummer != 5)
{
Tween(aktuellesImage, new { Alpha = 1f }, 180f, 0f)
.Ease(Ease.BackInOut)
.Reflect()
.Repeat(1)
.RepeatDelay(360f);
}
else
{
Tween(aktuellesImage, new { Alpha = 1f }, 180f, 0f)
.Ease(Ease.BackInOut);
AddGraphic(enterText1);
AddGraphic(enterText2);
AddGraphic(enterText3);
}
anzeigeTimer = 0f;
}
}
}
}