using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using _1869_Remake; using _1869_Remake.ToolKlassen; using _1869_Remake.Entities; using Otter; namespace _1869_Remake.Scenes { public class BarScene : Scene { TextBuilder TextLieferant; public Image BarScreen = new Image(Assets.BARSCREEN); public Image FadeInBlackScreen = new Image(Assets.BLACKSCREEN); public Image FadeOutBlackScreen = new Image(Assets.BLACKSCREEN); //AnzeigeTimer public const float TIMER_GRENZE = 90f; public float szenenTimer = 0f; public bool wahlFertig = true; public bool anzeigeFertig = false; //Standardzeit der Anheuerungsdauer (7 Tage) private TimeSpan StandardAnheuerzeit = new TimeSpan(7, 0, 0, 0); private int gewählterMannschaftsGrad = 0; //TempTextVariablen Queue TempSprachText = new Queue(); Queue TempSprachParams = new Queue(); Queue TempQueue = new Queue(); Schiff TempSchiff; //Runde Bier kostet $5 private int StandardKostenRunde = 500; //Letzte dem Textbuilder übergebene Liste an Paramtern (Wird nur für Shortcut funktionalität verwender) private List letzteÜbergebeneListe = new List(); //Temporäre Liste der möglichen Geldquellen public List möglicheGeldQuellen = new List(); public int geldQuellenIndex = 0; public int geldZielIndex = 1; public Filiale geldQuellenFiliale; public Filiale geldZielFiliale; public Schiff geldQuellenSchiff; public Schiff geldZielSchiff; int zielBetrag = 0; string zielNamen = ""; public Hafen aktuellerHafen; private Image aktuellerBG; private int MannschafsKosten = 0; public BarScene(string Preset) { //Initialisieren des Hauptbildschirms und einblenden Globals.aktuelleSzene = "Bar"; //Informationen zum aktuellen Hafen wird geladen, Alle Handlungen beeinflussen den globalen Zustand des Hafens aktuellerHafen = Globals.AlleHäfen[Preset]; //TestLogging Console.WriteLine("Aktueller Hafen ist " + aktuellerHafen.NAME); //TextBuilder einbinden (POS = Unterer RAND) TextLieferant = new TextBuilder(Globals.aktuelleSzene); Add(TextLieferant); überprüfeGeldquellen(); geldQuellenIndex = 0; //1. Zeile Quellen Name und Geldbetrag if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") { TempQueue.Enqueue("IM LAGER VERFÜGE ICH"); foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) { if (f.BESITZER == Globals.AktuellerSpieler) { geldQuellenFiliale = f; break; } } TempQueue.Enqueue((geldQuellenFiliale.BUDGET / 100).ToString()); TempQueue.Enqueue((geldQuellenFiliale.BUDGET % 100).ToString()); } else { TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); foreach (Schiff s in aktuellerHafen.angedockteSchiffe) { if (s.COMMANDEUR == Globals.AktuellerSpieler) { geldQuellenSchiff = s; break; } } TempQueue.Enqueue((geldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); TempQueue.Enqueue((geldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); } //Auswahltexte TextLieferant.erzeugeAuswahlText(TempQueue, 25, 410); //Vorbeireiten des Hintergrundes Büro und der NebenScreens //Büro BarScreen.CenterOrigin(); BarScreen.X = Globals.Remake.HalfWidth; BarScreen.Y = Globals.Remake.HalfHeight; BarScreen.Alpha = 1f; //bei Start der Szene wird der aktuelle BG weg gespeichert um diesen Später aus/einzublenden aktuellerBG = BarScreen; AddGraphic(aktuellerBG); //Vorbereiten des Blackscreens FadeInBlackScreen.CenterOrigin(); FadeInBlackScreen.X = Globals.Remake.HalfWidth; FadeInBlackScreen.Y = Globals.Remake.HalfHeight; FadeInBlackScreen.Alpha = 1f; FadeOutBlackScreen.CenterOrigin(); FadeOutBlackScreen.X = Globals.Remake.HalfWidth; FadeOutBlackScreen.Y = Globals.Remake.HalfHeight; FadeOutBlackScreen.Alpha = 0f; Tween(FadeInBlackScreen, new { Alpha = 0f }, 64f, 0f).Ease(Ease.BackInOut); AddGraphics(FadeInBlackScreen); AddGraphic(FadeOutBlackScreen); } public override void Update() { base.Update(); //hochzählendes Zeitelement um Aktionen in der Szene zu Takten szenenTimer++; if (FadeOutBlackScreen.Alpha >= 0.999f) { Globals.LetzteSzene = "Bar"; this.RemoveAll(); Globals.Remake.SwitchScene(new worldMap()); } //Bei Tick überprüfen, ob etwas im Textbuilder geklickt wurde (1 = Obere Auswahl, 2 = Mitlere Auswahl, 3 = Untere Auswahl, 4 = Oberer Pfeil, 5 = unterer Pfeil) //Zuerst überprüfen auf welcher Ebene wir uns aktuell befinden und danach was dort geklickt wurde int tempAuswahl = TextLieferant.checkAuswahl(); List anzeigeTextListe = new List(); switch (TextLieferant.aktuelleEbene) { // Textbaum - Root (Demo ready) case "1": #region RootLogik switch (tempAuswahl) { case 0: //Noch keine Auswahl getroffen break; // Hier muss für jede Auswahl immer alle Möglichen Baumstränge abgedeckt werden, wenn neuer Baumzweig hinzukommt muss hier seine Auswahl verwaltet werden case 1: //Auswahl Mannschaft suchen Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); letzteÜbergebeneListe.Clear(); TempQueue.Clear(); bool schiffMitBesatzung = false; //Überprüfung auf vorhandene Schiffe des Spielers (keine Mannschafswahl wenn keine Schiffe da sind) foreach (Schiff s in aktuellerHafen.angedockteSchiffe) { //Alle Schiffe des Spielers, die fertig sind zählen if (s.COMMANDEUR == Globals.AktuellerSpieler && !s.inBau) { if (s.MANNSCHAFT_VORHANDEN || s.MANNSCHAFT_UNTERWEGS) { schiffMitBesatzung = true; } else { TempQueue.Enqueue(s.NAME); letzteÜbergebeneListe.Add(s.NAME); } } } TempSprachText.Clear(); if (TempQueue.Count > 0) { if (TempQueue.Count == 1) { TextLieferant.setAuswahl(1); } else { TempSprachText.Enqueue("Bar_WelchesSchiff"); TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth - 25, 150); } TextLieferant.wechsleAuswahlText("1.1A", TempQueue, true); } else { if (schiffMitBesatzung) { TempSprachText.Enqueue("Bar_Mannschaftswahl_GenugLeute"); } else { TempSprachText.Enqueue("Bar_KeineSchiffe"); } TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth - 25, 150); } break; case 2: Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); //Auswahl Filiale bool filialeBereitsvorhanden = false; foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) { if (f.BESITZER == Globals.AktuellerSpieler) { filialeBereitsvorhanden = true; break; } } TempSprachText.Clear(); if (filialeBereitsvorhanden) { TempSprachText.Enqueue("Bar_FilialeVorhanden"); TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth - 25, 150); } else { //TODO Filial erstellung weiterbauen TextLieferant.wechsleAuswahlText("1.2", new Queue()); } break; case 3: Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); //Auswahl Verlassen //FadeOut zu WorldMap Tween(FadeOutBlackScreen, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); TextLieferant.setzeFadeOut(); break; case 4: //Auswahl Geldtransfer über Schiffe Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); letzteÜbergebeneListe.Clear(); TempSprachText.Clear(); //Sammeln der Geldquellen und möglichen Ziele (eine Liste) überprüfeGeldquellen(); if (möglicheGeldQuellen.Count() < 2) { TempSprachText.Enqueue("Bar_Keine2Schiffe"); TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth - 25, 150); } else { geldQuellenFiliale = null; geldQuellenSchiff = null; TempQueue.Clear(); geldQuellenIndex = 0; zielBetrag = 0; zielNamen = ""; //1. Zeile Quellen Name und Geldbetrag if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") { TempQueue.Enqueue("IM LAGER VERFÜGE ICH"); foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) { if (f.BESITZER == Globals.AktuellerSpieler) { geldQuellenFiliale = f; zielBetrag = geldQuellenFiliale.BUDGET; break; } } TempQueue.Enqueue((geldQuellenFiliale.BUDGET / 100).ToString()); TempQueue.Enqueue((geldQuellenFiliale.BUDGET % 100).ToString()); } else { TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); foreach (Schiff s in aktuellerHafen.angedockteSchiffe) { if (s.Name == möglicheGeldQuellen[geldQuellenIndex]) { geldQuellenSchiff = s; zielBetrag = geldQuellenSchiff.SCHIFFSBUDGET; break; } } TempQueue.Enqueue((geldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); TempQueue.Enqueue((geldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); } //2. Zeile Zielgeldquelle if (möglicheGeldQuellen[geldZielIndex] == "LAGER") { TempQueue.Enqueue("IM LAGER VERFÜGE ICH"); foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) { if (f.BESITZER == Globals.AktuellerSpieler) { geldZielFiliale = f; geldZielSchiff = null; zielNamen = "INS LAGER"; break; } } TempQueue.Enqueue("DAS LAGER"); } else { foreach (Schiff s in aktuellerHafen.angedockteSchiffe) { if (s.NAME == möglicheGeldQuellen[geldZielIndex]) { geldZielSchiff = s; geldZielFiliale = null; zielNamen = "AUF DIE " + geldZielSchiff.NAME; break; } } TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldZielIndex]); } //3. Zeile möglicher Betrag (max der Geldquelle) TempQueue.Enqueue((zielBetrag / 100).ToString()); TempQueue.Enqueue((zielBetrag % 100).ToString()); //4. Zeile Bestätigung + Zielnamen TempQueue.Enqueue(zielNamen); TextLieferant.wechsleAuswahlText("1.4", TempQueue, false); } break; case 5: //Auswahl HandelsHinweise Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); letzteÜbergebeneListe.Clear(); TempSprachText.Clear(); string Hinweis = ""; //Überprüfen der Geldquelle if (geldQuellenFiliale != null) { if (geldQuellenFiliale.BUDGET < 500) {//Wenn Geldquelle kein Geld hat dann speziellen Text ausgeben TempSprachText.Enqueue("Bar_Hinweis_KeineGeld1"); TempSprachText.Enqueue("Bar_Hinweis_KeineGeld2"); } else { //Abziehen des Geldes bei der Geldquelle geldQuellenFiliale.verringereBudget(500); überprüfeGeldquellen(); Hinweis = überprüfeHinweise(); if (Hinweis != "") { TempSprachText.Enqueue(Hinweis); } else { TempSprachText.Enqueue("Bar_Hinweis_KeineHinweise1"); TempSprachText.Enqueue("Bar_Hinweis_KeineHinweise2"); } } } else { if (geldQuellenSchiff.SCHIFFSBUDGET < 500) {//Wenn Geldquelle kein Geld hat dann speziellen Text ausgeben TempSprachText.Enqueue("Bar_Hinweis_KeineGeld1"); TempSprachText.Enqueue("Bar_Hinweis_KeineGeld2"); } else { //Abziehen des Geldes bei der Geldquelle geldQuellenSchiff.vermindernBudget(500); überprüfeGeldquellen(); if (Hinweis != "") { TempSprachText.Enqueue(Hinweis); } else { TempSprachText.Enqueue("Bar_Hinweis_KeineHinweise1"); TempSprachText.Enqueue("Bar_Hinweis_KeineHinweise2"); } } } TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth - 25, 150); break; case 6: Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); letzteÜbergebeneListe.Clear(); //Auswahl Wechseln Anzeige Geldstand(der angedockten Schiffe oder der Filiale wenn vorhanden) //Wechsle die Geldquelle geldQuellenIndex++; TempQueue.Clear(); if (geldQuellenIndex >= möglicheGeldQuellen.Count()) { geldQuellenIndex = 0; } // Paramter1: Quellort Geld // Parameter2: Geldmenge der Quelle if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") { TempQueue.Enqueue("IM LAGER VERFÜGE ICH"); foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) { if (f.BESITZER == Globals.AktuellerSpieler) { geldQuellenFiliale = f; geldQuellenSchiff = null; TempQueue.Enqueue((f.BUDGET / 100).ToString()); TempQueue.Enqueue((f.BUDGET % 100).ToString()); break; } } } else { TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); foreach (Schiff s in aktuellerHafen.angedockteSchiffe) { if (s.NAME == möglicheGeldQuellen[geldQuellenIndex]) { geldQuellenSchiff = s; geldZielFiliale = null; TempQueue.Enqueue((s.SCHIFFSBUDGET / 100).ToString()); TempQueue.Enqueue((s.SCHIFFSBUDGET % 100).ToString()); break; } } } TextLieferant.wechsleAuswahlText("1", TempQueue, false); break; } #endregion break; case "1.1A": #region Mannschaft Suchen - Welches Schiff? (Demoready) switch (tempAuswahl) { case 0: //Noch keine Auswahl getroffen break; case 999: // Abbruch Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); TempSprachText.Clear(); TempSprachText.Enqueue("Bar_Abbruch"); TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth - 25, 150); überprüfeGeldquellen(); geldQuellenIndex = 0; //1. Zeile Quellen Name und Geldbetrag if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") { TempQueue.Enqueue("IM LAGER VERFÜGE ICH"); foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) { if (f.BESITZER == Globals.AktuellerSpieler) { geldQuellenFiliale = f; break; } } TempQueue.Enqueue((geldQuellenFiliale.BUDGET / 100).ToString()); TempQueue.Enqueue((geldQuellenFiliale.BUDGET % 100).ToString()); } else { TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); foreach (Schiff s in aktuellerHafen.angedockteSchiffe) { if (s.COMMANDEUR == Globals.AktuellerSpieler) { geldQuellenSchiff = s; break; } } TempQueue.Enqueue((geldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); TempQueue.Enqueue((geldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); } TextLieferant.wechsleAuswahlText("1", TempQueue, false); break; default: // Jeweilige Auswahl ist die Bootsauswahl Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); TempSchiff = null; foreach (Schiff s in aktuellerHafen.angedockteSchiffe) { if (s.NAME == letzteÜbergebeneListe[tempAuswahl - 1]) { TempSchiff = s; break; } } gewählterMannschaftsGrad = 0; TempSprachText.Clear(); TempSprachParams.Clear(); TempSprachText.Enqueue("Bar_GutesSchiff"); TempSprachParams.Enqueue(TempSchiff.NAME); TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth - 25, 150); //Beschreibungstexte TempQueue.Clear(); string TempMaxMann = TempSchiff.MANNSCHAFT_MAXGRÖßE.ToString(); //Text 1 TempQueue.Enqueue(TempMaxMann); TempQueue.Enqueue(TempSchiff.NAME); //Text 2 TempQueue.Enqueue(TempMaxMann); //Text 3 TempQueue.Enqueue(TempMaxMann); //Text 4 TempQueue.Enqueue(TempMaxMann); //Text 5 TempQueue.Enqueue(TempSchiff.NAME); TempQueue.Enqueue(TempMaxMann); //Text 6 TempQueue.Enqueue(TempMaxMann); //Text 7 TempQueue.Enqueue(TempMaxMann); TempQueue.Enqueue(TempSchiff.NAME); //Text 8 TempQueue.Enqueue(TempMaxMann); //Text 9 TempQueue.Enqueue(TempMaxMann); //Text 10 TempQueue.Enqueue(TempMaxMann); TextLieferant.wechsleAuswahlText("1.1B", TempQueue, false); break; } #endregion break; case "1.1B": #region Mannschaftswahl (Demoready) switch (tempAuswahl) { case 0: //Noch keine Auswahl getroffen break; // Hier muss für jede Auswahl immer alle Möglichen Baumstränge abgedeckt werden, wenn neuer Baumzweig hinzukommt muss hier seine Auswahl verwaltet werden case 1: //Abbruch Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); TempSprachText.Clear(); TempSprachText.Enqueue("Bar_Abbruch"); TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth - 25, 150); überprüfeGeldquellen(); geldQuellenIndex = 0; //1. Zeile Quellen Name und Geldbetrag if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") { TempQueue.Enqueue("IM LAGER VERFÜGE ICH"); foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) { if (f.BESITZER == Globals.AktuellerSpieler) { geldQuellenFiliale = f; break; } } TempQueue.Enqueue((geldQuellenFiliale.BUDGET / 100).ToString()); TempQueue.Enqueue((geldQuellenFiliale.BUDGET % 100).ToString()); } else { TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); foreach (Schiff s in aktuellerHafen.angedockteSchiffe) { if (s.COMMANDEUR == Globals.AktuellerSpieler) { geldQuellenSchiff = s; break; } } TempQueue.Enqueue((geldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); TempQueue.Enqueue((geldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); } TextLieferant.wechsleAuswahlText("1", TempQueue, false); break; case 2: Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); //Bestätigung //Erzeugen des Bemannungs-Events DateTime TempDatum = Globals.AktuellesDatum + StandardAnheuerzeit; List TempList = new List(); bool GradGewählt = true; switch (gewählterMannschaftsGrad) { case 0: GradGewählt = false; break; case 1: TempList.Add("SPITZE"); break; case 2: TempList.Add("ERFAHREN"); break; case 3: TempList.Add("TÜCHTIG"); break; case 4: TempList.Add("ZUVERLÄSSIG"); break; case 5: TempList.Add("STANDARD"); break; case 6: TempList.Add("FÄHIG"); break; case 7: TempList.Add("BRAUCHBAR"); break; case 8: TempList.Add("BILLIG"); break; case 9: TempList.Add("GRÜNSCHNABEL"); break; case 10: TempList.Add("IDIOTEN"); break; } TempSprachText.Clear(); TempSprachParams.Clear(); if (GradGewählt) { Globals.EventAktion(new WeltEvent(TempDatum, "MANNSCHAFT_BEREITSTELLUNG", null, null, TempSchiff, aktuellerHafen, 0, null, TempList), "EINFÜGEN"); TempSchiff.besatzungBereitstellen(); TempSprachText.Enqueue("Bar_Mannschaftswahl_Anheuern"); //1. Sprachparam => Anzahl Tage bis Anheuerung Komplett TempSprachParams.Enqueue(StandardAnheuerzeit.Days.ToString()); //2. Param => Name des Schiffs TempSprachParams.Enqueue(TempSchiff.NAME); TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth - 25, 150); überprüfeGeldquellen(); geldQuellenIndex = 0; //1. Zeile Quellen Name und Geldbetrag if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") { TempQueue.Enqueue("IM LAGER VERFÜGE ICH"); foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) { if (f.BESITZER == Globals.AktuellerSpieler) { geldQuellenFiliale = f; break; } } TempQueue.Enqueue((geldQuellenFiliale.BUDGET / 100).ToString()); TempQueue.Enqueue((geldQuellenFiliale.BUDGET % 100).ToString()); } else { TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); foreach (Schiff s in aktuellerHafen.angedockteSchiffe) { if (s.COMMANDEUR == Globals.AktuellerSpieler) { geldQuellenSchiff = s; break; } } TempQueue.Enqueue((geldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); TempQueue.Enqueue((geldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); } TextLieferant.wechsleAuswahlText("1", TempQueue, false); } else { TempSprachText.Enqueue("Bar_Mannschaftswahl_WelcheLeute"); TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth - 25, 150); } break; default: Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); //Wahl der Mannschaftserfahrung //Je nach Auswahl andere spezifische Details setzen -> restliche Aktionen für alle gleich int tempIndex = tempAuswahl - 3; gewählterMannschaftsGrad = tempAuswahl - 2; MannschafsKosten = (Globals.MannschaftskostenMin + Globals.ErfahrungsFaktor[tempIndex]) * TempSchiff.MANNSCHAFT_MAXGRÖßE; TempSprachText.Clear(); TempSprachParams.Clear(); TempSprachText.Enqueue("Bar_Mannschaftswahl_Preis"); //SprachParams: //1. Anzahl BesatzungsMaxGröße //2.&3. Preis pro Monat TempSprachParams.Enqueue(TempSchiff.MANNSCHAFT_MAXGRÖßE.ToString()); TempSprachParams.Enqueue((MannschafsKosten / 100).ToString()); TempSprachParams.Enqueue((MannschafsKosten % 100).ToString()); TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth - 25, 150); break; } #endregion break; case "1.2": #region Filialerstellung Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); //Filiale erstellen #endregion break; case "1.4": #region Geldtransfer //Geldtransfer Menü switch (tempAuswahl) { case 0: //Noch keine Auswahl getroffen break; // Hier muss für jede Auswahl immer alle Möglichen Baumstränge abgedeckt werden, wenn neuer Baumzweig hinzukommt muss hier seine Auswahl verwaltet werden case 1: //Geldquelle ändern Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); geldQuellenIndex++; TempQueue.Clear(); if (geldQuellenIndex >= möglicheGeldQuellen.Count()) { geldQuellenIndex = 0; } // Paramter1: Quellort Geld // Parameter2: Geldmenge der Quelle if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") { TempQueue.Enqueue("IM LAGER VERFÜGE ICH"); foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) { if (f.BESITZER == Globals.AktuellerSpieler) { TempQueue.Enqueue((f.BUDGET / 100).ToString()); TempQueue.Enqueue((f.BUDGET % 100).ToString()); zielBetrag = f.BUDGET; break; } } } else { TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); foreach (Schiff s in aktuellerHafen.angedockteSchiffe) { if (s.NAME == möglicheGeldQuellen[geldQuellenIndex]) { TempQueue.Enqueue((s.SCHIFFSBUDGET / 100).ToString()); TempQueue.Enqueue((s.SCHIFFSBUDGET % 100).ToString()); zielBetrag = s.SCHIFFSBUDGET; break; } } } //Restlichen Params ebenfalls neu zeichnen if (geldZielFiliale != null) { TempQueue.Enqueue("DAS LAGER"); zielNamen = "INS LAGER"; } else { TempQueue.Enqueue("DIE " + geldZielSchiff.NAME); zielNamen = "AUF DIE " + geldZielSchiff.NAME; } //Zielbetrag TempQueue.Enqueue((zielBetrag / 100).ToString()); TempQueue.Enqueue((zielBetrag % 100).ToString()); //Zielnamen TempQueue.Enqueue(zielNamen); // TextLieferant.wechsleAuswahlText("1.4", TempQueue, false); break; case 2: //Zielkasse ändern Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); geldZielIndex++; if(geldZielIndex >= möglicheGeldQuellen.Count()) { geldZielIndex = 0; } geldQuellenFiliale = null; geldQuellenSchiff = null; TempQueue.Clear(); //1. Zeile Quellen Name und Geldbetrag if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") { TempQueue.Enqueue("IM LAGER VERFÜGE ICH"); foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) { if (f.BESITZER == Globals.AktuellerSpieler) { geldQuellenFiliale = f; break; } } TempQueue.Enqueue((geldQuellenFiliale.BUDGET / 100).ToString()); TempQueue.Enqueue((geldQuellenFiliale.BUDGET % 100).ToString()); } else { TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); foreach (Schiff s in aktuellerHafen.angedockteSchiffe) { if (s.Name == möglicheGeldQuellen[geldQuellenIndex]) { geldQuellenSchiff = s; break; } } TempQueue.Enqueue((geldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); TempQueue.Enqueue((geldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); } //2. Zeile Zielgeldquelle if (möglicheGeldQuellen[geldZielIndex] == "LAGER") { foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) { if (f.BESITZER == Globals.AktuellerSpieler) { geldZielFiliale = f; geldZielSchiff = null; zielNamen = "INS LAGER"; break; } } TempQueue.Enqueue("DAS LAGER"); } else { foreach (Schiff s in aktuellerHafen.angedockteSchiffe) { if (s.NAME == möglicheGeldQuellen[geldZielIndex]) { geldZielSchiff = s; geldZielFiliale = null; zielNamen = "AUF DIE " + geldZielSchiff.NAME; break; } } TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldZielIndex]); } //3. Zeile möglicher Betrag (max der Geldquelle) TempQueue.Enqueue((zielBetrag / 100).ToString()); TempQueue.Enqueue((zielBetrag % 100).ToString()); //4. Zeile Bestätigung + Zielnamen TempQueue.Enqueue(zielNamen); TextLieferant.wechsleAuswahlText("1.4", TempQueue, false); break; case 3: //Zielbetrag ändern Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); //Bei linksklick erhöhen, bei rechts klick vermindern if (TextLieferant.checkButtonAuswahl() == "MausLinks") { //Bei Linksklick erhöhen um $100 zielBetrag += 10000; int TempMax; if(geldZielFiliale != null) { if (zielBetrag > geldQuellenFiliale.BUDGET) TempMax = geldQuellenFiliale.BUDGET; } else { if (zielBetrag > geldQuellenSchiff.SCHIFFSBUDGET) TempMax = geldQuellenSchiff.SCHIFFSBUDGET; } } else { //bei rechtsklick vermindern um $100 zielBetrag -= 10000; //Min kriterium if (zielBetrag < 0) { zielBetrag = 0; } } TempQueue.Clear(); //1. Zeile Quellen Name und Geldbetrag if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") { TempQueue.Enqueue("IM LAGER VERFÜGE ICH"); foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) { if (f.BESITZER == Globals.AktuellerSpieler) { geldQuellenFiliale = f; break; } } TempQueue.Enqueue((geldQuellenFiliale.BUDGET / 100).ToString()); TempQueue.Enqueue((geldQuellenFiliale.BUDGET % 100).ToString()); } else { TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); foreach (Schiff s in aktuellerHafen.angedockteSchiffe) { if (s.Name == möglicheGeldQuellen[geldQuellenIndex]) { geldQuellenSchiff = s; break; } } TempQueue.Enqueue((geldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); TempQueue.Enqueue((geldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); } //2. Zeile Zielgeldquelle if (möglicheGeldQuellen[geldZielIndex] == "LAGER") { foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) { if (f.BESITZER == Globals.AktuellerSpieler) { geldZielFiliale = f; geldZielSchiff = null; zielNamen = "INS LAGER"; break; } } TempQueue.Enqueue("DAS LAGER"); } else { foreach (Schiff s in aktuellerHafen.angedockteSchiffe) { if (s.NAME == möglicheGeldQuellen[geldZielIndex]) { geldZielSchiff = s; geldZielFiliale = null; zielNamen = "AUF DIE " + geldZielSchiff.NAME; break; } } TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldZielIndex]); } //3. Zeile möglicher Betrag (max der Geldquelle) TempQueue.Enqueue((zielBetrag / 100).ToString()); TempQueue.Enqueue((zielBetrag % 100).ToString()); //4. Zeile Bestätigung + Zielnamen TempQueue.Enqueue(zielNamen); TextLieferant.wechsleAuswahlText("1.4", TempQueue, false); break; case 4: //Bestätigung Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); break; case 5: //Abbruch Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); TempSprachText.Clear(); TempSprachText.Enqueue("Bar_Abbruch"); TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth - 25, 150); überprüfeGeldquellen(); geldQuellenIndex = 0; //1. Zeile Quellen Name und Geldbetrag if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") { TempQueue.Enqueue("IM LAGER VERFÜGE ICH"); foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) { if (f.BESITZER == Globals.AktuellerSpieler) { geldQuellenFiliale = f; break; } } TempQueue.Enqueue((geldQuellenFiliale.BUDGET / 100).ToString()); TempQueue.Enqueue((geldQuellenFiliale.BUDGET % 100).ToString()); } else { TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); foreach (Schiff s in aktuellerHafen.angedockteSchiffe) { if (s.COMMANDEUR == Globals.AktuellerSpieler) { geldQuellenSchiff = s; break; } } TempQueue.Enqueue((geldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); TempQueue.Enqueue((geldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); } TextLieferant.wechsleAuswahlText("1", TempQueue, false); break; } #endregion break; } } private string überprüfeHinweise() { string TempString = ""; switch (aktuellerHafen.NAME) { //Hier pflegen welche Häfen Hinweise Vergeben und wie diese lauten (sowie Rückgabe des Strings dazu) case "LIVERPOOL": break; } if (TempString == "") { return ""; } else { return TempString; } } private void überprüfeGeldquellen() { //Liste möglicher Geldquellen (Für einige Auswahlbäume notwendig) // MöglicheGeldQuelle wird im Verkaufsstrang als ZielKasse benutzt möglicheGeldQuellen.Clear(); geldQuellenIndex = 0; aktuellerHafen.überprüfeAktuelleFilialeVorhanden(Globals.AktuellerSpieler); if (aktuellerHafen.filialeVorhanden) { foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) { if (f.BESITZER == Globals.AktuellerSpieler) { möglicheGeldQuellen.Add("LAGER"); } } } //Wenn Schiffe vorhanden -> Schiff ist mögliche Quelle foreach (Schiff Boot in aktuellerHafen.angedockteSchiffe) { if (Boot.COMMANDEUR == Globals.AktuellerSpieler) { //Mögliche Geldziele sind alle Schiffe des Spielers möglicheGeldQuellen.Add(Boot.NAME); } } } 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); } } } }