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.

1164 lines
59 KiB
C#

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<string> TempSprachText = new Queue<string>();
Queue<string> TempSprachParams = new Queue<string>();
Queue<string> TempQueue = new Queue<string>();
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<string> letzteÜbergebeneListe = new List<string>();
//Temporäre Liste der möglichen Geldquellen
public List<string> möglicheGeldQuellen = new List<string>();
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<Text> anzeigeTextListe = new List<Text>();
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<string>(), 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<string>(), 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<string>(), Globals.Remake.HalfWidth - 25, 150);
}
else
{
//TODO Filial erstellung weiterbauen
TextLieferant.wechsleAuswahlText("1.2", new Queue<string>());
}
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<string>(), 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<string>(), 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<string>(), 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<string>(), 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<string> TempList = new List<string>();
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<string>(), 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<string>(), 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<WeltEvent>
{
//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);
}
}
}
}