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; } } } }