using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Otter; using _1869_Remake; namespace _1869_Remake.Entities { public class ZeitRad : Entity { // Zeitcontroller // Funktioniert über eine Queue, die aus der globalen Eventliste Events pollt und deren Datum zum nächsten Datum schaltet. // Wenn das Datum einen Monat über schreitet werden aus der globalen Hafen liste, alle Häfen entnommen und deren Nachstock funktion aktivert. // Bei Erstellen der Häfen wurden Ihnen eine Nachstock Schablone implantiert -> In welchem Monat müssen welche Produkte mit welcher Menge nachgestockt werden ! public int startPosX = 478; public int startPosY = 29; private bool zeitRadClicked = false; public bool ende = false; //Zeitanzeiger public int aktuellerTag_Z; public int aktuellerTag_E; public int aktuellerMonat; public int aktuellesJahr_T; public int aktuellesJahr_H; public int aktuellesJahr_Z; public int aktuellesJahr_E; //HintergrundInfos public Image BG_Tag_Z = new Image(Assets.BG_ZEITDISPLAY); public Image BG_Tag_E = new Image(Assets.BG_ZEITDISPLAY); public Image BG_Monat = new Image(Assets.BG_ZEIT_MONAT); public Image BG_Jahr_T = new Image(Assets.BG_ZEITDISPLAY); public Image BG_Jahr_H = new Image(Assets.BG_ZEITDISPLAY); public Image BG_Jahr_Z = new Image(Assets.BG_ZEITDISPLAY); public Image BG_Jahr_E = new Image(Assets.BG_ZEITDISPLAY); //Zahlen anzeigen public Image Zahl_Tag_Zehner = new Image(Assets.ZEITDISPLAY_0); public Image Zahl_Tag_Einzel = new Image(Assets.ZEITDISPLAY_1); public Image Zahl_Monat = new Image(Assets.ZEITDISPLAY_JAN); public Image Zahl_Jahr_Tausend = new Image(Assets.ZEITDISPLAY_1); public Image Zahl_Jahr_Hundert = new Image(Assets.ZEITDISPLAY_0); public Image Zahl_Jahr_Zehner = new Image(Assets.ZEITDISPLAY_0); public Image Zahl_Jahr_Einer = new Image(Assets.ZEITDISPLAY_0); public Image FadeInBlackScreen = new Image(Assets.BLACKSCREEN); public Image FadeOutBlackScreen = new Image(Assets.BLACKSCREEN); Schiff tempSchiff; // Platzhalter Parameterlisten List TempIntParamListe = new List(); List TempStringParamListe = new List(); public ZeitRad(bool fade) { this.X = startPosX; this.Y = startPosY; //Setzen des Aktuellen Datums aktuellerTag_Z = Globals.AktuellerTag_Z; aktuellerTag_E = Globals.AktuellerTag_E; aktuellerMonat = Globals.AktuellerMonat; aktuellesJahr_T = Globals.AktuellesJahr_T; aktuellesJahr_H = Globals.AktuellesJahr_H; aktuellesJahr_Z = Globals.AktuellesJahr_Z; aktuellesJahr_E = Globals.AktuellesJahr_E; //Vorbereiten der Grafiken (Positionen) BG_Tag_Z.X = 0; BG_Tag_Z.Y = 0; BG_Tag_E.X = 18; BG_Tag_E.Y = 0; BG_Monat.X = 36; BG_Monat.Y = 0; BG_Jahr_T.X = 64; BG_Jahr_T.Y = 0; BG_Jahr_H.X = 82; BG_Jahr_H.Y = 0; BG_Jahr_Z.X = 100; BG_Jahr_Z.Y = 0; BG_Jahr_E.X = 118; BG_Jahr_E.Y = 0; if (fade) { //Für Fade in müssen alle Alphas langsam erhöht werden BG_Tag_Z.Alpha = 0; BG_Tag_E.Alpha = 0; BG_Monat.Alpha = 0; BG_Jahr_T.Alpha = 0; BG_Jahr_H.Alpha = 0; BG_Jahr_Z.Alpha = 0; BG_Jahr_E.Alpha = 0; } AddGraphic(BG_Tag_Z); AddGraphic(BG_Tag_E); AddGraphic(BG_Monat); AddGraphic(BG_Jahr_T); AddGraphic(BG_Jahr_H); AddGraphic(BG_Jahr_Z); AddGraphic(BG_Jahr_E); if (fade) { //Fade in Tween(BG_Tag_Z, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); Tween(BG_Tag_E, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); Tween(BG_Monat, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); Tween(BG_Jahr_T, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); Tween(BG_Jahr_H, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); Tween(BG_Jahr_Z, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); Tween(BG_Jahr_E, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); } //Vorbereiten des Blackscreens -> Entitäten brauchen auch Blackscreen Tween sonst bleibeb diese Sichtbar FadeInBlackScreen.Alpha = 1f; FadeInBlackScreen.X = 0; FadeInBlackScreen.Y = 0; Tween(FadeInBlackScreen, new { Alpha = 0f }, 100f, 0f).Ease(Ease.BackInOut); AddGraphics(FadeInBlackScreen); FadeOutBlackScreen.Alpha = 0f; FadeOutBlackScreen.X = 0; FadeOutBlackScreen.Y = 0; } public override void Render() { base.Render(); //Draw.Rectangle(this.X, this.Y, 135, 30); } public override void Update() { base.Update(); // ToDo weiter testen warum nach laden der weltkarte bereits events gelöscht wurden und warum danach spieler mit klicken auf zeitrad wieder altes event läd(start) if (Util.InRect(this.Scene.MouseX, this.Scene.MouseY, this.X, this.Y, 135, 30) && !zeitRadClicked) { if (Globals.PlayerSession.Controller.Button("MausLinks").Released) { zeitRadClicked = true; nächstesDatumLaden(); //anzeigeEvent(); } } } private class EventSorter : IComparer { //Sortier Comparer -> Sortiert alle Events nach Datum (muss immer aufgerfen werden wenn datum abgefragt wird) public int Compare(WeltEvent e1, WeltEvent e2) { if (e1.EventDate.CompareTo(e2.EventDate) == 0) { //Wenn beide Events gleich dann nach Spieler Sortieren switch (e1.BetroffenerSpielerName) { case "System": switch (e2.BetroffenerSpielerName) { case "System": return 0; default: return -1; } case "Spieler1": switch (e2.BetroffenerSpielerName) { case "System": return 1; case "Spieler1": return 0; default: return -1; } case "Spieler2": switch (e2.BetroffenerSpielerName) { case "System": return 1; case "Spieler1": return 1; case "Spieler2": return 0; default: return -1; } case "Spieler3": switch (e2.BetroffenerSpielerName) { case "Spieler3": return 0; case "Spieler4": return -1; default: return 1; } case "Spieler4": switch (e2.BetroffenerSpielerName) { case "Spieler4": return 0; default: return 1; } default: return 0; } } else return e1.EventDate.CompareTo(e2.EventDate); } } public void nächstesDatumLaden() { // Zuerst sortieren der Events Globals.EventListe.Sort(new EventSorter()); //Einfügelogik: // (Vorab) Überprüfen ob letztes Event jedes Spielers mehr als 20 for (int spielerIndex = 0; spielerIndex < Globals.SpielerListe.Count(); spielerIndex++) { DateTime vergleichsDatum = Globals.SpielerListe[spielerIndex].LetztesGeladenesDatum; //Für jeden Spieler überprüfen ob innerhalb von 20 Tagen ein Event für diesen ansteht -> Wenn Nein einen Spielerwechsel einfügen bool spielerHatEventIn20Tagen = false; foreach (WeltEvent WE in Globals.EventListe) { if (spielerHatEventIn20Tagen) { //Spieler hat Event innerhalb von 20 Tagen break; } if (WE.EventDate >= vergleichsDatum + (new TimeSpan(20, 0, 0, 0))) { //20 Tage überschritten ohne Event des Spielers Globals.EventListe.Add(new WeltEvent(vergleichsDatum + (new TimeSpan(20, 0, 0, 0)), "SPIELERWECHSEL", Globals.SpielerListe[spielerIndex])); Console.WriteLine("Spielerwechsel Event hinzugefügt für Spieler" + Globals.SpielerListe[spielerIndex].SPIELERINDEX + " für das Datum: " + (vergleichsDatum + (new TimeSpan(20, 0, 0, 0))).ToLongDateString()); Globals.EventListe.Sort(new EventSorter()); spielerHatEventIn20Tagen = true; break; } if (WE.BetroffenerSpielerName == "Spieler" + (spielerIndex + 1).ToString()) { spielerHatEventIn20Tagen = true; } } } bool ladevorgang = true; bool spielerWechsel = false; WeltEvent erstesTagesEvent = null; while (ladevorgang) { //TODO Eventverarbeitungslogik überprüfen // überprüfen ob wenn namen der spieler/Firmen gleich ob falsches laden passiert // Eventladelogik im Augebehalten und später gründlich testen // Verarbeitungsroutine: // 1. nächsten Event laden (Wenn 1. geladenes event dann details des Events speichern) WeltEvent tempEvent = Globals.EventListe[0]; // TestAusgabe Console.WriteLine("Event geladen: " + Globals.EventListe[0].EventHandlung + " Eventbetroffener: " + Globals.EventListe[0].BetroffenerSpieler + " Datum: " + Globals.EventListe[0].EventDate.ToLongDateString()); // 2. überprüfen ob bei geladenem event alle kriterien erfüllt sind oder ladevorgang abgebrochen werden muss // (System events verursachen keinen Stop des Ladevorgangs) if (erstesTagesEvent != null) { //Da system Events immer durch gelesen werden und erst bei Spieler Events Ladeabbrüche auftreten können (außer beim finalen STOP-Event) //wird das erste Tages event immer auf ein Spieler Event gesetzt if (erstesTagesEvent.BetroffenerSpielerName == "System") { erstesTagesEvent = tempEvent; } } else { erstesTagesEvent = tempEvent; } if (spielerWechsel) { //Wenn Spielerwechsel initiiert wurde muss überprüft werden ob nächstes Event noch der selbe Spieler und selber Tag ist // -> Wenn Nein = Abbruch und laden des aktuellen spielers if (tempEvent.BetroffenerSpieler != erstesTagesEvent.BetroffenerSpieler) { ladevorgang = false; Console.WriteLine("Lade-Abbruch: Spielerwechsel wegen Laden eines anderen Spielers vollzogen zu Spieler: " + erstesTagesEvent.BetroffenerSpieler); } if (tempEvent.EventDate != erstesTagesEvent.EventDate) { ladevorgang = false; Console.WriteLine("Lade-Abbruch: Spielerwechsel wegen Laden eines neuen Tages vollzogen zu Spieler: " + erstesTagesEvent.BetroffenerSpieler); } } // 3. Event verarbeiten und aus der liste entfernen wenn Ladevorgang nicht abgebrochen wird if (ladevorgang) { switch (tempEvent.EventHandlung) { case "START": #region START-EVENT //Startsetup wird gesetzt: // - Häfen laden ihre Initialbestände und setzen ihre RestockEvents // - StartEvents für alle Spieler werden erstellt // - BasisEvents aller historischen Ereignisse werden erstellt // - StartEvent einer Schiffsauktion (nur bei Mehrspieler wird gesetzt setzeHistorischeEvents(); spielStart(); aktiviereTestEvents(); #endregion break; case "ENDE": #region ENDE-Event //Wenn Ende Event-> Game Over Screen wird geladen (ladevorgang wird abgebrochen, Gameoverscreen wird geladen) //Hier Trigger für SzenenWechsel zu GameOverscreen veranlassen ende = true; ladevorgang = false; #endregion break; case "SPIELERWECHSEL": spielerWechsel = true; break; case "POLITIK": #region POLITIK-EVENT //Wenn politisches Event-> Zeitungsscreen wird geladen (ladevorgang wird abgebrochen, Zeitungsbildschirm geladen und nach rückkehr zu Worldmap wird nächstes datum erneut geladen) //Hier Trigger für SzenenWechsel zu Zeitungsscreen veranlassen //ladevorgang = false; -> wieder aktivieren wenn die bridge zwischen den screens erstellt ist!!! #endregion break; case "SCHIFFBAU-FERTIGSTELLUNG": #region SCHIFFBAU-FERTIGSTELLUNG //Schiffbau Abbgeschlossen Event -> Es entscheidet anhand der Parameter wie der Bau genau abgeschlossen wird //- Bezahlt/nicht bezahlt -> User behält Schiff oder Werft behält Schiff bool istBezahlt = false; if (tempEvent.StringParams != null && tempEvent.StringParams[0] == "BEZAHLT") { istBezahlt = true; } //betroffenes Schiff ermitteln (schiff muss jemandem gehören deshalb über bei spieler registrierten Schiffen) tempSchiff = null; //Alle Schiffe durchsuchen um betroffenes Schiff zu finden if (Globals.AlleSchiffe[tempEvent.BetroffenesSchiff.NAME] != null) { tempSchiff = Globals.AlleSchiffe[tempEvent.BetroffenesSchiff.NAME]; } //Schiff muss in fertigen Zustand versetzt werden if (tempSchiff != null) { tempSchiff.initiiereFertigstellung(); } else { //Fehler Console.WriteLine("Fehler Schiffbereitstellung ohne Zielschiff"); } if (istBezahlt) { spielerWechsel = true; Globals.EventAktion(new WeltEvent(tempEvent.EventDate, "SPIELERWECHSEL", tempSchiff.COMMANDEUR), "EINFÜGEN"); } else { //Wenn Schiff nich bezahlt wurde dann verliert Spieler das schiff foreach (Spieler sp in Globals.SpielerListe) { if (sp == tempSchiff.COMMANDEUR) { sp.schiffLoswerden(tempSchiff, true); tempSchiff.COMMANDEUR = null; break; } } } #endregion break; case "SCHIFFBAU-BEREITSTELLUNG": #region SCHIFFBAU-BEREITSTELLUNG //Wenn Schiff gekauft/abbezahlt wurde //Zuerst muss durchsucht werden ob in der Eventliste ein Schiffbau FertigstellungsDatum vorhanden ist //Wenn ja -> dieses Event ist eine Abbezahlung und Bau ist noch nicht fertig!! foreach (WeltEvent e in Globals.EventListe) { if (e.BetreffenderSchiffsName == tempEvent.BetreffenderSchiffsName && e.EventHandlung == "SCHIFFBAU-FERTIGSTELLUNG") { //Abbezahlen mit fortsetzung Bau //Kopieren der Eventdaten aus dem BereitstellungsEvent //und übernahme des alten Events if (e.StringParams == null) { e.StringParams = new List(); } e.StringParams.Add("BEZAHLT"); } } #endregion break; case "MANNSCHAFT_BEREITSTELLUNG": #region MANNSCHAFT-BEREITSTELLUNG if (Globals.AlleSchiffe[tempEvent.BetroffenesSchiff.NAME] != null) { tempSchiff = Globals.AlleSchiffe[tempEvent.BetroffenesSchiff.NAME]; } tempSchiff.besatzungEinstellen(tempEvent.StringParams[0]); Globals.EventAktion(new WeltEvent(tempEvent.EventDate, "SPIELERWECHSEL", tempSchiff.COMMANDEUR), "EINFÜGEN"); #endregion break; case "REISE-START": #region REISE-LOGIK #endregion break; case "REISE-ANKUNFT": #region REISE-LOGIK #endregion break; //case-Fälle für neue Eventlogik hier erweitern } //Wenn Verarbeitung abgeschlossen -> Event wird aus der Eventliste gelöscht und die Liste wird neu sortiert Globals.EventListe.RemoveAt(0); Globals.EventListe.Sort(new EventSorter()); } else { // Ladevorgang wurde abgebrochen -> Aktuell betroffener Spieler wird aktiviert foreach (Spieler tempSpieler in Globals.SpielerListe) { if ("Spieler" + tempSpieler.SPIELERINDEX == erstesTagesEvent.BetroffenerSpielerName) Globals.AktuellerSpieler = tempSpieler; } //Wenn Spieler gewechselt hat wird dessen letztes geladenes Datum aktualisiert (um zu gewährleisten, dass jeder Spieler höchstens 20 Tage kein Event hatte) Globals.AktuellerSpieler.spielerDatumAktualisieren(erstesTagesEvent.EventDate); Globals.AktuellerTag_E = erstesTagesEvent.EventDate.Day % 10; Globals.AktuellerTag_Z = erstesTagesEvent.EventDate.Day / 10; Globals.AktuellerMonat = erstesTagesEvent.EventDate.Month; Globals.AktuellesJahr_E = erstesTagesEvent.EventDate.Year % 10; Globals.AktuellesJahr_Z = erstesTagesEvent.EventDate.Year / 10 % 10; Globals.AktuellesJahr_H = erstesTagesEvent.EventDate.Year / 100 % 10; Globals.AktuellesJahr_T = erstesTagesEvent.EventDate.Year / 1000; Globals.AktuellesDatum = new DateTime(erstesTagesEvent.EventDate.Year, erstesTagesEvent.EventDate.Month, erstesTagesEvent.EventDate.Day); } } } private void setzeHistorischeEvents() { //Kriegseintritt GB FR -> Krimkrieg TempStringParamListe.Add("KRIMKRIEG_GB_FR"); Globals.EventAktion(new WeltEvent(new DateTime(1854, 4, 10), "POLITIK", null, null, null, null, 0, TempIntParamListe, TempStringParamListe), "EINFÜGEN"); TempStringParamListe.Clear(); } public void anzeigeEvent() { //Neu zeichnen des Zeitrades this.Graphics.Clear(); //neu Hinzufügen der Hintergründe AddGraphic(BG_Tag_Z); AddGraphic(BG_Tag_E); AddGraphic(BG_Monat); AddGraphic(BG_Jahr_T); AddGraphic(BG_Jahr_H); AddGraphic(BG_Jahr_Z); AddGraphic(BG_Jahr_E); //Einzelnen Zeitfelder Image TempImage = generiereZahlImage(Globals.AktuellerTag_Z); TempImage.X = 2; TempImage.Y = 4; TempImage.Alpha = 1f; AddGraphic(TempImage); //Tween(TempImage, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); TempImage = generiereZahlImage(Globals.AktuellerTag_E); TempImage.X = 20; TempImage.Y = 4; TempImage.Alpha = 1f; AddGraphic(TempImage); //Tween(TempImage, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); TempImage = generiereMonatImage(Globals.AktuellerMonat); TempImage.X = 38; TempImage.Y = 6; TempImage.Alpha = 1f; AddGraphic(TempImage); //Tween(TempImage, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); TempImage = generiereZahlImage(Globals.AktuellesJahr_T); TempImage.X = 66; TempImage.Y = 4; TempImage.Alpha = 1f; AddGraphic(TempImage); //Tween(TempImage, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); TempImage = generiereZahlImage(Globals.AktuellesJahr_H); TempImage.X = 84; TempImage.Y = 4; TempImage.Alpha = 1f; AddGraphic(TempImage); //Tween(TempImage, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); TempImage = generiereZahlImage(Globals.AktuellesJahr_Z); TempImage.X = 102; TempImage.Y = 4; TempImage.Alpha = 1f; AddGraphic(TempImage); //Tween(TempImage, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); TempImage = generiereZahlImage(Globals.AktuellesJahr_E); TempImage.X = 120; TempImage.Y = 4; TempImage.Alpha = 1f; AddGraphic(TempImage); //Tween(TempImage, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); } public void spielStart() { //ToDo: // Logik implementieren -> Routine welche für Stetige Nachschubevents bis zum Ende des Games sorgt // Hafeneinstellungen bei Spielstart //Amerika //Afrika //Europa Globals.AlleHäfen["LIVERPOOL"].NeuAuffüllenLager("JANUAR"); //Asien/Australien } private Image generiereZahlImage(int Vorlage) { switch (Vorlage) { case 0: return new Image(Assets.ZEITDISPLAY_0); case 1: return new Image(Assets.ZEITDISPLAY_1); case 2: return new Image(Assets.ZEITDISPLAY_2); case 3: return new Image(Assets.ZEITDISPLAY_3); case 4: return new Image(Assets.ZEITDISPLAY_4); case 5: return new Image(Assets.ZEITDISPLAY_5); case 6: return new Image(Assets.ZEITDISPLAY_6); case 7: return new Image(Assets.ZEITDISPLAY_7); case 8: return new Image(Assets.ZEITDISPLAY_8); case 9: return new Image(Assets.ZEITDISPLAY_9); default: return null; } } private Image generiereMonatImage(int Vorlage) { switch (Vorlage) { case 1: return new Image(Assets.ZEITDISPLAY_JAN); case 2: return new Image(Assets.ZEITDISPLAY_FEB); case 3: return new Image(Assets.ZEITDISPLAY_MAR); case 4: return new Image(Assets.ZEITDISPLAY_APR); case 5: return new Image(Assets.ZEITDISPLAY_MAY); case 6: return new Image(Assets.ZEITDISPLAY_JUN); case 7: return new Image(Assets.ZEITDISPLAY_JUL); case 8: return new Image(Assets.ZEITDISPLAY_AUG); case 9: return new Image(Assets.ZEITDISPLAY_SEP); case 10: return new Image(Assets.ZEITDISPLAY_OCT); case 11: return new Image(Assets.ZEITDISPLAY_NOV); case 12: return new Image(Assets.ZEITDISPLAY_DEZ); default: return null; } } public void setzeFadeOut() { Tween(FadeOutBlackScreen, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); AddGraphic(FadeOutBlackScreen); } private void aktiviereTestEvents() { //Test Events //Globals.einfügenEvent(new WeltEvent(new DateTime(1854, 1, 14), "SPIELERWECHSEL", Globals.SpielerListe[1])); //Globals.einfügenEvent(new WeltEvent(new DateTime(1854, 1, 07), "BAU-ABGESCHLOSSEN:SCHIFF", Globals.SpielerListe[0])); //Globals.einfügenEvent(new WeltEvent(new DateTime(1854, 1, 10), "SYSTEST1")); //Globals.einfügenEvent(new WeltEvent(new DateTime(1854, 1, 10), "SYSTEST2")); //Globals.einfügenEvent(new WeltEvent(new DateTime(1854, 1, 14), "SYSTEST3")); //Globals.einfügenEvent(new WeltEvent(new DateTime(1854, 1, 14), "SYSTEST3")); //Globals.einfügenEvent(new WeltEvent(new DateTime(1854, 1, 14), "BAU-ABGESCHLOSSEN:SCHIFF", Globals.SpielerListe[0])); //SchifftestEvents Schiff testSchiff; testSchiff = new Schiff("TESTSCHONER", "SCHONER", 2); testSchiff.fahreInHafenEin("LIVERPOOL"); Globals.AlleHäfen["LIVERPOOL"].schiffsAktivität("Einfahren", testSchiff); Globals.EventAktion(new WeltEvent(new DateTime(1854, 1, 1), "SCHIFFBAU-FERTIGSTELLUNG", null, null, testSchiff), "EINFÜGEN"); testSchiff = new Schiff("TESTBARK", "BARK", 2); testSchiff.fahreInHafenEin("LIVERPOOL"); Globals.AlleHäfen["LIVERPOOL"].schiffsAktivität("Einfahren", testSchiff); Globals.EventAktion(new WeltEvent(new DateTime(1854, 1, 1), "SCHIFFBAU-FERTIGSTELLUNG", Globals.AktuellerSpieler, null, testSchiff), "EINFÜGEN"); testSchiff = new Schiff("TESTHOLZDAMPF", "HOLZDAMPFSCHIFF", 2); testSchiff.fahreInHafenEin("LIVERPOOL"); Globals.AlleHäfen["LIVERPOOL"].schiffsAktivität("Einfahren", testSchiff); Globals.EventAktion(new WeltEvent(new DateTime(1854, 1, 1), "SCHIFFBAU-FERTIGSTELLUNG", null, null, testSchiff), "EINFÜGEN"); testSchiff = new Schiff("TESTEISENDAMPF", "EISENDAMPFSCHIFF", 2); testSchiff.fahreInHafenEin("LIVERPOOL"); Globals.AlleHäfen["LIVERPOOL"].schiffsAktivität("Einfahren", testSchiff); Globals.EventAktion(new WeltEvent(new DateTime(1854, 1, 1), "SCHIFFBAU-FERTIGSTELLUNG", Globals.AktuellerSpieler, null, testSchiff), "EINFÜGEN"); testSchiff = new Schiff("TESTBRIGG", "BRIGG", 2); testSchiff.fahreInHafenEin("LIVERPOOL"); Globals.AlleHäfen["LIVERPOOL"].schiffsAktivität("Einfahren", testSchiff); Globals.EventAktion(new WeltEvent(new DateTime(1854, 1, 1), "SCHIFFBAU-FERTIGSTELLUNG", null, null, testSchiff), "EINFÜGEN"); testSchiff = new Schiff("TESTFREGATTE", "FREGATTE", 2); testSchiff.fahreInHafenEin("LIVERPOOL"); Globals.AlleHäfen["LIVERPOOL"].schiffsAktivität("Einfahren", testSchiff); Globals.EventAktion(new WeltEvent(new DateTime(1854, 1, 1), "SCHIFFBAU-FERTIGSTELLUNG", null, null, testSchiff), "EINFÜGEN"); testSchiff = new Schiff("TESTKLIPPER", "KLIPPER", 2); testSchiff.fahreInHafenEin("LIVERPOOL"); Globals.AlleHäfen["LIVERPOOL"].schiffsAktivität("Einfahren", testSchiff); Globals.EventAktion(new WeltEvent(new DateTime(1854, 1, 1), "SCHIFFBAU-FERTIGSTELLUNG", null, null, testSchiff), "EINFÜGEN"); Globals.EventListe.Sort(new EventSorter()); } public bool wurdeZeiRadGeklicked() { // Abfragen des Clicked Status ( wenn diese Abfrage erfolgt wird der Wert immer direkt zurück gesetzt) bool TempCheckwert; TempCheckwert = zeitRadClicked; zeitRadClicked = false; return TempCheckwert; } public void zeigeNächstenEventTag() { WeltEvent tempEvent = Globals.EventListe[0]; DateTime aktuellerTag = tempEvent.EventDate; Console.WriteLine("Nächste Events:"); for (int aktuellerEventIndex = 0; ; aktuellerEventIndex++) { Console.WriteLine("Event:" + Globals.EventListe[aktuellerEventIndex].EventHandlung); if (Globals.EventListe[aktuellerEventIndex].EventDate != tempEvent.EventDate) { break; } } } public void zeigeNächstesEventVomTyp(string ZielHandlung) { foreach (WeltEvent WE in Globals.EventListe) { if (WE.EventHandlung == ZielHandlung) { Console.WriteLine("Nächstes Event vom Typ " + ZielHandlung + " ist:"); Console.WriteLine("Datum: " + WE.EventDate); Console.WriteLine("Betroffener Spieler: " + WE.BetroffenerSpielerName); Console.WriteLine("Betroffener Filiale: " + WE.BetreffenderFilialName); Console.WriteLine("Betroffenes Schiff: " + WE.BetreffenderSchiffsName); Console.WriteLine("Geldbetrag: " + WE.GeldBetrag); Console.WriteLine("Weitere Zahlenparameter: " + WE.ZahlenParams); Console.WriteLine("Weitere Stringparameter: " + WE.StringParams); return; } } Console.WriteLine("Keine Events vom Typ " + ZielHandlung + " gefunden!"); } } }