diff --git a/1869_Remake.sln b/1869_Remake.sln new file mode 100644 index 0000000..673abc3 --- /dev/null +++ b/1869_Remake.sln @@ -0,0 +1,46 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "1869_Remake", "1869_Remake\1869_Remake.csproj", "{7FBB14B6-14B4-43DE-AA70-844B2A9E1FF4}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Otter", "..\..\OtterBasicData\Otter\Otter.csproj", "{236485C2-A7BA-4DCD-808A-B3A634764402}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x86 = Debug|x86 + NuGet|Any CPU = NuGet|Any CPU + NuGet|x86 = NuGet|x86 + Release|Any CPU = Release|Any CPU + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7FBB14B6-14B4-43DE-AA70-844B2A9E1FF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7FBB14B6-14B4-43DE-AA70-844B2A9E1FF4}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7FBB14B6-14B4-43DE-AA70-844B2A9E1FF4}.Debug|x86.ActiveCfg = Debug|Any CPU + {7FBB14B6-14B4-43DE-AA70-844B2A9E1FF4}.Debug|x86.Build.0 = Debug|Any CPU + {7FBB14B6-14B4-43DE-AA70-844B2A9E1FF4}.NuGet|Any CPU.ActiveCfg = Release|Any CPU + {7FBB14B6-14B4-43DE-AA70-844B2A9E1FF4}.NuGet|Any CPU.Build.0 = Release|Any CPU + {7FBB14B6-14B4-43DE-AA70-844B2A9E1FF4}.NuGet|x86.ActiveCfg = Release|Any CPU + {7FBB14B6-14B4-43DE-AA70-844B2A9E1FF4}.NuGet|x86.Build.0 = Release|Any CPU + {7FBB14B6-14B4-43DE-AA70-844B2A9E1FF4}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7FBB14B6-14B4-43DE-AA70-844B2A9E1FF4}.Release|Any CPU.Build.0 = Release|Any CPU + {7FBB14B6-14B4-43DE-AA70-844B2A9E1FF4}.Release|x86.ActiveCfg = Release|Any CPU + {7FBB14B6-14B4-43DE-AA70-844B2A9E1FF4}.Release|x86.Build.0 = Release|Any CPU + {236485C2-A7BA-4DCD-808A-B3A634764402}.Debug|Any CPU.ActiveCfg = Debug|x86 + {236485C2-A7BA-4DCD-808A-B3A634764402}.Debug|x86.ActiveCfg = Debug|x86 + {236485C2-A7BA-4DCD-808A-B3A634764402}.Debug|x86.Build.0 = Debug|x86 + {236485C2-A7BA-4DCD-808A-B3A634764402}.NuGet|Any CPU.ActiveCfg = NuGet|x86 + {236485C2-A7BA-4DCD-808A-B3A634764402}.NuGet|x86.ActiveCfg = NuGet|x86 + {236485C2-A7BA-4DCD-808A-B3A634764402}.NuGet|x86.Build.0 = NuGet|x86 + {236485C2-A7BA-4DCD-808A-B3A634764402}.Release|Any CPU.ActiveCfg = Release|x86 + {236485C2-A7BA-4DCD-808A-B3A634764402}.Release|Any CPU.Build.0 = Release|x86 + {236485C2-A7BA-4DCD-808A-B3A634764402}.Release|x86.ActiveCfg = Release|x86 + {236485C2-A7BA-4DCD-808A-B3A634764402}.Release|x86.Build.0 = Release|x86 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/1869_Remake/1869_Remake.csproj b/1869_Remake/1869_Remake.csproj new file mode 100644 index 0000000..b8e0f1d --- /dev/null +++ b/1869_Remake/1869_Remake.csproj @@ -0,0 +1,367 @@ + + + + + Debug + AnyCPU + {7FBB14B6-14B4-43DE-AA70-844B2A9E1FF4} + Exe + Properties + _1869_Remake + 1869_Remake + v4.5.2 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + {236485c2-a7ba-4dcd-808a-b3a634764402} + Otter + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + \ No newline at end of file diff --git a/1869_Remake/App.config b/1869_Remake/App.config new file mode 100644 index 0000000..d740e88 --- /dev/null +++ b/1869_Remake/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/1869_Remake/Assets.cs b/1869_Remake/Assets.cs new file mode 100644 index 0000000..974600b --- /dev/null +++ b/1869_Remake/Assets.cs @@ -0,0 +1,119 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Otter; + +namespace _1869_Remake +{ + public class Assets + { + //Ansammlung aller Asset-Locations + //Bilder + public const string TITLE_IMG = "../../Assets/Graphics/TitleScreen.png"; + public const string INTRO_IMG_Company = "../../Assets/Graphics/Max Design Introscreen.png"; + public const string INTRO_IMG_ART = "../../Assets/Graphics/Introscreen_Artwork.png"; + public const string INTRO_IMG_MUSIK = "../../Assets/Graphics/Introscreen_Musik.png"; + public const string INTRO_IMG_PROGRAMMING = "../../Assets/Graphics/Introscreen_Programmers.png"; + public const string BLACKSCREEN = "../../Assets/Graphics/Blackscreen.png"; + public const string CONFIGSCREEN = "../../Assets/Graphics/Configscreen.png"; + public const string HOFSCREEN = "../../Assets/Graphics/HallOfFameScreen.png"; + public const string MAINSCREEN_FRAME = "../../Assets/Graphics/MainScreen_Frame.png"; + public const string BANKSCREEN = "../../Assets/Graphics/BankScreen_Basis.png"; + public const string BANKSCREEN_AUGEN = "../../Assets/Graphics/BankScreen_Basis_2_Augen.png"; + public const string STATISTIKSCREEN = "../../Assets/Graphics/StatistikenScreen_Basis.png"; + public const string OPTIONSCREEN = "../../Assets/Graphics/OptionenScreen_Basis.png"; + public const string WELT_EUROPA = "../../Assets/Graphics/worldmap_europa.png"; + public const string HANDELSCREEN = "../../Assets/Graphics/Handel_LIVERPOOL_BG.png"; + public const string MAINSCREEN_INFO_SCHABLONE = "../../Assets/Graphics/InfoScreen_Liverpool_Beispiel.png"; + public const string BARSCREEN = "../../Assets/Graphics/BarScreen_BG.png"; + public const string SPRITESHEET_MEER = "../../Assets/Anims/SeeAnimBG_full_640x480.png"; + public const string SCHIFFSCONTROLLER = "../../Assets/Graphics/SchiffControllerIcon_Basis.png"; + + + //ZeitradBilder + public const string BG_ZEITDISPLAY = "../../Assets/Graphics/BG_Zeitdisplay.png"; + public const string BG_ZEIT_MONAT = "../../Assets/Graphics/BG_ZeitDisplay_Monat.png"; + public const string ZEITDISPLAY_0 = "../../Assets/Graphics/Zahl_0.png"; + public const string ZEITDISPLAY_1 = "../../Assets/Graphics/Zahl_1.png"; + public const string ZEITDISPLAY_2 = "../../Assets/Graphics/Zahl_2.png"; + public const string ZEITDISPLAY_3 = "../../Assets/Graphics/Zahl_3.png"; + public const string ZEITDISPLAY_4 = "../../Assets/Graphics/Zahl_4.png"; + public const string ZEITDISPLAY_5 = "../../Assets/Graphics/Zahl_5.png"; + public const string ZEITDISPLAY_6 = "../../Assets/Graphics/Zahl_6.png"; + public const string ZEITDISPLAY_7 = "../../Assets/Graphics/Zahl_7.png"; + public const string ZEITDISPLAY_8 = "../../Assets/Graphics/Zahl_8.png"; + public const string ZEITDISPLAY_9 = "../../Assets/Graphics/Zahl_9.png"; + public const string ZEITDISPLAY_JAN = "../../Assets/Graphics/Monat_Jan.png"; + public const string ZEITDISPLAY_FEB = "../../Assets/Graphics/Monat_Feb.png"; + public const string ZEITDISPLAY_MAR = "../../Assets/Graphics/Monat_Mar.png"; + public const string ZEITDISPLAY_APR = "../../Assets/Graphics/Monat_Apr.png"; + public const string ZEITDISPLAY_MAY = "../../Assets/Graphics/Monat_May.png"; + public const string ZEITDISPLAY_JUN = "../../Assets/Graphics/Monat_Jun.png"; + public const string ZEITDISPLAY_JUL = "../../Assets/Graphics/Monat_Jul.png"; + public const string ZEITDISPLAY_AUG = "../../Assets/Graphics/Monat_Aug.png"; + public const string ZEITDISPLAY_SEP = "../../Assets/Graphics/Monat_Sep.png"; + public const string ZEITDISPLAY_OCT = "../../Assets/Graphics/Monat_Oct.png"; + public const string ZEITDISPLAY_NOV = "../../Assets/Graphics/Monat_Nov.png"; + public const string ZEITDISPLAY_DEZ = "../../Assets/Graphics/Monat_Dez.png"; + + //Handelsbildschirm Sprites + public const string HANDEL_RAUM_HOLZ = "../../Assets/Graphics/Holzraum_Basis.png"; + public const string HANDEL_GESICHT_1 = "../../Assets/Graphics/Gesicht_1.png"; + public const string HANDEL_OKÖRPER_1 = "../../Assets/Graphics/OberKörper_1_Weste.png"; + public const string HANDEL_ARME_1 = "../../Assets/Graphics/Arme_1.png"; + public const string HANDEL_DEKOTÜR_LINKS_1 = "../../Assets/Graphics/Deko_Tür_Links_1_Ofen.png"; + public const string HANDEL_TÜR_1 = "../../Assets/Graphics/Fenster-Tür_1.png"; + public const string HANDEL_TAFEL_HINTERGRUND_HOLZ = "../../Assets/Graphics/Tafel_BG_Holz.png"; + public const string HANDEL_TAFEL_BASIC = "../../Assets/Graphics/Tafel_basic.png"; + public const string HANDEL_TAFEL_VORDERGRUND_1 = "../../Assets/Graphics/Tafel_Vordergrund_1_FassSchwamm.png"; + public const string HANDEL_TISCH_1 = "../../Assets/Graphics/Tisch_1.png"; + public const string HANDEL_TISCH_2 = "../../Assets/Graphics/Tisch_2_Holz_Basic.png"; + + //Werftbildschirm Sprites + public const string WERFTBÜROSCREEN = "../../Assets/Graphics/Werft_Main_BG.png"; + public const string WERFTREPERATURSCREEN = "../../Assets/Graphics/Werft_Reparatur_BG.png"; + public const string WERFTSCHIFFSAUSWAHLSCREEN = "../../Assets/Graphics/Werft_SchiffstypAuswahl_BG.png"; + public const string WERFT_SCHIFF_SCHONER = "../../Assets/Graphics/Schoner.png"; + public const string WERFT_SCHIFF_BARK = "../../Assets/Graphics/Bark.png"; + public const string WERFT_SCHIFF_FREGATTE = "../../Assets/Graphics/Fregatte.png"; + public const string WERFT_SCHIFF_BRIGG = "../../Assets/Graphics/Brigg.png"; + public const string WERFT_SCHIFF_HOLZDAMPFSCHIFF = "../../Assets/Graphics/Holzdampfschiff.png"; + public const string WERFT_SCHIFF_EISENDAMPFSCHIFF = "../../Assets/Graphics/Eisendampfschiff.png"; + public const string WERFT_SCHIFF_KLIPPER = "../../Assets/Graphics/Klipper.png"; + public const string WERFT_SCHIFF_BAU_NAME = "../../Assets/Graphics/Werft_Bau_Schiffsnamen.png"; + + //Icons + public const string PFEILHOCH = "../../Assets/Graphics/Pfeil_hoch.png"; + public const string PFEILRUNTER = "../../Assets/Graphics/Pfeil_runter.png"; + public const string PFEILHOCHMARKIERT = "../../Assets/Graphics/Pfeil_hoch_rot.png"; + public const string PFEILRUNTERMARKIERT = "../../Assets/Graphics/Pfeil_runter_rot.png"; + public const string ICON_COIN = "../Assets/Graphics/MainScreen_MünzeIcon_1.png"; + public const string ICON_COIN_CLICKED = "../Assets/Graphics/MainScreen_MünzeIcon_2.png"; + public const string ICON_ANKER = "../Assets/Graphics/MainScreen_AnkerIcon_1.png"; + public const string ICON_ANKER_CLICKED = "../Assets/Graphics/MainScreen_AnkerIcon_2.png"; + public const string ICON_BUCH = "../Assets/Graphics/MainScreen_BuchIcon_1.png"; + public const string ICON_BUCH_CLICKED = "../Assets/Graphics/MainScreen_BuchIcon_2.png"; + public const string ICON_GELDSACK = "../Assets/Graphics/MainScreen_GeldSackIcon_1.png"; + public const string ICON_GELDSACK_CLICKED = "../Assets/Graphics/MainScreen_GeldSackIcon_2.png"; + public const string ICON_MEERESKNOTEN = "../Assets/Graphics/MeeresKnoten.png"; + public const string ICON_AUSWAHL = "../Assets/Graphics/AuswahlKnoten.png"; + + + //HafenIcons + public const string HAFENINFO = "../../Assets/Graphics/HafenIcon_Info.png"; + public const string HAFENBAR = "../../Assets/Graphics/HafenIcon_Pub.png"; + public const string HAFENWERFT = "../../Assets/Graphics/HafenIcon_Werft.png"; + public const string HAFENFILIALE = "../../Assets/Graphics/HafenIcon_Filiale.png"; + public const string HAFENFAHNE = "../../Assets/Graphics/Fahne.png"; + public const string HAFENSCHIFF = "../../Assets/Graphics/Schiffchen.png"; + + //Fonts + public const string FONT_AMIGA4EVER2 = "../../Assets/Fonts/amiga_forever_pro2_regular.ttf"; + + //Musik + public const string MUSIC_TITLE = "../../Assets/Music/Title.ogg"; + + } +} diff --git a/1869_Remake/Assets/Anims/SeeAnimBG_full_640x480.png b/1869_Remake/Assets/Anims/SeeAnimBG_full_640x480.png new file mode 100644 index 0000000..3787311 Binary files /dev/null and b/1869_Remake/Assets/Anims/SeeAnimBG_full_640x480.png differ diff --git a/1869_Remake/Assets/Fonts/amiga4ever.ttf b/1869_Remake/Assets/Fonts/amiga4ever.ttf new file mode 100644 index 0000000..ada736f Binary files /dev/null and b/1869_Remake/Assets/Fonts/amiga4ever.ttf differ diff --git a/1869_Remake/Assets/Fonts/amiga_forever_pro2_regular.ttf b/1869_Remake/Assets/Fonts/amiga_forever_pro2_regular.ttf new file mode 100644 index 0000000..6a9b293 Binary files /dev/null and b/1869_Remake/Assets/Fonts/amiga_forever_pro2_regular.ttf differ diff --git a/1869_Remake/Assets/Graphics/Arme_1.png b/1869_Remake/Assets/Graphics/Arme_1.png new file mode 100644 index 0000000..0fe6cb0 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Arme_1.png differ diff --git a/1869_Remake/Assets/Graphics/AuswahlKnoten.png b/1869_Remake/Assets/Graphics/AuswahlKnoten.png new file mode 100644 index 0000000..19093f4 Binary files /dev/null and b/1869_Remake/Assets/Graphics/AuswahlKnoten.png differ diff --git a/1869_Remake/Assets/Graphics/BG_ZeitDisplay.png b/1869_Remake/Assets/Graphics/BG_ZeitDisplay.png new file mode 100644 index 0000000..74bb125 Binary files /dev/null and b/1869_Remake/Assets/Graphics/BG_ZeitDisplay.png differ diff --git a/1869_Remake/Assets/Graphics/BG_ZeitDisplay_Monat.png b/1869_Remake/Assets/Graphics/BG_ZeitDisplay_Monat.png new file mode 100644 index 0000000..817560f Binary files /dev/null and b/1869_Remake/Assets/Graphics/BG_ZeitDisplay_Monat.png differ diff --git a/1869_Remake/Assets/Graphics/BankScreen_Basis.png b/1869_Remake/Assets/Graphics/BankScreen_Basis.png new file mode 100644 index 0000000..9aeb9d5 Binary files /dev/null and b/1869_Remake/Assets/Graphics/BankScreen_Basis.png differ diff --git a/1869_Remake/Assets/Graphics/BankScreen_Basis_2.png b/1869_Remake/Assets/Graphics/BankScreen_Basis_2.png new file mode 100644 index 0000000..b70be38 Binary files /dev/null and b/1869_Remake/Assets/Graphics/BankScreen_Basis_2.png differ diff --git a/1869_Remake/Assets/Graphics/BankScreen_Basis_2_Augen.png b/1869_Remake/Assets/Graphics/BankScreen_Basis_2_Augen.png new file mode 100644 index 0000000..d5dd061 Binary files /dev/null and b/1869_Remake/Assets/Graphics/BankScreen_Basis_2_Augen.png differ diff --git a/1869_Remake/Assets/Graphics/BarScreen_BG.png b/1869_Remake/Assets/Graphics/BarScreen_BG.png new file mode 100644 index 0000000..b4e127a Binary files /dev/null and b/1869_Remake/Assets/Graphics/BarScreen_BG.png differ diff --git a/1869_Remake/Assets/Graphics/Bark.png b/1869_Remake/Assets/Graphics/Bark.png new file mode 100644 index 0000000..9f5a6ef Binary files /dev/null and b/1869_Remake/Assets/Graphics/Bark.png differ diff --git a/1869_Remake/Assets/Graphics/Blackscreen.png b/1869_Remake/Assets/Graphics/Blackscreen.png new file mode 100644 index 0000000..21e74de Binary files /dev/null and b/1869_Remake/Assets/Graphics/Blackscreen.png differ diff --git a/1869_Remake/Assets/Graphics/Brigg.png b/1869_Remake/Assets/Graphics/Brigg.png new file mode 100644 index 0000000..0f327be Binary files /dev/null and b/1869_Remake/Assets/Graphics/Brigg.png differ diff --git a/1869_Remake/Assets/Graphics/ConfigScreen.png b/1869_Remake/Assets/Graphics/ConfigScreen.png new file mode 100644 index 0000000..f356658 Binary files /dev/null and b/1869_Remake/Assets/Graphics/ConfigScreen.png differ diff --git a/1869_Remake/Assets/Graphics/Deko_Tür_Links_1_Ofen.png b/1869_Remake/Assets/Graphics/Deko_Tür_Links_1_Ofen.png new file mode 100644 index 0000000..9d6e5c1 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Deko_Tür_Links_1_Ofen.png differ diff --git a/1869_Remake/Assets/Graphics/Eisendampfschiff.png b/1869_Remake/Assets/Graphics/Eisendampfschiff.png new file mode 100644 index 0000000..5128106 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Eisendampfschiff.png differ diff --git a/1869_Remake/Assets/Graphics/Fahne.png b/1869_Remake/Assets/Graphics/Fahne.png new file mode 100644 index 0000000..3032b83 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Fahne.png differ diff --git a/1869_Remake/Assets/Graphics/Fenster-Tür_1.png b/1869_Remake/Assets/Graphics/Fenster-Tür_1.png new file mode 100644 index 0000000..79f76c8 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Fenster-Tür_1.png differ diff --git a/1869_Remake/Assets/Graphics/FilialScreen_GroßBrit_BG.png b/1869_Remake/Assets/Graphics/FilialScreen_GroßBrit_BG.png new file mode 100644 index 0000000..8dd2da9 Binary files /dev/null and b/1869_Remake/Assets/Graphics/FilialScreen_GroßBrit_BG.png differ diff --git a/1869_Remake/Assets/Graphics/Fregatte.png b/1869_Remake/Assets/Graphics/Fregatte.png new file mode 100644 index 0000000..1825f6e Binary files /dev/null and b/1869_Remake/Assets/Graphics/Fregatte.png differ diff --git a/1869_Remake/Assets/Graphics/Gesicht_1.png b/1869_Remake/Assets/Graphics/Gesicht_1.png new file mode 100644 index 0000000..267adf7 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Gesicht_1.png differ diff --git a/1869_Remake/Assets/Graphics/HafenIcon_Filiale.png b/1869_Remake/Assets/Graphics/HafenIcon_Filiale.png new file mode 100644 index 0000000..1065237 Binary files /dev/null and b/1869_Remake/Assets/Graphics/HafenIcon_Filiale.png differ diff --git a/1869_Remake/Assets/Graphics/HafenIcon_Info.png b/1869_Remake/Assets/Graphics/HafenIcon_Info.png new file mode 100644 index 0000000..afd0c71 Binary files /dev/null and b/1869_Remake/Assets/Graphics/HafenIcon_Info.png differ diff --git a/1869_Remake/Assets/Graphics/HafenIcon_Pub.png b/1869_Remake/Assets/Graphics/HafenIcon_Pub.png new file mode 100644 index 0000000..16dcfc2 Binary files /dev/null and b/1869_Remake/Assets/Graphics/HafenIcon_Pub.png differ diff --git a/1869_Remake/Assets/Graphics/HafenIcon_Werft.png b/1869_Remake/Assets/Graphics/HafenIcon_Werft.png new file mode 100644 index 0000000..8cfef1e Binary files /dev/null and b/1869_Remake/Assets/Graphics/HafenIcon_Werft.png differ diff --git a/1869_Remake/Assets/Graphics/HallOfFameScreen.png b/1869_Remake/Assets/Graphics/HallOfFameScreen.png new file mode 100644 index 0000000..12489e6 Binary files /dev/null and b/1869_Remake/Assets/Graphics/HallOfFameScreen.png differ diff --git a/1869_Remake/Assets/Graphics/Holzdampfschiff.png b/1869_Remake/Assets/Graphics/Holzdampfschiff.png new file mode 100644 index 0000000..e0bf7c0 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Holzdampfschiff.png differ diff --git a/1869_Remake/Assets/Graphics/Holzraum_Basis.png b/1869_Remake/Assets/Graphics/Holzraum_Basis.png new file mode 100644 index 0000000..562d6af Binary files /dev/null and b/1869_Remake/Assets/Graphics/Holzraum_Basis.png differ diff --git a/1869_Remake/Assets/Graphics/InfoScreen_Liverpool_Beispiel.png b/1869_Remake/Assets/Graphics/InfoScreen_Liverpool_Beispiel.png new file mode 100644 index 0000000..285081a Binary files /dev/null and b/1869_Remake/Assets/Graphics/InfoScreen_Liverpool_Beispiel.png differ diff --git a/1869_Remake/Assets/Graphics/Introscreen_Artwork.png b/1869_Remake/Assets/Graphics/Introscreen_Artwork.png new file mode 100644 index 0000000..e621f58 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Introscreen_Artwork.png differ diff --git a/1869_Remake/Assets/Graphics/Introscreen_Musik.png b/1869_Remake/Assets/Graphics/Introscreen_Musik.png new file mode 100644 index 0000000..879aae8 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Introscreen_Musik.png differ diff --git a/1869_Remake/Assets/Graphics/Introscreen_Programmers.png b/1869_Remake/Assets/Graphics/Introscreen_Programmers.png new file mode 100644 index 0000000..7be847b Binary files /dev/null and b/1869_Remake/Assets/Graphics/Introscreen_Programmers.png differ diff --git a/1869_Remake/Assets/Graphics/Klipper.png b/1869_Remake/Assets/Graphics/Klipper.png new file mode 100644 index 0000000..507d1f7 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Klipper.png differ diff --git a/1869_Remake/Assets/Graphics/MainScreen_AnkerIcon_1.png b/1869_Remake/Assets/Graphics/MainScreen_AnkerIcon_1.png new file mode 100644 index 0000000..d9694e7 Binary files /dev/null and b/1869_Remake/Assets/Graphics/MainScreen_AnkerIcon_1.png differ diff --git a/1869_Remake/Assets/Graphics/MainScreen_AnkerIcon_2.png b/1869_Remake/Assets/Graphics/MainScreen_AnkerIcon_2.png new file mode 100644 index 0000000..4c9e431 Binary files /dev/null and b/1869_Remake/Assets/Graphics/MainScreen_AnkerIcon_2.png differ diff --git a/1869_Remake/Assets/Graphics/MainScreen_BuchIcon_1.png b/1869_Remake/Assets/Graphics/MainScreen_BuchIcon_1.png new file mode 100644 index 0000000..d0e70d5 Binary files /dev/null and b/1869_Remake/Assets/Graphics/MainScreen_BuchIcon_1.png differ diff --git a/1869_Remake/Assets/Graphics/MainScreen_BuchIcon_2.png b/1869_Remake/Assets/Graphics/MainScreen_BuchIcon_2.png new file mode 100644 index 0000000..f382b25 Binary files /dev/null and b/1869_Remake/Assets/Graphics/MainScreen_BuchIcon_2.png differ diff --git a/1869_Remake/Assets/Graphics/MainScreen_Frame.png b/1869_Remake/Assets/Graphics/MainScreen_Frame.png new file mode 100644 index 0000000..1c6076e Binary files /dev/null and b/1869_Remake/Assets/Graphics/MainScreen_Frame.png differ diff --git a/1869_Remake/Assets/Graphics/MainScreen_GeldSackIcon_1.png b/1869_Remake/Assets/Graphics/MainScreen_GeldSackIcon_1.png new file mode 100644 index 0000000..a3dffc3 Binary files /dev/null and b/1869_Remake/Assets/Graphics/MainScreen_GeldSackIcon_1.png differ diff --git a/1869_Remake/Assets/Graphics/MainScreen_GeldSackIcon_2.png b/1869_Remake/Assets/Graphics/MainScreen_GeldSackIcon_2.png new file mode 100644 index 0000000..edc81c1 Binary files /dev/null and b/1869_Remake/Assets/Graphics/MainScreen_GeldSackIcon_2.png differ diff --git a/1869_Remake/Assets/Graphics/MainScreen_MünzeIcon_1.png b/1869_Remake/Assets/Graphics/MainScreen_MünzeIcon_1.png new file mode 100644 index 0000000..982741b Binary files /dev/null and b/1869_Remake/Assets/Graphics/MainScreen_MünzeIcon_1.png differ diff --git a/1869_Remake/Assets/Graphics/MainScreen_MünzeIcon_2.png b/1869_Remake/Assets/Graphics/MainScreen_MünzeIcon_2.png new file mode 100644 index 0000000..4576ea3 Binary files /dev/null and b/1869_Remake/Assets/Graphics/MainScreen_MünzeIcon_2.png differ diff --git a/1869_Remake/Assets/Graphics/Max Design Introscreen.png b/1869_Remake/Assets/Graphics/Max Design Introscreen.png new file mode 100644 index 0000000..c88ecfe Binary files /dev/null and b/1869_Remake/Assets/Graphics/Max Design Introscreen.png differ diff --git a/1869_Remake/Assets/Graphics/MeeresKnoten.png b/1869_Remake/Assets/Graphics/MeeresKnoten.png new file mode 100644 index 0000000..398dffd Binary files /dev/null and b/1869_Remake/Assets/Graphics/MeeresKnoten.png differ diff --git a/1869_Remake/Assets/Graphics/Monat_Apr.png b/1869_Remake/Assets/Graphics/Monat_Apr.png new file mode 100644 index 0000000..a6a427e Binary files /dev/null and b/1869_Remake/Assets/Graphics/Monat_Apr.png differ diff --git a/1869_Remake/Assets/Graphics/Monat_Aug.png b/1869_Remake/Assets/Graphics/Monat_Aug.png new file mode 100644 index 0000000..5c2d45c Binary files /dev/null and b/1869_Remake/Assets/Graphics/Monat_Aug.png differ diff --git a/1869_Remake/Assets/Graphics/Monat_Dez.png b/1869_Remake/Assets/Graphics/Monat_Dez.png new file mode 100644 index 0000000..2072b3b Binary files /dev/null and b/1869_Remake/Assets/Graphics/Monat_Dez.png differ diff --git a/1869_Remake/Assets/Graphics/Monat_Feb.png b/1869_Remake/Assets/Graphics/Monat_Feb.png new file mode 100644 index 0000000..238b779 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Monat_Feb.png differ diff --git a/1869_Remake/Assets/Graphics/Monat_Jan.png b/1869_Remake/Assets/Graphics/Monat_Jan.png new file mode 100644 index 0000000..073c803 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Monat_Jan.png differ diff --git a/1869_Remake/Assets/Graphics/Monat_Jul.png b/1869_Remake/Assets/Graphics/Monat_Jul.png new file mode 100644 index 0000000..d191d55 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Monat_Jul.png differ diff --git a/1869_Remake/Assets/Graphics/Monat_Jun.png b/1869_Remake/Assets/Graphics/Monat_Jun.png new file mode 100644 index 0000000..173b68b Binary files /dev/null and b/1869_Remake/Assets/Graphics/Monat_Jun.png differ diff --git a/1869_Remake/Assets/Graphics/Monat_Mar.png b/1869_Remake/Assets/Graphics/Monat_Mar.png new file mode 100644 index 0000000..dc3d4c7 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Monat_Mar.png differ diff --git a/1869_Remake/Assets/Graphics/Monat_May.png b/1869_Remake/Assets/Graphics/Monat_May.png new file mode 100644 index 0000000..aa5c23f Binary files /dev/null and b/1869_Remake/Assets/Graphics/Monat_May.png differ diff --git a/1869_Remake/Assets/Graphics/Monat_Nov.png b/1869_Remake/Assets/Graphics/Monat_Nov.png new file mode 100644 index 0000000..89e7959 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Monat_Nov.png differ diff --git a/1869_Remake/Assets/Graphics/Monat_Oct.png b/1869_Remake/Assets/Graphics/Monat_Oct.png new file mode 100644 index 0000000..01ff41a Binary files /dev/null and b/1869_Remake/Assets/Graphics/Monat_Oct.png differ diff --git a/1869_Remake/Assets/Graphics/Monat_Sep.png b/1869_Remake/Assets/Graphics/Monat_Sep.png new file mode 100644 index 0000000..327fd16 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Monat_Sep.png differ diff --git a/1869_Remake/Assets/Graphics/OberKörper_1_Weste.png b/1869_Remake/Assets/Graphics/OberKörper_1_Weste.png new file mode 100644 index 0000000..675bf41 Binary files /dev/null and b/1869_Remake/Assets/Graphics/OberKörper_1_Weste.png differ diff --git a/1869_Remake/Assets/Graphics/OptionenScreen_Basis.png b/1869_Remake/Assets/Graphics/OptionenScreen_Basis.png new file mode 100644 index 0000000..39b1e8b Binary files /dev/null and b/1869_Remake/Assets/Graphics/OptionenScreen_Basis.png differ diff --git a/1869_Remake/Assets/Graphics/Pfeil_hoch.png b/1869_Remake/Assets/Graphics/Pfeil_hoch.png new file mode 100644 index 0000000..69ff841 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Pfeil_hoch.png differ diff --git a/1869_Remake/Assets/Graphics/Pfeil_hoch_rot.png b/1869_Remake/Assets/Graphics/Pfeil_hoch_rot.png new file mode 100644 index 0000000..a4fc140 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Pfeil_hoch_rot.png differ diff --git a/1869_Remake/Assets/Graphics/Pfeil_runter.png b/1869_Remake/Assets/Graphics/Pfeil_runter.png new file mode 100644 index 0000000..5f077a5 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Pfeil_runter.png differ diff --git a/1869_Remake/Assets/Graphics/Pfeil_runter_rot.png b/1869_Remake/Assets/Graphics/Pfeil_runter_rot.png new file mode 100644 index 0000000..afacf4f Binary files /dev/null and b/1869_Remake/Assets/Graphics/Pfeil_runter_rot.png differ diff --git a/1869_Remake/Assets/Graphics/RoterTestBalken.png b/1869_Remake/Assets/Graphics/RoterTestBalken.png new file mode 100644 index 0000000..843857e Binary files /dev/null and b/1869_Remake/Assets/Graphics/RoterTestBalken.png differ diff --git a/1869_Remake/Assets/Graphics/SchiffControllerIcon_Basis.png b/1869_Remake/Assets/Graphics/SchiffControllerIcon_Basis.png new file mode 100644 index 0000000..1f511c5 Binary files /dev/null and b/1869_Remake/Assets/Graphics/SchiffControllerIcon_Basis.png differ diff --git a/1869_Remake/Assets/Graphics/Schiffchen.png b/1869_Remake/Assets/Graphics/Schiffchen.png new file mode 100644 index 0000000..406f804 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Schiffchen.png differ diff --git a/1869_Remake/Assets/Graphics/Schoner.png b/1869_Remake/Assets/Graphics/Schoner.png new file mode 100644 index 0000000..2388a36 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Schoner.png differ diff --git a/1869_Remake/Assets/Graphics/StatistikenScreen_Basis.png b/1869_Remake/Assets/Graphics/StatistikenScreen_Basis.png new file mode 100644 index 0000000..93eebfe Binary files /dev/null and b/1869_Remake/Assets/Graphics/StatistikenScreen_Basis.png differ diff --git a/1869_Remake/Assets/Graphics/Tafel_BG_Holz.png b/1869_Remake/Assets/Graphics/Tafel_BG_Holz.png new file mode 100644 index 0000000..c679368 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Tafel_BG_Holz.png differ diff --git a/1869_Remake/Assets/Graphics/Tafel_Vordergrund_1_FassSchwamm.png b/1869_Remake/Assets/Graphics/Tafel_Vordergrund_1_FassSchwamm.png new file mode 100644 index 0000000..b81630d Binary files /dev/null and b/1869_Remake/Assets/Graphics/Tafel_Vordergrund_1_FassSchwamm.png differ diff --git a/1869_Remake/Assets/Graphics/Tafel_basic.png b/1869_Remake/Assets/Graphics/Tafel_basic.png new file mode 100644 index 0000000..2702f6b Binary files /dev/null and b/1869_Remake/Assets/Graphics/Tafel_basic.png differ diff --git a/1869_Remake/Assets/Graphics/Tisch_1.png b/1869_Remake/Assets/Graphics/Tisch_1.png new file mode 100644 index 0000000..7141289 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Tisch_1.png differ diff --git a/1869_Remake/Assets/Graphics/Tisch_2_Holz_Basic.png b/1869_Remake/Assets/Graphics/Tisch_2_Holz_Basic.png new file mode 100644 index 0000000..d098a83 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Tisch_2_Holz_Basic.png differ diff --git a/1869_Remake/Assets/Graphics/TitleScreen.png b/1869_Remake/Assets/Graphics/TitleScreen.png new file mode 100644 index 0000000..c1ecd1f Binary files /dev/null and b/1869_Remake/Assets/Graphics/TitleScreen.png differ diff --git a/1869_Remake/Assets/Graphics/Werft_Bau_Schiffsnamen.png b/1869_Remake/Assets/Graphics/Werft_Bau_Schiffsnamen.png new file mode 100644 index 0000000..6fc54ee Binary files /dev/null and b/1869_Remake/Assets/Graphics/Werft_Bau_Schiffsnamen.png differ diff --git a/1869_Remake/Assets/Graphics/Werft_Main_BG.png b/1869_Remake/Assets/Graphics/Werft_Main_BG.png new file mode 100644 index 0000000..8873d48 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Werft_Main_BG.png differ diff --git a/1869_Remake/Assets/Graphics/Werft_Reparatur_BG.png b/1869_Remake/Assets/Graphics/Werft_Reparatur_BG.png new file mode 100644 index 0000000..a7710ce Binary files /dev/null and b/1869_Remake/Assets/Graphics/Werft_Reparatur_BG.png differ diff --git a/1869_Remake/Assets/Graphics/Werft_SchiffstypAuswahl_BG.png b/1869_Remake/Assets/Graphics/Werft_SchiffstypAuswahl_BG.png new file mode 100644 index 0000000..d052744 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Werft_SchiffstypAuswahl_BG.png differ diff --git a/1869_Remake/Assets/Graphics/Zahl_0.png b/1869_Remake/Assets/Graphics/Zahl_0.png new file mode 100644 index 0000000..a59a1c9 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Zahl_0.png differ diff --git a/1869_Remake/Assets/Graphics/Zahl_1.png b/1869_Remake/Assets/Graphics/Zahl_1.png new file mode 100644 index 0000000..b324647 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Zahl_1.png differ diff --git a/1869_Remake/Assets/Graphics/Zahl_2.png b/1869_Remake/Assets/Graphics/Zahl_2.png new file mode 100644 index 0000000..3280773 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Zahl_2.png differ diff --git a/1869_Remake/Assets/Graphics/Zahl_3.png b/1869_Remake/Assets/Graphics/Zahl_3.png new file mode 100644 index 0000000..f3e5741 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Zahl_3.png differ diff --git a/1869_Remake/Assets/Graphics/Zahl_4.png b/1869_Remake/Assets/Graphics/Zahl_4.png new file mode 100644 index 0000000..3de29e1 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Zahl_4.png differ diff --git a/1869_Remake/Assets/Graphics/Zahl_5.png b/1869_Remake/Assets/Graphics/Zahl_5.png new file mode 100644 index 0000000..309a1e6 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Zahl_5.png differ diff --git a/1869_Remake/Assets/Graphics/Zahl_6.png b/1869_Remake/Assets/Graphics/Zahl_6.png new file mode 100644 index 0000000..19906e2 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Zahl_6.png differ diff --git a/1869_Remake/Assets/Graphics/Zahl_7.png b/1869_Remake/Assets/Graphics/Zahl_7.png new file mode 100644 index 0000000..d36828a Binary files /dev/null and b/1869_Remake/Assets/Graphics/Zahl_7.png differ diff --git a/1869_Remake/Assets/Graphics/Zahl_8.png b/1869_Remake/Assets/Graphics/Zahl_8.png new file mode 100644 index 0000000..58b45c8 Binary files /dev/null and b/1869_Remake/Assets/Graphics/Zahl_8.png differ diff --git a/1869_Remake/Assets/Graphics/Zahl_9.png b/1869_Remake/Assets/Graphics/Zahl_9.png new file mode 100644 index 0000000..7860c3c Binary files /dev/null and b/1869_Remake/Assets/Graphics/Zahl_9.png differ diff --git a/1869_Remake/Assets/Graphics/worldmap_europa.png b/1869_Remake/Assets/Graphics/worldmap_europa.png new file mode 100644 index 0000000..1ed68de Binary files /dev/null and b/1869_Remake/Assets/Graphics/worldmap_europa.png differ diff --git a/1869_Remake/Assets/Music/Title.ogg b/1869_Remake/Assets/Music/Title.ogg new file mode 100644 index 0000000..5486ef8 Binary files /dev/null and b/1869_Remake/Assets/Music/Title.ogg differ diff --git a/1869_Remake/Entities/AnimatingEntity.cs b/1869_Remake/Entities/AnimatingEntity.cs new file mode 100644 index 0000000..536124d --- /dev/null +++ b/1869_Remake/Entities/AnimatingEntity.cs @@ -0,0 +1,33 @@ +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 AnimatingEntity : Entity + { + + + enum Animation + { + BackGround + } + + Spritemap spritemap = new Spritemap(Assets.SPRITESHEET_MEER, 640, 480); + public AnimatingEntity(float x, float y) : base(x, y) + { + spritemap.Add(Animation.BackGround, "0,1,2,3,4,5,6,7,8,9,10,11", 8); + + spritemap.Play(Animation.BackGround); + + AddGraphic(spritemap); + } + + + + } +} diff --git a/1869_Remake/Entities/Filiale.cs b/1869_Remake/Entities/Filiale.cs new file mode 100644 index 0000000..34d018d --- /dev/null +++ b/1869_Remake/Entities/Filiale.cs @@ -0,0 +1,174 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Otter; +using _1869_Remake; +using _1869_Remake.Entities; + +namespace _1869_Remake.Entities +{ + public class Filiale : Entity + { + + public Hafen HEIMATHAFEN; + public int BUDGET { get; private set; } + int KOSTEN; + public Spieler BESITZER; + public List LAGER = new List(); + + + //Standardkonstruktor + public Filiale() + { + + } + + + //Parameterkonstruktor + public Filiale(Hafen Heimat, Spieler Gründer, int laufendeKosten) + { + this.HEIMATHAFEN = Heimat; + this.BESITZER = Gründer; + this.KOSTEN = laufendeKosten; + // Immer Startkapital von 0 ausgehen + this.BUDGET = 0; + } + + //Kopierkonstruktor + public Filiale(Filiale KopierFiliale) + { + this.HEIMATHAFEN = KopierFiliale.HEIMATHAFEN; + this.BESITZER = KopierFiliale.BESITZER; + this.BUDGET = KopierFiliale.BUDGET; + this.KOSTEN = KopierFiliale.KOSTEN; + + this.LAGER = KopierFiliale.LAGER; + + } + + //allgemeine Geld methoden + public void erhöheBudget(int geldbetrag) + { + BUDGET += geldbetrag; + } + + public void verringereBudget(int geldbetrag) + { + BUDGET -= geldbetrag; + } + + //Warenverwaltungsmethoden + public void einlagernWare(Ware ware) + { + // Einlagerung von Waren benötigt immer die effektiv erzeugte Ware + Ware TempWare = new Ware(ware); + + //Wenn Warentyp bereits vorhanden wird die Menge dieser ware hinzugefügt + if (ware.istVerderblich()) + { + // Sonderlogik bei verderblicher Ware + // To Do: Implementieren / durchdenken!! + } + else + { + bool WareGefunden = false; + foreach (Ware item in LAGER) + { + if (ware.BEZEICHNUNG == item.BEZEICHNUNG) + { + //Ware mit diesem Namen gefunden -> Menge erhöhen + WareGefunden = true; + item.MENGE += ware.MENGE; + //Wenn Ware gefunden wurde müssen wir nicht mehr weiter durchsuchen + break; + } + } + if (!WareGefunden) + { + // Wenn es diese Ware noch nicht im Lager gab wird sie neu Eingelagert + LAGER.Add(TempWare); + } + } + + + } + + public void AuslagernnWare(string WarenName, int Menge) + { + bool verderblich = false; + + // Vorabcheck ob Ware existiert und ob diese verderblich ist + foreach (Ware item in LAGER) + { + if (item.BEZEICHNUNG == WarenName) + { + verderblich = item.istVerderblich(); + //Wenn Ware gefunden wurde müssen wir nicht mehr weiter durchsuchen + break; + } + } + + if (verderblich) + { + // Sonderlogik bei verderblicher Ware + // To Do: Implementieren / durchdenken!! + } + else + { + foreach (Ware item in LAGER) + { + if (item.BEZEICHNUNG == WarenName) + { + // Angefragte Menge Reduzieren + // Wenn nicht mehr genug ware vorhanden ist wird null ausgegeben + if (item.MENGE - Menge < 0) + { + // Wenn auszulagernder Menge unter 0 ist ist ein fehler Passiert ergo nichts tun! + } + else + { + item.MENGE -= Menge; + // Wenn wir mit der Auslagerung das Lager geleert haben wird es aus dem Bestand genommen + if (item.MENGE == 0) + LAGER.Remove(item); + } + //Wenn Ware gefunden wurde müssen wir nicht mehr weiter durchsuchen + break; + } + } + + } + + } + + public void LaufendeKostenAbziehen() + { + bool filialSchließung = false; + // diese Funktion wird abgerufen wenn die Kosten für den filialbetrieb fällig werden -> Hier kann eine Filial Schließung veranlasst werden + if (BUDGET >= KOSTEN) + { + // Laufendekosten können regulär abgezogen werden + BUDGET -= KOSTEN; + + } + else + { + // Laufende Kosten übersteigen + BUDGET -= KOSTEN; + // Wegen übersteigender Kosten sind alle Waren verloren und filiale wird geschlossen + schließeFiliale(); + this.RemoveSelf(); + } + } + + public void schließeFiliale() + { + + BESITZER.schließtFiliale(this); + + } + + } +} diff --git a/1869_Remake/Entities/Hafen.cs b/1869_Remake/Entities/Hafen.cs new file mode 100644 index 0000000..696500d --- /dev/null +++ b/1869_Remake/Entities/Hafen.cs @@ -0,0 +1,711 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Otter; +using _1869_Remake; +using _1869_Remake.Scenes; + + +namespace _1869_Remake.Entities +{ + public class Hafen : Entity + { + //ToDo Waren Restock logik ausbauen -> Wie wird Schablone Daten entnommen sodass wir oder Hafen weiß welche Waren zu welchem Einkaufspreis in welcher Menge zu welchem Monat nachgefüöllt werden + public string NAME { get; set; } + public string KÖNIGREICH { get; set; } + + //Mögliches Feature an dieser Stelle für das Remake -> Wandelnder Hauptexport und generell Wandelnde Export/Import Güter, + //je nachdem wie die Spieler diese Häfen mit Waren Versorgen + //Beispiel wenn Spieler A immer wieder zu den selben 3 Häfen fährt und die selben Rohstoffe liefert wird der Bedarf an diesen jeweiligen + //Waren gedeckt sein und der Verkaufspreis sinkt bis hin zu keinem Import dieser Ware mehr + //Dieses Feature würde dazu führen, dass die Spieler Überlegen müssen wo sie hinfahren und wie oft sie dort hinfahren + //Nachteil -> sehr feines Balancing notwendig da eine Art Grundbedarf von Gütern für ein Land eingebaut werden muss + //(Aber machbar da die Ur-Entwickler sich viel Mühe mit den historischen Daten gegeben haben -> die Bedürfnisse können davon extrahiert werden + public string HAUPTEXPORT { get; set; } + public string POLITIK { get; set; } + + //Aktiv => wenn Symbolleiste nach einem Click auf Hafen für den Spieler angezeigt wird + // Wenn geklickt und nicht aktiv => anzeige des Infoscreens + public bool Aktiv; + public bool istAktivesSubelement = false; + + //Um zu verhindern dass bei jedem Update die Icons immer wieder neu angezeigt werden wird einmalig anzeigeFertig gesetzt; Wenn False dann anzeige verändern + public bool anzeigeFertig; + + public bool werftVorhanden; + public Dictionary SchiffsBauPipeline; + + public bool filialeVorhanden; + + public bool eigenesSchiffLiegtVorAnker; + + //Liste aller aktuell im Hafen befindlicher Schiffe (Eventuel im Remake eine Kapazität für die Menge an Schiffen einbauen -> Nicht jeder Hafen kann unendlich viele Schiffe herbergen) + public List angedockteSchiffe = new List(); + public int anzahlEigenerSchiffe = 0; + + //Liste aller Filialen in diesem Hafen + public List vorhandeneFilialen = new List(); + + //Jeder Hafen hat ein internes Lager. Bei Start und zeitlich getriggert werden Import und export waren mit festen mengen neu gesetzt + //Unterscheidung von Import schablonen und Export schablonen -> bei Nachfüllen muss über beide Listen gegangen werden + public List IMPORTWARE = new List(); + public Dictionary> RESTOCKSCHABLONEIMPORT = new Dictionary>(); + public List EXPORTWARE = new List(); + public Dictionary> RESTOCKSCHABLONEEXPORT = new Dictionary>(); + + + public Image InfoIcon = new Image(Assets.HAFENINFO); + public Image WerftIcon = new Image(Assets.HAFENWERFT); + public Image BarIcon = new Image(Assets.HAFENBAR); + public Image FilialeIcon = new Image(Assets.HAFENFILIALE); + public Image Fähnchen = new Image(Assets.HAFENFAHNE); + public Image Schiffchen = new Image(Assets.HAFENSCHIFF); + + public Image InfoScreen = new Image(Assets.MAINSCREEN_INFO_SCHABLONE); + + private bool FadeOutAktiv = false; + private string FadeOutZiel; + private string FadeOutParam; + public Image BlackScreen = new Image(Assets.BLACKSCREEN); + + + public Hafen() + { + + } + + public Hafen(string Name, string Land, int xPos, int yPos, bool Werft) + { + this.NAME = Name; + this.KÖNIGREICH = Land; + + Aktiv = false; + anzeigeFertig = true; + werftVorhanden = Werft; + + //Position auf der Weltkarte -> aus der Position erstellt die Weltkarte die Clickbereiche + this.X = xPos; + this.Y = yPos; + + InfoIcon.X = -60; + InfoIcon.Y = -60; + InfoIcon.Alpha = 0; + AddGraphics(InfoIcon); + + BarIcon.X = -20; + BarIcon.Y = -60; + BarIcon.Alpha = 0; + AddGraphics(BarIcon); + + //Pauschales hinzufügen des Filialen Icons damit dieses später bei Bedarf eingeblendet werden kann + if (Werft) + { + + WerftIcon.X = 20; + WerftIcon.Y = -60; + WerftIcon.Alpha = 0; + AddGraphics(WerftIcon); + + //Filialne Icon + FilialeIcon.X = 60; + } + else + { + FilialeIcon.X = 20; + } + + FilialeIcon.Y = -60; + FilialeIcon.Alpha = 0; + AddGraphics(FilialeIcon); + + //Immer an de selben Position rendern nicht relativ zum Hafen selbst + InfoScreen.Relative = false; + InfoScreen.X = 50; + InfoScreen.Y = 55; + InfoScreen.Alpha = 0; + AddGraphics(InfoScreen); + + //Fähnchen wenn man eine Filiale in dem Hafen besitzt + Fähnchen.X = 5; + Fähnchen.Y = -17; + Fähnchen.Alpha = 0; + AddGraphic(Fähnchen); + + //Schiffchen Icon setzen (Hat eigene Position je nachdem welcher Hafen das ist) + #region SchiffchenPositionen je Hafen + switch (NAME) + { + //Amerika + case "SAN FRANZISKO": + break; + case "NEW ORLEANS": + break; + case "SAVANNAH": + break; + case "NEW YORK": + break; + case "LOS ANGELES": + break; + case "PUERTO BELLO": + break; + case "CEYENNE": + break; + case "CALLAO": + break; + case "ARICA": + break; + case "RIO DE JANEIRO": + break; + //Afrika + case "AKKRA": + break; + case "LAGOS": + break; + case "LUANDA": + break; + case "KAPSTADT": + break; + case "MOCAMBIQUE": + break; + case "TANGA": + break; + case "PORT SAID": + break; + case "ADEN": + break; + case "TUNIS": + break; + //Europa + case "ODESSA": + break; + case "TRIEST": + break; + case "BARCELONA": + break; + case "LISSABON": + break; + case "LE HAVRE": + break; + case "AMSTERDAM": + break; + case "HAMBURG": + break; + case "LONDON": + break; + case "LIVERPOOL": + setzeSchiffsIcon(-30, -5); + break; + //Asien/Australien + case "DIU": + break; + case "BOMBAY": + break; + case "COLOMBO": + break; + case "RANGOON": + break; + case "MACAO": + break; + case "SHANGHAI": + break; + case "SINGAPORE": + break; + case "MANDAO": + break; + case "PERTH": + break; + case "MELBOURNE": + break; + case "SIDNEY": + break; + } + #endregion + + Globals.registriereEntität(this); + + } + + + + public override void Update() + { + base.Update(); + //TODO: KlickLogik anpassen wegen SubElement aktiv (Darf immer nur ein Element geklickt und aktiv geschaltet werden) + + //Einblenden der Icons + if (!anzeigeFertig) + { + //überprüfen was angezeigt werden muss => wenn spieler Filiale oder Schiff hier hat muss Hafenorte angezeigt werden(Icons) wenn nicht dann info screen + if (Aktiv) + { + //anzeige der Icons + InfoIcon.Alpha = 1; + + BarIcon.Alpha = 1; + + if (werftVorhanden) + { + WerftIcon.Alpha = 1; + } + if (filialeVorhanden) + { + FilialeIcon.Alpha = 1; + } + + } + else + { + //InfoScreen anzeige + InfoScreen.Alpha = 1; + //Während Infoscreen keine Fähnchen oder Schiffchen anzeigen (Global) + for (int index = 0; index < Globals.AlleHäfen.Count(); index++) + { + Globals.AlleHäfen.ElementAt(index).Value.Fähnchen.Alpha = 0; + Globals.AlleHäfen.ElementAt(index).Value.Schiffchen.Alpha = 0; + } + + } + + //Wenn alles aktiviert dann nicht wieder Zeichnen + anzeigeFertig = true; + + } + + //Click auf den Hafen verursacht anzeige von Icons oder Infoscreen zu Hafen + if (Util.InRect(this.Scene.MouseX, this.Scene.MouseY, X - 10, Y - 10, 20, 20)) + { + if (Globals.PlayerSession.Controller.Button("MausLinks").Released && !Globals.DisplaySubElementAktiv && !Aktiv) + { + Console.Clear(); + Console.WriteLine("Hafen " + NAME + " geclicked! "); + + if (checkVerfügbareIcons(Globals.AktuellerSpieler)) + { + this.FadeOutZiel = "Handel"; + this.FadeOutParam = this.NAME; + + + this.FadeOutAktiv = true; + //Wenn Wechsel zu andereer Szene werden Fähnchen und Schiffchen nicht angezeigt + for (int index = 0; index < Globals.AlleHäfen.Count(); index++) + { + Globals.AlleHäfen.ElementAt(index).Value.Fähnchen.Alpha = 0; + Globals.AlleHäfen.ElementAt(index).Value.Schiffchen.Alpha = 0; + } + + } + else + { + //Infoscreen wird geladen Wenn Linksklick ohne Filiale oder Schiff im Hafen + anzeigeFertig = false; + Aktiv = false; + for (int index = 0; index < Globals.AlleHäfen.Count(); index++) + { + Globals.AlleHäfen.ElementAt(index).Value.Fähnchen.Alpha = 0; + Globals.AlleHäfen.ElementAt(index).Value.Schiffchen.Alpha = 0; + } + + } + //Wenn kein SubelementAktiv ist und dieser Hafen aktiviert wurde muss globale Klick Logik auf dieser Entitäten Fokusiert bleiben + Globals.DisplaySubElementAktiv = true; + istAktivesSubelement = true; + } + + if (Globals.PlayerSession.Controller.Button("MausRechts").Released && !Globals.DisplaySubElementAktiv && !Aktiv) + { + Console.Clear(); + Console.WriteLine("Hafen " + NAME + " geclicked! "); + + //überprüfen, ob icons oder info angezeigt wird + überprüfen ob klickender hier eine filiale hat -> Wenn ja wird filiale Icon mit angezeigt + Aktiv = checkVerfügbareIcons(Globals.AktuellerSpieler); + anzeigeFertig = false; + + //Wenn kein SubelementAktiv ist und dieser Hafen aktiviert wurde muss globale Klick Logik auf dieser Entitäten Fokusiert bleiben + Globals.DisplaySubElementAktiv = true; + istAktivesSubelement = true; + + } + + } + else + { + //Wenn nicht auf den Hafen geklickt -> erst überprüfen ob Klick einem Icon galt (Wenn zu vor Icons angezeigt wurden) + if (Globals.PlayerSession.Controller.Button("MausLinks").Released && istAktivesSubelement) + { + if (Aktiv) + { + //Icons sind aktiv -> check, ob click einem Icon galt + if (Util.InRect(this.Scene.MouseX, this.Scene.MouseY, X - 60, Y - 80, 40, 50) ) + { + Console.WriteLine("Infoicon geklicked!"); + anzeigeFertig = false; + Aktiv = false; + } + + if (Util.InRect(this.Scene.MouseX, this.Scene.MouseY, X - 20, Y - 80, 40, 50) ) + { + Console.WriteLine("Baricon geklicked!"); + this.FadeOutZiel = "Bar"; + this.FadeOutParam = this.NAME; + this.FadeOutAktiv = true; + + } + + if (werftVorhanden) + { + if (Util.InRect(this.Scene.MouseX, this.Scene.MouseY, X + 20, Y - 80, 40, 50) ) + { + Console.WriteLine("Werfticon geklicked!"); + this.FadeOutZiel = "Werft"; + this.FadeOutParam = this.NAME; + this.FadeOutAktiv = true; + + } + } + + if (filialeVorhanden) + { + if (werftVorhanden) + { + //Rechte Filialposition (Wenn Werft dabei) + if (Util.InRect(this.Scene.MouseX, this.Scene.MouseY, X + 60, Y - 80, 40, 50) ) + { + Console.WriteLine("Filialeticon geklicked!"); + this.FadeOutZiel = "Filiale"; + this.FadeOutParam = this.NAME; + this.FadeOutAktiv = true; + + } + } + else + { + //Linke Filialposition (wenn Werft nicht vorhanden) + if (Util.InRect(this.Scene.MouseX, this.Scene.MouseY, X + 20, Y - 80, 40, 50)) + { + Console.WriteLine("Filialeticon geklicked!"); + this.FadeOutZiel = "Filiale"; + this.FadeOutParam = this.NAME; + this.FadeOutAktiv = true; + + } + } + + } + + Console.WriteLine("Hafen " + NAME + " weg geclicked! "); + filialeVorhanden = false; // check ob filiale hier wirklich deaktiviert wird!!! + Aktiv = false; + + //Wenn weggeklickt wurde dann alle Graphicen unsichtbar schalten + InfoIcon.Alpha = 0; + BarIcon.Alpha = 0; + WerftIcon.Alpha = 0; + FilialeIcon.Alpha = 0; + + + } + else + { + //keine Icons wurden angezeigt -> Wegclicken des infoscreens + InfoScreen.Alpha = 0; + for (int index = 0; index < Globals.AlleHäfen.Count(); index++) + { + Globals.AlleHäfen.ElementAt(index).Value.aktiviereFähnchen(Globals.AktuellerSpieler); + Globals.AlleHäfen.ElementAt(index).Value.aktiviereSchiffsIcon(Globals.AktuellerSpieler); + } + + + + } + + //Wenn SubelementAktiv ist muss globale Klick Fokus wieder frei gegeben werden + Globals.DisplaySubElementAktiv = false; + istAktivesSubelement = false; + + } + } + } + + public void setzeRestockListe(string Monat, Ware Item, string richtung) + { + //Schablone wird nur einmal gesetzt in Config und bei Spielstandladung!! + //Überprüfung: Wenn einer neuen Monatsliste etwas hinzugefügt werden soll, muss diese erst erstellt werden + //TODO: Wenn Mitte des Monats sachen hinzugefügt werden sollen muss in Ware neues Feld"RestockTag" hinzugefügt und hier eine Routine zu dessen Verwaltung eingebaut werden + switch (richtung) + { + case "IMPORT": + if (!RESTOCKSCHABLONEIMPORT.ContainsKey(Monat)) + { + RESTOCKSCHABLONEIMPORT.Add(Monat, new List()); + } + + RESTOCKSCHABLONEIMPORT[Monat].Add(Item); + break; + case "EXPORT": + if (!RESTOCKSCHABLONEEXPORT.ContainsKey(Monat)) + { + RESTOCKSCHABLONEEXPORT.Add(Monat, new List()); + } + + RESTOCKSCHABLONEEXPORT[Monat].Add(Item); + break; + } + + } + + public void NeuAuffüllenLager(string reStockMonat) + {// jeder Hafen arbeitet mit der Logik, dass zu einem Gewissen Datum eine gewisse Ware um eine bestimmte Menge "restockt" wird + //-> Beispiel in Tunis wird Jeden Januar, April und Oktober Früchte nachgestockt und im März und September Pflanzen öl + // zu untersuchen gilt folgendes: Ändern sich die verkaufs/einkaufspreise bei den Waren wenn sie "Knapper" werden in HafenLager + // für restock balancing UNBEDINGT das Handbuch lesen-> Wahrscheinlich stehen hier tipps oder hinweise zu den Zyklen der Häfen drin !!! + // Was wann um wie viel aufgestockt wird, wird bei obj erstellung definiert + List TempWare; + + //Hier werden alte Bestände gelöscht (Muss überprüft werden ob bei nicht verderblichen Waren nach ReStock die alte Menge noch existiert[würde Sinn machen da Maschinen nicht verderben]) + //IMPORT-Schablonen + TempWare = new List(RESTOCKSCHABLONEIMPORT[reStockMonat]); + foreach (Ware item in TempWare) + { + //überprüfen ob noch Restbestände in der Liste sind( EVTL durch testen ob bei restmenge und nachstockung die Menge sich erhöht oder neu setzt auf default!!) + for (int i = 0; i < IMPORTWARE.Count(); i++) + { + Ware vergleichItem = IMPORTWARE[i]; + + if (vergleichItem.BEZEICHNUNG == item.BEZEICHNUNG) + { + IMPORTWARE.RemoveAt(i); + } + } + + // Neu Hinzufügen der Schablone + IMPORTWARE.Add(new Ware(item)); + + } + + //EXPORT-Schablonen + TempWare = new List(RESTOCKSCHABLONEEXPORT[reStockMonat]); + foreach (Ware item in TempWare) + { + //überprüfen ob noch Restbestände in der Liste sind( EVTL durch testen ob bei restmenge und nachstockung die Menge sich erhöht oder neu setzt auf default!!) + + for (int i = 0; i < EXPORTWARE.Count(); i++) + { + Ware vergleichItem = EXPORTWARE[i]; + + if (vergleichItem.BEZEICHNUNG == item.BEZEICHNUNG) + { + EXPORTWARE.RemoveAt(i); + } + } + + // Neu Hinzufügen der Schablone + EXPORTWARE.Add(new Ware(item)); + } + } + + public void politischeVeränderung(string Zustand) + { + switch (Zustand) + { + //Zustandsspezifische Ereignisse + case "STABIL": POLITIK = Zustand; break; + case "UNRUHEN": POLITIK = Zustand; break; + case "AUFSTÄNDE": POLITIK = Zustand; break; + case "KRIEG": POLITIK = Zustand; break; + + } + + } + + + private bool checkVerfügbareIcons(Spieler anfragenderSpieler) + { + // Methode zur ermittlung ob Icons oder info screen gezeigt wird + //True = Icons, False = Info + + //Überprüfen aller Filialen im Hafen auf Besitzer + foreach (Filiale f in vorhandeneFilialen) + { + if (f.BESITZER == anfragenderSpieler) + { + filialeVorhanden = true; + + return true; + } + } + + //Überprüfen aller angedockten Schiffe auf deren Commandeure(Spielerzugehörigkeit) + foreach (Schiff s in angedockteSchiffe) + { + if (s.COMMANDEUR == anfragenderSpieler) + { + eigenesSchiffLiegtVorAnker = true; + anzahlEigenerSchiffe++; + + } + } + + if (eigenesSchiffLiegtVorAnker) + return true; + else + return false; + + } + + + public Filiale überprüfeAktuelleFilialeVorhanden(Spieler anfrageSpieler) + { + // Überprüfen ob eigene Filiale vorhanden ist + foreach (Filiale f in vorhandeneFilialen) + { + if (f.BESITZER == anfrageSpieler) + { + filialeVorhanden = true; + return f; + } + } + //Wenn es keine eigene aktive Filiale im Hafen gibt + filialeVorhanden = false; + return null; + + } + + public List überprüfeEigeneSchiffeVorhanden(Spieler anfrageSpieler) + { + //Überprüfen, ob und welche eigenen schiffe im Hafen angedockt sind + List Schiffsliste = new List(); + foreach (Schiff s in angedockteSchiffe) + { + if (s.COMMANDEUR == anfrageSpieler) + { + eigenesSchiffLiegtVorAnker = true; + Schiffsliste.Add(new Schiff(s)); + } + } + + if (Schiffsliste.Count() > 0) + return Schiffsliste; + else + //Wenn es keine eigene aktive Filiale im Hafen gibt + return null; + + } + + // Methode zur Verwaltung der Filialen im Hafen + public void filialenAktivität(int ereignis, Filiale betroffeneFiliale) + { + //Ereignis 1 => Filiale wird gegründet + //Rest => Filiale wird aufgelöst + if (ereignis == 1) + { + //Wenn Filiale noch nicht in der Liste -> gründung der Filiale + if (!vorhandeneFilialen.Contains(betroffeneFiliale)) + { + vorhandeneFilialen.Add(betroffeneFiliale); + } + + } + else + { + //Löschen der Filiale bei Auflösung + if (vorhandeneFilialen.Contains(betroffeneFiliale)) + { + vorhandeneFilialen.Remove(betroffeneFiliale); + } + + + } + + } + + // Methode zur Verwaltung der Schiffe im Hafen + public void schiffsAktivität(string richtung, Schiff betroffenesSchiff) + { + //Richtung 1 => Schiff fährt in den Hafen + //Rest => Schiff fährt aus dem Hafen + if (richtung == "Einfahren") + { + //Schiff fährt in den Hafen => ist jetzt angedockt + //Überprüfung ob schiff bereits angedockt ist um fehler zu vermeiden + if (!angedockteSchiffe.Contains(betroffenesSchiff)) + { + angedockteSchiffe.Add(betroffenesSchiff); + } + + } + else + { + //Schiff fährt aus dem Hafen => ist nicht mehr angedockt + if (angedockteSchiffe.Contains(betroffenesSchiff)) + { + angedockteSchiffe.Remove(betroffenesSchiff); + } + + + } + + } + + public void prüfeExternerFadeOut(out string Ziel, out string Param) + { + bool FadeOut = this.FadeOutAktiv; + if (FadeOut) + { + Ziel = this.FadeOutZiel; + Param = this.FadeOutParam; + + } + else + { + Ziel = "Error"; + Param = "Error"; + } + + + } + + public void resetFadeOut() + { + this.FadeOutAktiv = false; + } + + public void aktiviereFähnchen(Spieler aktuellerSpieler) + { + //aktiviere das Fähnchen Symbol wenn eine Filiale für den Aktuellen Spieler im Hafen existiert + Fähnchen.Alpha = 0f; + foreach (Filiale f in vorhandeneFilialen) + { + if (f.BESITZER == aktuellerSpieler) + { + Fähnchen.Alpha = 1f; + break; + } + } + } + + public void aktiviereSchiffsIcon(Spieler aktuellerSpieler) + { + //aktiviere das Schiffchen Symbol wenn mind. 1 Schiff des aktuellen Spielers im Hafen angedockt ist + Schiffchen.Alpha = 0f; + foreach (Schiff s in angedockteSchiffe) + { + if (s.COMMANDEUR == aktuellerSpieler && s.inBau == false && s.inBereitstellung == false) + { + Schiffchen.Alpha = 1f; + break; + } + } + } + + public void setzeSchiffsIcon(int xPos, int yPos) + { + Schiffchen.X = xPos; + Schiffchen.Y = yPos; + Schiffchen.Alpha = 0f; + AddGraphic(Schiffchen); + } + + } +} diff --git a/1869_Remake/Entities/MeeresKnotenpunkt.cs b/1869_Remake/Entities/MeeresKnotenpunkt.cs new file mode 100644 index 0000000..0460bc5 --- /dev/null +++ b/1869_Remake/Entities/MeeresKnotenpunkt.cs @@ -0,0 +1,71 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using _1869_Remake; +using _1869_Remake.Entities; +using Otter; + +namespace _1869_Remake.Entities +{ + public class MeeresKnotenpunkt : Entity + { + //ID_NAME_LAGE des Knotenpunktes + public string ORT; + + //Liste aller mit diesem Punkt verbundenen Knotenpunkte + Dictionary, int> VERKNÜPFTESEESTRAßEN = new Dictionary, int>(); + + //zugehöriger Weltkartenteil und dessen Position (Da die Pos abhängig ist von Weltkarten teil aber der Punkt [z.b. Bei Auswahl] der gleiche bleibt) + Dictionary SCREENPOS_X; + Dictionary SCREENPOS_Y; + + public Image Knoten; + + + + public MeeresKnotenpunkt(string ort) + { + // Todo Vervollständigen + this.ORT = ort; + + Knoten = new Image(Assets.ICON_MEERESKNOTEN); + Knoten.CenterOrigin(); + Knoten.X = 0; + Knoten.Y = 0; + + AddGraphic(Knoten); + Globals.registriereEntität(this); + } + + public override void Update() + { + base.Update(); + + + } + + public void verlinkeSeeStraße(SeeStraße Route, int SpeedMultiplikator, string JahresZeit) + {// Eintragen der Seestraße (+ Jahreszeit wegen Strömungskarte) in Verbindung mit dessen SpeedMultiplikator (wenn gute Windverhältnisse die Reise begünstigen z.b.) + if (!VERKNÜPFTESEESTRAßEN.ContainsKey(new KeyValuePair(Route, JahresZeit))) + { + VERKNÜPFTESEESTRAßEN.Add(new KeyValuePair(Route, JahresZeit), SpeedMultiplikator); + } + } + + public void wechsleWeltAnsicht(string Kontinent) + { + if (SCREENPOS_X.ContainsKey(Kontinent)) + { + setzeNeueScreenPos(SCREENPOS_X[Kontinent], SCREENPOS_Y[Kontinent]); + } + } + + public void setzeNeueScreenPos(int xPos, int yPos) + { + this.X = xPos; + this.Y = yPos; + } + } +} diff --git a/1869_Remake/Entities/Schiff.cs b/1869_Remake/Entities/Schiff.cs new file mode 100644 index 0000000..5484c74 --- /dev/null +++ b/1869_Remake/Entities/Schiff.cs @@ -0,0 +1,485 @@ +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 Schiff : Entity + { + //Eventuell eine Auflistung machen von den Verschiedenen Schiffstypen hier und andere Entitäten davon objekte erstellen lassen + //Hinweis: Wenn waren eingeladert/ausgelagert werden, die NICHT verderblich sind kann gefahrlos immer nur ein Objekt dieser Ware in der Ladeliste stehen bleiben. + //Problematisch wird es bei Verderblichen Sachen -> Hier muss mit dem Verderblich kennzeichen der Ware gearbeitet werden damit bei Ankauf und Verkauf der Ware richtiges Handling stattfindet + //-> Bei einkauf: Immer neue Objekte erstellen und Einkaufspreis ist abhängig von Verderbtheitsgrad + //-> Bei Verkauf: Durchlauf der gesamten Ware und verkauf aller Exemplare dieser Ware; Verkaufspreis ist wie bei Einkaufspreis abhängig von Verderbtheitsgrad -> Alle Warenexemplare müssen mit ihrem jeweiligen Verderbtheitsmultiplikator verrechnet werden und als Angebotspreis angeboten werden. + //-> Preisberechnung sollte immer vom Hafen aus erfolgen um Kosten/Wert zentral berechnen zu lassen + + //-> Schiffe sind wie eigene Filiale, die aber nicht Hafengebunden sind (und eventuell Kampfgefährt im Freibeuter modus) + + #region Schiffsbasis Vars + // Name des Schiffs + public string NAME; + // Besitzer des Schiffs + public Spieler COMMANDEUR; + + //Zustandseigenschaften des Schiffs + // SCHIFFSTYP beschreibt die Art von Schiff -> Es gibt unterkategorien jedoch wird der hier eingetragene Wert größtenteils generalisiert + public string SCHIFFSTYP; + // Mögliche Baumaterialien + // HOLZ + // EISEN + public string BAUMATERIAL; + //Anzahl Kabinen für Passagiere + public int KABINEN; + //Größe des Lagerraums(in Tonnen) + public int LADERAUM; + // Bauzeit -> Wird von Werftklasse benötigt für ermittlung der benötigten Bauzeit + public int LIEFERZEIT; + // Wird bei errichten des Schiffes gesetzt und be jedem Jahr hochgezählt -> Schiffe mit hohem alter haben höhere Wahrscheinlichkeit kaputt zu gehen + public int ALTER; + // Maximal Mögliche Geschwindigkeit (Ohne Abzüge durch äußere Einflüsse) + public int OPTIMALSPEED; + //Altags-Schiffszustände + public int ZUSTAND_GEFLUTET; + public int ZUSTAND_VERMUSCHELT; + public int ZUSTAND_TAKELAGE; + public string angedocktAnHafen; + public DateTime FERTIGSTELLUNGSDATUM; + public bool inBau = false; + public bool inBereitstellung = false; + public bool inReparatur = false; + #endregion + + #region Geldspezifischen Vars + // Neuwert, den Werften für das Bauen des Schiffes oder für ein <1 Jahre altes Schiff verlangen werden + public int NEUWERT; + public int ANZAHLUNGSPREIS; + // Tatsächliche Preis der zuletzt für dieses Schiff bezahlt wurde + public int VERKAUFSWERT; + // Kasse des Schiffs -> Hiervon wird Sold der Crew und geschäfte mit Häfen über das Schiff verrechnet + public int SCHIFFSBUDGET; + // Laufende Kosten durch Crew -> wenn Schiffsbudget nicht groß genug ist für nächste Reise wird crew streiken (Außnahme erste Reise nach Rekrutierung der Crew) + public int BESATZUNGSKOSTEN; + public int RESTBETRAGKAUFPREIS; + public bool bezahlt = false; + #endregion + + #region Ladungsspezifische Vars + // Liste der geladenen Waren + public List LADUNG = new List(); + #endregion + + #region Mannschafts Vars + // Indikator, ob eine Crew vorhanden ist + public bool MANNSCHAFT_VORHANDEN; + public bool MANNSCHAFT_UNTERWEGS; + // Indikator, wie erfahren Crew ist -> Erfahrene Crew erhält weniger Malus auf Reise und nutzt das Schiff nicht so stark ab + public int MANNSCHAFT_ERFAHRUNG; + // Indikator, wie ausgelaugt Crew ist -> Wenn Fittness zu niedrig für nächste Reise, wird Crew streiken (Außnahme erste Reise nach Rektrutierung der Crew)) + public int MANNSCHAFT_VITALITÄT; + // Indikator für Befehlsgewalt des Captains -> Je nach Abstufung wird Schiff schneller befördert oder nicht (schneller = mehr VITALITÄTSVERLUST & mehr Abnutzung) + public string KAPITÄNSORDER; + // Maximale Besatzungsgröße + public int MANNSCHAFT_MAXGRÖßE; + #endregion + + //Standardkonstruktor + public Schiff() + { + + } + + //ParameterKontruktor + public Schiff(string Name, string Typ, int Alter, Spieler Commandeur = null) + { + this.NAME = Name; + + this.ALTER = Alter; + if(ALTER > 0) + { + //Wenn Alter gesetzt ist muss das theoretische Fertigstellungsdatum errechnet werden + FERTIGSTELLUNGSDATUM = Globals.AktuellesDatum-new TimeSpan(ALTER*365,0,0,0); + + } + if (Commandeur != null) + this.COMMANDEUR = Commandeur; + + this.SCHIFFSTYP = Typ; + setzeSchiffsTypParameter(SCHIFFSTYP); + + Globals.registriereEntität(this); + + } + + //Kopierkonstruktor + public Schiff(Schiff KopierSchiff) + { + this.NAME = KopierSchiff.NAME; + this.ALTER = KopierSchiff.ALTER; + if(COMMANDEUR != null) + this.COMMANDEUR = KopierSchiff.COMMANDEUR; + this.angedocktAnHafen = KopierSchiff.angedocktAnHafen; + this.SCHIFFSTYP = KopierSchiff.SCHIFFSTYP; + this.setzeSchiffsTypParameter(SCHIFFSTYP); + this.bezahlt = KopierSchiff.bezahlt; + this.FERTIGSTELLUNGSDATUM = KopierSchiff.FERTIGSTELLUNGSDATUM; + this.inBau = KopierSchiff.inBau; + this.inReparatur = KopierSchiff.inReparatur; + + this.ZUSTAND_GEFLUTET = KopierSchiff.ZUSTAND_GEFLUTET; + this.ZUSTAND_TAKELAGE = KopierSchiff.ZUSTAND_TAKELAGE; + this.ZUSTAND_VERMUSCHELT = KopierSchiff.ZUSTAND_VERMUSCHELT; + + this.SCHIFFSBUDGET = KopierSchiff.SCHIFFSBUDGET; + this.LADUNG = KopierSchiff.LADUNG; + this.BESATZUNGSKOSTEN = KopierSchiff.BESATZUNGSKOSTEN; + + this.MANNSCHAFT_ERFAHRUNG = KopierSchiff.MANNSCHAFT_ERFAHRUNG; + this.MANNSCHAFT_VITALITÄT = KopierSchiff.MANNSCHAFT_VITALITÄT; + this.MANNSCHAFT_VORHANDEN = KopierSchiff.MANNSCHAFT_VORHANDEN; + this.MANNSCHAFT_UNTERWEGS = KopierSchiff.MANNSCHAFT_UNTERWEGS; + this.KAPITÄNSORDER = KopierSchiff.KAPITÄNSORDER; + + } + + public override void Update() + { + base.Update(); + } + + //Verwaltungsmethoden für Budget + public void erhöhenBudget(int Einnahmen) + { + SCHIFFSBUDGET += Einnahmen; + } + + public void vermindernBudget(int Ausgaben) + { + SCHIFFSBUDGET -= Ausgaben; + } + + public void initiereBau(DateTime FertigstellungAm) + { + //Funktion wird bei Bau des Schiffs aufgerufen um alles für den Bau festzusetzen + bezahlt = false; + inBau = true; + FERTIGSTELLUNGSDATUM = FertigstellungAm; + RESTBETRAGKAUFPREIS = NEUWERT - ANZAHLUNGSPREIS; + + } + + public void initiereBereitstellung(DateTime BereitstellungAm) + { + bezahlt = false; + inBereitstellung = true; + FERTIGSTELLUNGSDATUM = BereitstellungAm; + } + + public void initiiereFertigstellung() + { + bezahlt = true; + inBau = false; + inBereitstellung = false; + + } + + public string schiffAbbezahlen(int GeldBetrag) + { + //Funktion wird aufgerufen um restbetrag zu tilgen (Aufrufendes Programm muss vorab abfangen, ob zu zahlender Betrag <= RESTBETRAGDESKAUFPREISES ist) + RESTBETRAGKAUFPREIS -= GeldBetrag; + + if(RESTBETRAGKAUFPREIS > 0) + { + //Teilbetrag wurde getilgt + return "ERFOLG"; + } + else + { + if (RESTBETRAGKAUFPREIS == 0) + { + //Schiff ist abbezahlt und bei erreichen des Datums wird schiff auf Spieler geschrieben + bezahlt = true; + return "ERFOLG_BEZAHLT"; + } + else + { + //Falls man versucht hat mehr als den Restbetrag zu bezahlen + RESTBETRAGKAUFPREIS += GeldBetrag; + return "FEHLER"; + } + } + } + + public void setzeSchiffsTypParameter(string Typ) + { + //Hier werden alle Parameter des Schiffs gemäß seines Typs gesetzt + switch (Typ) + { + case "SCHONER": + KABINEN = 0; + MANNSCHAFT_MAXGRÖßE = 12; + LADERAUM = 300; + LIEFERZEIT = 78; + BAUMATERIAL = "HOLZ"; + NEUWERT = 400000; + ANZAHLUNGSPREIS = 100000; + break; + case "BARK": + KABINEN = 0; + MANNSCHAFT_MAXGRÖßE = 14; + LADERAUM = 450; + LIEFERZEIT = 88; + BAUMATERIAL = "HOLZ"; + NEUWERT = 600000; + ANZAHLUNGSPREIS = 150000; + break; + case "HOLZDAMPFSCHIFF": + KABINEN = 0; + MANNSCHAFT_MAXGRÖßE = 12; + LADERAUM = 399; + LIEFERZEIT = 85; + BAUMATERIAL = "HOLZ"; + NEUWERT = 800000; + ANZAHLUNGSPREIS = 200000; + break; + case "EISENDAMPFSCHIFF": + KABINEN = 30; + MANNSCHAFT_MAXGRÖßE = 19; + LADERAUM = 699; + LIEFERZEIT = 104; + BAUMATERIAL = "EISEN"; + NEUWERT = 1400000; + ANZAHLUNGSPREIS = 350000; + break; + case "BRIGG": + KABINEN = 0; + MANNSCHAFT_MAXGRÖßE = 19; + LADERAUM = 600; + LIEFERZEIT = 97; + BAUMATERIAL = "EISEN"; + NEUWERT = 800000; + ANZAHLUNGSPREIS = 200000; + break; + case "FREGATTE": + KABINEN = 40; + MANNSCHAFT_MAXGRÖßE = 25; + LADERAUM = 999; + LIEFERZEIT = 123; + BAUMATERIAL = "EISEN"; + NEUWERT = 1600000; + ANZAHLUNGSPREIS = 400000; + break; + case "KLIPPER": + KABINEN = 45; + MANNSCHAFT_MAXGRÖßE = 27; + LADERAUM = 1197; + LIEFERZEIT = 135; + BAUMATERIAL = "HOLZ"; + NEUWERT = 1900000; + ANZAHLUNGSPREIS = 475000; + break; + } + } + + //Verwaltungsmethoden für Waren (Überladung, damit man die Verwaltung sowohl mit dem Namen der Ware als auch mit der Ware selbst erledigen kann... jedenfalls beim Auslagern) + public void einlagernLadung(Ware neueWare) + { + // Einlagerung von Waren benötigt immer die effektiv erzeugte Ware + Ware TempWare = new Ware(neueWare); + //Überprüfen, ob dies hinzuzufügende Ware verderblich ist + if (neueWare.istVerderblich()) + { + // Wenn ja, regulär hinzubuchen (verderbliche Ware verfolgt angepasste Logik) + // To Do: Einlagerlogik für verderbliche Ware implementieren + } + else + { + // Wenn Nein neue Ware wird erstellt und der Ladung hinzugefügt oder bei existierender Ware hinzugebucht + bool wareHinzugebucht = false; + foreach (Ware item in LADUNG) + { + if (item.BEZEICHNUNG == neueWare.BEZEICHNUNG) + { + item.MENGE += neueWare.MENGE; + wareHinzugebucht = true; + break; + } + } + if (!wareHinzugebucht) + { + LADUNG.Add(TempWare); + } + + } + + + } + public void löscheLadung(string Ladung, int Menge) + { + + // gegebenenfalls feature im Remake: Löschen der Ladung hat zeitaufwand(Eventuelle Dauer = 1 Tag in dem eventuell ausgeraubt werden kann) + + bool verderblich = false; + + // Vorabcheck ob Ware existiert und ob diese verderblich ist + foreach (Ware item in LADUNG) + { + if (item.BEZEICHNUNG == Ladung) + { + verderblich = item.istVerderblich(); + //Wenn Ware gefunden wurde müssen wir nicht mehr weiter durchsuchen + break; + } + } + + if (verderblich) + { + // Sonderlogik bei verderblicher Ware + // To Do: Implementieren / durchdenken!! + } + else + { + foreach (Ware item in LADUNG) + { + if (item.BEZEICHNUNG == Ladung) + { + // Angefragte Menge Reduzieren + // Wenn nicht mehr genug ware vorhanden ist wird null ausgegeben + if (item.MENGE - Menge < 0) + { + // Wenn auszulagernder Menge unter 0 ist ist ein fehler Passiert ergo nichts tun! + } + else + { + item.MENGE -= Menge; + // Wenn wir mit der Auslagerung das Lager geleert haben wird es aus dem Bestand genommen + if (item.MENGE == 0) + LADUNG.Remove(item); + } + //Wenn Ware gefunden wurde müssen wir nicht mehr weiter durchsuchen + break; + } + } + + } + + } + + + private void sortiereVerderblichListe() + { + //Aufspalten in 2 Listen(Verderbliche/normale Waren) -> am Ende wieder zusammen setzen (normale Waren werden an verderblichen drangehängt [damit die zuerst gelesen werden] + List TempListe = new List(); + List VerderbListe = new List(); + + foreach (Ware item in LADUNG) + { + if (item.istVerderblich()) + { + if (VerderbListe.Count() == 0) + { + VerderbListe.Add(item); + } + else + { + //Wenn Liste nicht leer ist -> Vergleiche MHDs miteinander und vorne/hinten anstellen (immer nur check erstes und letztes element weil rest bereits sortiert wurde + // schnelle sortiercodes gugen (ToDo) + } + + + } + else + { + //Wenn Ware nicht verderblich -> keine besondere Sortierlogik + TempListe.Add(item); + } + + } + } + + public void fahreInHafenEin(string HafenName) + { + angedocktAnHafen = HafenName; + } + + public void fahreAusHafenHeraus() + { + if (angedocktAnHafen != "") + angedocktAnHafen = ""; + } + + public int verkaufsWertBestimmen() + {//Funktion ist vorgesehen für interner Verkaufswert zu bestimmen + // Wird erst eingebaut wenn schiffszustand(Reperaturen) implementiert sind und + // die Berechnung des Verkaufswertes vom schiff übernommen wird statt vom aufrufer + + //Berechnung: (Neuwert/(Alter+1))*(100-Zustand des Schiffs in %) + return 0; + } + + public void besatzungBereitstellen() + { + MANNSCHAFT_UNTERWEGS = true; + } + + public void besatzungEinstellen(string BesatzungsTyp) + { + int PreisProNase = 0; + //Setzen der spezifischen Eigenschaften + switch (BesatzungsTyp) + { + case "SPITZE": + MANNSCHAFT_ERFAHRUNG = 100; + PreisProNase = Globals.MannschaftskostenMin + Globals.ErfahrungsFaktor[0]; + break; + case "ERFAHREN": + MANNSCHAFT_ERFAHRUNG = 90; + PreisProNase = Globals.MannschaftskostenMin + Globals.ErfahrungsFaktor[1]; + break; + case "TÜCHTIG": + MANNSCHAFT_ERFAHRUNG = 80; + PreisProNase = Globals.MannschaftskostenMin + Globals.ErfahrungsFaktor[2]; + break; + case "ZUVERLÄSSIG": + MANNSCHAFT_ERFAHRUNG = 70; + PreisProNase = Globals.MannschaftskostenMin + Globals.ErfahrungsFaktor[3]; + break; + case "STANDARD": + MANNSCHAFT_ERFAHRUNG = 60; + PreisProNase = Globals.MannschaftskostenMin + Globals.ErfahrungsFaktor[4]; + break; + case "FÄHIG": + MANNSCHAFT_ERFAHRUNG = 50; + PreisProNase = Globals.MannschaftskostenMin + Globals.ErfahrungsFaktor[5]; + break; + case "BRAUCHBAR": + MANNSCHAFT_ERFAHRUNG = 40; + PreisProNase = Globals.MannschaftskostenMin + Globals.ErfahrungsFaktor[6]; + break; + case "BILLIG": + MANNSCHAFT_ERFAHRUNG = 30; + PreisProNase = Globals.MannschaftskostenMin + Globals.ErfahrungsFaktor[7]; + break; + case "GRÜNSCHNABEL": + MANNSCHAFT_ERFAHRUNG = 20; + PreisProNase = Globals.MannschaftskostenMin + Globals.ErfahrungsFaktor[8]; + break; + case "IDIOTEN": + MANNSCHAFT_ERFAHRUNG = 10; + PreisProNase = Globals.MannschaftskostenMin + Globals.ErfahrungsFaktor[9]; + break; + } + //Setzen Mannschaftskosten + this.BESATZUNGSKOSTEN = PreisProNase * MANNSCHAFT_MAXGRÖßE; + + //Setzen der allgemeinen Eigenschaften + MANNSCHAFT_VORHANDEN = true; + MANNSCHAFT_UNTERWEGS = false; + MANNSCHAFT_VITALITÄT = 100; + KAPITÄNSORDER = "MITTEL"; + } + } +} diff --git a/1869_Remake/Entities/SchiffsController.cs b/1869_Remake/Entities/SchiffsController.cs new file mode 100644 index 0000000..c59f875 --- /dev/null +++ b/1869_Remake/Entities/SchiffsController.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Otter; +using _1869_Remake; +using _1869_Remake.Scenes; + +namespace _1869_Remake.Entities +{ + public class SchiffsController + { + } +} diff --git a/1869_Remake/Entities/SeeStraße.cs b/1869_Remake/Entities/SeeStraße.cs new file mode 100644 index 0000000..0138ea3 --- /dev/null +++ b/1869_Remake/Entities/SeeStraße.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using _1869_Remake; +using Otter; + +namespace _1869_Remake.Entities +{ + public class SeeStraße : Entity + { + public string BEZEICHNUNG; + + bool toggleTransform = false; + + // Berechnungsvariablen für Vectorrechnung + Vector2 VON_Punkt = new Vector2(); + Vector2 NACH_Punkt = new Vector2(); + Vector2 STRAßENVEKTOR = new Vector2(); + + public int SPEEDMULTIPLIKATOR; + + public SeeStraße() + { + // To Do: Vervollständigen + Vektorquadrat zeichnen lassen von punkt A nach B in einer Farbe + } + + public SeeStraße(string Name, int xPos_VON, int yPos_VON, int xPos_NACH, int yPos_Nach, int speedMultiplikator) + { + this.BEZEICHNUNG = Name; + this.X = xPos_VON; + this.Y = yPos_VON; + + this.VON_Punkt.X = xPos_VON; + this.VON_Punkt.Y = yPos_VON; + + this.NACH_Punkt.X = xPos_NACH; + this.NACH_Punkt.Y = yPos_Nach; + + this.STRAßENVEKTOR = NACH_Punkt - VON_Punkt; + + this.SPEEDMULTIPLIKATOR = speedMultiplikator; + Globals.registriereEntität(this); + + } + + public override void Render() + { + base.Render(); + + // Renderfunktion muss überschrieben werden, da das Zeichnen von Linien auf der Oberfläche extra gerendert werden muss neben den üblichen Grafiken + // sonst würde die Linie nur für einen Frame sichtbar sein (1/30 Sekunden) + if (toggleTransform) + { + + // Linie wird vorbereitet und mit den Koordinaten des Von und Nach Punktes erstellt + Vertices StraßenLinie = new Vertices(); + StraßenLinie.Add(VON_Punkt.X, VON_Punkt.Y); + StraßenLinie.Add(NACH_Punkt.X, NACH_Punkt.Y); + StraßenLinie.Color = Globals.MeeresRoutenRot; + StraßenLinie.Relative = false; + StraßenLinie.PrimitiveType = VertexPrimitiveType.Lines; + + AddGraphic(StraßenLinie); + toggleTransform = false; + } + + + } + + public override void Update() + { + base.Update(); + + if (Globals.PlayerSession.Controller.Button("R").Released) + { + if (!toggleTransform) + { + + toggleTransform = true; + } + } + + } + + public void baueStraßeZuNächstemPunkt() + { + + Console.WriteLine("Transformed"); + } + + } +} diff --git a/1869_Remake/Entities/Spieler.cs b/1869_Remake/Entities/Spieler.cs new file mode 100644 index 0000000..e0fc93e --- /dev/null +++ b/1869_Remake/Entities/Spieler.cs @@ -0,0 +1,184 @@ +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 Spieler : Entity + { + + public String NAME { get; set; } + public String FIRMENNAME { get; set; } + public String GESCHLECHT { get; set; } + public int SPIELERINDEX { get; set; } + + public int GELD_GESAMT { get; set; } + + public List SCHIFFE = new List(); + + public List FILIALEN = new List(); + + public DateTime LetztesGeladenesDatum; + + //Standartkonstruktor + public Spieler() + { + + } + + //Parameter Kontruktor mit Basisdaten + public Spieler(String Name, String FirmenName, String Geschlecht, int SpielerIndex) + { + this.NAME = Name; + this.FIRMENNAME = FirmenName; + this.GESCHLECHT = Geschlecht; + this.LetztesGeladenesDatum = new DateTime(1854, 1, 1); + this.SPIELERINDEX = SpielerIndex; + Globals.registriereEntität(this); + + } + + //Kopierkonstruktor + public Spieler(Spieler KopierSpieler) + { + this.NAME = KopierSpieler.NAME; + this.FIRMENNAME = KopierSpieler.FIRMENNAME; + this.GESCHLECHT = KopierSpieler.GESCHLECHT; + this.GELD_GESAMT = KopierSpieler.GELD_GESAMT; + this.SPIELERINDEX = KopierSpieler.SPIELERINDEX; + + this.FILIALEN = KopierSpieler.FILIALEN; + this.SCHIFFE = KopierSpieler.SCHIFFE; + + } + + public override void Update() + { + base.Update(); + } + + //Geldmanagement Funktionen [Testfunktionen - Im Finalen Spiel muss gesamt geldbetrag aus summe aller Filialen, Krediten und Schiffen gezählt werden + public void erhältGeldBetrag(int GeldSumme) + { + this.GELD_GESAMT += GeldSumme; + } + + public void verliertGeldBetrag(int GeldSumme) + { + this.GELD_GESAMT -= GeldSumme; + } + + //Filialen Management Funktionen + public void gründetFiliale(Hafen HeimatHafen, int startBetrag) + { + Filiale f = new Filiale(HeimatHafen, this, 0); + f.erhöheBudget(startBetrag); + + FILIALEN.Add(f); + + //Hafen updaten + Globals.AlleHäfen[f.HEIMATHAFEN.NAME].filialenAktivität(1, f); + + } + + public void schließtFiliale(Filiale filiale) + { + if (this.FILIALEN.Contains(filiale)) + { + + FILIALEN.Remove(filiale); + Globals.AlleHäfen[filiale.HEIMATHAFEN.NAME].filialenAktivität(0, filiale); + } + } + + //Schiff Management Funktionen + public void erhalteSchiff(string startHafen, int TestIndex) + {//Testprozedur später ersetzen durch Schiffs Kopier funktion + Schiff TempSchiff; + switch (TestIndex) + { + case 1: + TempSchiff = new Schiff("MS.SMSMMS", "TESTSCHIFF", 0, this); + TempSchiff.fahreInHafenEin(startHafen); + TempSchiff.erhöhenBudget(50000); + break; + case 2: + TempSchiff = new Schiff("MS. AQUA", "TESTSCHIFF", 0, this); + TempSchiff.erhöhenBudget(150000); + TempSchiff.fahreInHafenEin(startHafen); + break; + case 3: + TempSchiff = new Schiff("BLACK PEARL", "TESTSCHIFF", 0, this); + TempSchiff.erhöhenBudget(500000); + TempSchiff.fahreInHafenEin(startHafen); + break; + case 4: + TempSchiff = new Schiff("MS. TORPEDO", "TESTSCHIFF", 0, this); + TempSchiff.erhöhenBudget(1500000); + TempSchiff.fahreInHafenEin(startHafen); + break; + default: + TempSchiff = new Schiff("FLYING DUTCHMAN", "TESTSCHIFF", 0, this); + TempSchiff.erhöhenBudget(999999900); + TempSchiff.fahreInHafenEin(startHafen); + break; + } + + TempSchiff.COMMANDEUR = this; + this.SCHIFFE.Add(TempSchiff); + + + } + + public void erhalteSchiff(Schiff KopierSchiff) + { + //Schiff hat neuen Commandeur + Globals.AlleSchiffe[KopierSchiff.NAME].COMMANDEUR = this; + this.SCHIFFE.Add(KopierSchiff); + } + + + public void schiffLoswerden(Schiff ziel, bool anAktuellenHafen = false) + { + if (this.SCHIFFE.Contains(ziel)) + { + SCHIFFE.Remove(ziel); + if (!anAktuellenHafen) + { + // Schiff in einem Hafen steht muss es auch aus den Hafen entfernt werden + if (ziel.angedocktAnHafen != "") + { + Globals.AlleHäfen[ziel.angedocktAnHafen].schiffsAktivität("Ausfahren", ziel); + } + } + + } + } + + + // Hat Spieler eine Filiale in einem bestimmten Hafen + public bool HatFilialeIn(Hafen hafen) + { + foreach (Filiale f in FILIALEN) + { + + if (f.HEIMATHAFEN.NAME == hafen.NAME) + { + return true; + } + + } + return false; + } + + public void spielerDatumAktualisieren(DateTime letztesEventDatum) + { + //Aktualisieren des Datums des Spielers anhand des letzten Events das geladen wurde + this.LetztesGeladenesDatum = letztesEventDatum; + } + } +} diff --git a/1869_Remake/Entities/Ware.cs b/1869_Remake/Entities/Ware.cs new file mode 100644 index 0000000..f93c50b --- /dev/null +++ b/1869_Remake/Entities/Ware.cs @@ -0,0 +1,67 @@ +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 Ware : Entity + { + private static int ID_SequenzNr = 0; + public int ID; + public string BEZEICHNUNG; + public int MENGE; + public int LAGERPREIS; + public string LADEMITTEL; + bool VERDERBLICH = false; + public int MINDESTHALTBAR_BIS = 0; + + //Standartkonstruktor + public Ware() + { + + } + + //Parameterkontruktor (Preis ist in Cent muss noch unterteilt werden in EURO und Cent -> Keine Berechnung von Float werten da noch abfragen auf Preise in Funktionen möglich sind) + public Ware(string Name,int lagerPreis, int EinkaufsMenge, int HaltbarkeitTage, string Lademittel) + { + this.ID = ID_SequenzNr++; + this.BEZEICHNUNG = Name; + this.LAGERPREIS = lagerPreis; + this.MENGE = EinkaufsMenge; + this.LADEMITTEL = Lademittel; + if(HaltbarkeitTage != 0) + { + this.VERDERBLICH = true; + this.MINDESTHALTBAR_BIS = HaltbarkeitTage; + } + else + { + this.VERDERBLICH = false; + this.MINDESTHALTBAR_BIS = 0; + } + + Globals.registriereEntität(this); + } + + //Kopierkonstruktor + public Ware(Ware KopierWare) + { + this.BEZEICHNUNG = KopierWare.BEZEICHNUNG; + this.MENGE = KopierWare.MENGE; + this.LAGERPREIS = KopierWare.LAGERPREIS; + this.LADEMITTEL = KopierWare.LADEMITTEL; + this.VERDERBLICH = KopierWare.VERDERBLICH; + this.MINDESTHALTBAR_BIS = KopierWare.MINDESTHALTBAR_BIS; + + } + + public bool istVerderblich() + { + return VERDERBLICH; + } + } +} diff --git a/1869_Remake/Entities/WeltEvent.cs b/1869_Remake/Entities/WeltEvent.cs new file mode 100644 index 0000000..9dc58cb --- /dev/null +++ b/1869_Remake/Entities/WeltEvent.cs @@ -0,0 +1,129 @@ +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 WeltEvent + { + // EventID um event eindeutig zu Kennzeichnen (Damit nicht 2mal das selbe event in der Queue steht) + //public int EventId { get; set; } + + //Zeitvariablen, wann erfolgt das Ereignis + + public DateTime EventDate { get; set; } + + //Parameter des Events + // Betroffener Spieler (In Check-Reihenfolge) + // - System + // - Spieler1 + // - Spieler2 + // - Spieler3 + // - Spieler4 + public string BetroffenerSpielerName { get; set; } + public Spieler BetroffenerSpieler { get; set; } + public string BetreffenderFilialName { get; set; } + public Filiale BetroffeneFiliale { get; set; } + public string BetreffenderSchiffsName { get; set; } + public Schiff BetroffenesSchiff { get; set; } + + // Allgemeine Parameterlisten mit genaueren Infos zur Handlung + public List ZahlenParams { get; set; } + public List StringParams { get; set; } + + //Hier wird gespeichert, was mit den betroffenen Daten gemacht wird (Beispiel: FILIALE_VERRINGERN_GELD oder SPIELER_KREDIT_ZAHLTAG oder SCHIFF_REPERATUR_ABGESCHLOSSEN, etc) + //Verarbeitung erfolg über ZeitRad + /* Folgende Typen existieren: + * START -> Spielstart + * ENDE -> Spielende + * SCHIFFSREISE-ENDE + * SCHIFFSREISE-ÜBERFALL -> Jede Art von "Zwischenfall mit dem Schiff" (Überfall, Kanonade, Sturm etc) + * SCHIFFSREPARATUR-ENDE -> Reparatur ist abgeschlossen + * SCHIFFSBAU-ENDE -> Schiffsbau ist abgeschlossen + * POLITIKWECHSEL -> Politischer Zustand wechselt sich + * MONATSBEGIN -> Monatsbegin (wird verwendet zum triggern von Nachfülllogiken + */ + public string EventHandlung { get; set; } + public int GeldBetrag { get; set; } + + public WeltEvent() + { + + } + + ~WeltEvent() + { + //Objekt Test + //Console.WriteLine("WeltEvent wurde gelöscht ID: " + this.EventId); + } + + public WeltEvent(DateTime EventZeitpunkt, String Handlung, Spieler ZielSpieler = null, Filiale ZielFiliale = null, Schiff ZielSchiff = null, Hafen ZielHafen = null, int EventBetrag = 0, List ZahlenParameter = null, List TextParameter = null) + { + this.EventDate = new DateTime(EventZeitpunkt.Year, EventZeitpunkt.Month, EventZeitpunkt.Day); + + // Temporärer Key der im Anschluss um hochgezählte ID erweitert wird + //this.EventId = Jahr * 1000000 + Monat * 10000 + Tag * 100; + + //Testausgabe + //Console.WriteLine("Event wurde erstellt ID: "+ EventId); + + this.EventHandlung = Handlung; + if (ZielSpieler != null) + { + for(int spielerIndex = 0;spielerIndex < Globals.SpielerListe.Count();spielerIndex++) + { + if(Globals.SpielerListe[spielerIndex].NAME == ZielSpieler.NAME) + { + this.BetroffenerSpielerName = "Spieler" + (spielerIndex + 1).ToString(); + this.BetroffenerSpieler = ZielSpieler; + } + + } + + } + else + { + this.BetroffenerSpielerName = "System"; + } + if (ZielFiliale != null) + { + this.BetreffenderFilialName = ZielFiliale.HEIMATHAFEN.NAME; + this.BetroffeneFiliale = ZielFiliale; + } + + if (ZielSchiff != null) + { + this.BetreffenderSchiffsName = ZielSchiff.NAME; + this.BetroffenesSchiff = ZielSchiff; + } + + this.GeldBetrag = EventBetrag; + this.ZahlenParams = ZahlenParameter; + this.StringParams = TextParameter; + } + + public WeltEvent(WeltEvent KopieEvent) + { + //this.EventId = KopieEvent.EventId; + this.EventDate = KopieEvent.EventDate; + this.EventHandlung = KopieEvent.EventHandlung; + this.BetroffenerSpielerName = KopieEvent.BetroffenerSpielerName; + this.BetroffenerSpieler = KopieEvent.BetroffenerSpieler; + this.BetreffenderFilialName = KopieEvent.BetreffenderFilialName; + this.BetroffeneFiliale = KopieEvent.BetroffeneFiliale; + this.BetreffenderSchiffsName = KopieEvent.BetreffenderSchiffsName; + this.BetroffenesSchiff = KopieEvent.BetroffenesSchiff; + this.GeldBetrag = KopieEvent.GeldBetrag; + this.ZahlenParams = KopieEvent.ZahlenParams; + this.StringParams = KopieEvent.StringParams; + + //Testausgabe + //Console.WriteLine("Event Kopiert ID: "+EventId); + } + + } +} diff --git a/1869_Remake/Entities/ZeitRad.cs b/1869_Remake/Entities/ZeitRad.cs new file mode 100644 index 0000000..20d887d --- /dev/null +++ b/1869_Remake/Entities/ZeitRad.cs @@ -0,0 +1,706 @@ +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!"); + } + } +} diff --git a/1869_Remake/Globals.cs b/1869_Remake/Globals.cs new file mode 100644 index 0000000..69c901e --- /dev/null +++ b/1869_Remake/Globals.cs @@ -0,0 +1,420 @@ +using System; +using System.Collections.Generic; + +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Otter; +using _1869_Remake.Entities; + +namespace _1869_Remake +{ + public class Globals + { + public static Game Remake = null; + + //Spielersteuerung + public static Session PlayerSession; + public static List SpielerListe = new List(); + + //Dictionary aller Spieler und Ihrer zugehörigen Kredite ( Wenn int Betrag nicht = 0, dann Kredit offen und kein neuer Kredit nehmbar) + public static Dictionary KreditListe = new Dictionary(); + + //Deklarierung der Häfen -> Vordefiniert (Kann im Remake gegebenenfalls erweitert werden -> Nur mit intensiven Recherchen zum Handel + //bezüglich dieses neuen Welthafens zu dieser Zeit + public static Dictionary AlleHäfen = new Dictionary(); + + //Dictianry aller existierenden Schiffe + public static Dictionary AlleSchiffe = new Dictionary(); + + //Deklarieren der Meeresknotenpunkte und Meeresstraßen + //To Do: Einbauen was global an Knoten und Straßen bekannt sein Soll + public static Dictionary AlleMeeresKnoten = new Dictionary(); + public static Dictionary AlleSeeStraßen = new Dictionary(); + + //Deklarierung der Waren-> Vordefiniert (Kann im Remake gegebenenfalls erweitert werden -> Nur mit intensiven Recherchen zum Handel + //bezüglich dieses neuen Produkts zu dieser Zeit + public static List WarenListe = new List(); + + //Deklarieren der Möglichen Schiffstypen + public static List AlleSchiffsTypen; + public static List AlleWarenTypen; + //Eingestellte MaximaleSpieldauer + public static int Spieldauer; + public static bool SpielEnde; + + //Anzahl Spieler 1-4 [Vorerst nur einer implementiert] + public static int AnzahlSpieler; + public static Spieler AktuellerSpieler; + + //Aktuelle Spielzeit (Ingame Datum) + public static int AktuellerTag_Z; + public static int AktuellerTag_E; + public static int AktuellerMonat; + public static int AktuellesJahr_T; + public static int AktuellesJahr_H; + public static int AktuellesJahr_Z; + public static int AktuellesJahr_E; + public static DateTime AktuellesDatum; + + /*Mannschaftskosten Konstanten*/ + //Kosten je Mann der unerfahrensten Stufe pro Monat + public static int MannschaftskostenMin = 400; + //Array der Preissteigerung je Erfahrungsstufe + public static int[] ErfahrungsFaktor = new int[] + { + //EF wird zum regulären 1-Mann Wert hinzuaddiert und mal anzahl der Maxgröße gerechnet + //im Schema 0,2->0,2->0,2->0,4->0,4->0,9->0,8->2,0->2,8->2,7->5,5->... + 810, + 530, + 330, + 250, + 140, + 100, + 60, + 40, + 20, + 0 + + }; + + //Zeitrad Verwaltet alle Events und triggert alle Handlungen für die jeweiligen Objekte + public static List EventListe = new List(); + + public static Queue> NächsterHaltepunktInZeitLeiste = new Queue>(); + + //Spielmodus + // 1 = Original + // 2 = Remake + public static int SpielModus; + + //Geladener Weltkartenteil + public static string weltKarte; + + // Tracking-Felder + public static string LetzteSzene; + public static string aktuelleSzene; + + public static Dictionary PreisListe_UnerwünschteWare = new Dictionary(); + + // UI-Elemente (Farben,Formen etc) + public static Color StdGrün = new Color("137747"); + public static Color HighLightMagenta = new Color("ba275f"); + public static Color SprachRot = new Color("ba2727"); + public static Color StatGrün = new Color("234343"); + public static Color OptionGrau = new Color("6b6b6b"); + public static Color TafelGrau = new Color("a7a7a7"); + public static Color ConfigGrau = new Color("636383"); + public static Color AnzeigeBraun = new Color("836323"); + public static Color MeeresRoutenGrau = new Color("c3c3c3"); + public static Color MeeresRoutenGrün = new Color("aad0a6"); + public static Color MeeresRoutenGelb = new Color("d0d982"); + public static Color MeeresRoutenRot = new Color("d98282"); + + public static bool DisplaySubElementAktiv = false; + + #region Texte + //Angezeigte Textpassagen eventuell in eine CSV umpflanzen und dort mit allen restlichen Sammeln zum schnellen Aufrufen + + /*ConfigBildschirm*/ + //SpielModus + public static Text CONFIGTEXT0 = new Text("WELCHE VERSION MÖCHTEN SIE SPIELEN?", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT0_1 = new Text("Original Amiga \"O\"", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT0_2 = new Text("Modernere Remake \"R\"", Assets.FONT_AMIGA4EVER2, 10); + + + public static Text CONFIGTEXT1 = new Text("EIN ALTES SPIEL LADEN \"J\" SONST DIE LEERTASTE.", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT2 = new Text("WIE VIELE SPIELER 1-4", Assets.FONT_AMIGA4EVER2, 10); + + //Für jeden Spieler ein Text + public static Text CONFIGTEXT3_A = new Text("DEN NAMEN DES 1 SPIELERS EINGEBEN.", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT3_B = new Text("DEN NAMEN DES 2 SPIELERS EINGEBEN.", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT3_C = new Text("DEN NAMEN DES 3 SPIELERS EINGEBEN.", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT3_D = new Text("DEN NAMEN DES 4 SPIELERS EINGEBEN.", Assets.FONT_AMIGA4EVER2, 10); + + public static Text CONFIGTEXT4 = new Text("\"M\" - MÄNNLICH ODER \"W\" - WEIBLICH", Assets.FONT_AMIGA4EVER2, 10); + + //Firmennamen für jeden Spieler + public static Text CONFIGTEXT5_A = new Text("WIE SOLL DIE FIRMA DES 1 SPIELERS HEISSEN", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT5_B = new Text("WIE SOLL DIE FIRMA DES 2 SPIELERS HEISSEN", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT5_C = new Text("WIE SOLL DIE FIRMA DES 3 SPIELERS HEISSEN", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT5_D = new Text("WIE SOLL DIE FIRMA DES 4 SPIELERS HEISSEN", Assets.FONT_AMIGA4EVER2, 10); + + //Starthafen + public static Text CONFIGTEXT6_A = new Text("IN WELCHEM HAFEN WOLLEN SIE STARTEN?", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT6_B = new Text("\"1\" LIVERPOOL KÖNIGREICH ENGLAND", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT6_C = new Text("\"2\" LONDON KÖNIGREICH ENGLAND", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT6_D = new Text("\"3\" LES HAVRES KÖNIGREICH FRANKREICH", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT6_E = new Text("\"4\" NEW YORK VEREINIGTE STAATEN", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT6_F = new Text("\"5\" SAVANNAH VEREINIGTE STAATEN", Assets.FONT_AMIGA4EVER2, 10); + + // Bestätigungsscreen + public static Text CONFIGTEXT7 = new Text("SIND DIESE EINSTELLUNGEN RICHTIG? \"J\" ODER \"N\" ", Assets.FONT_AMIGA4EVER2, 10); + + + // Spieldauer + public static Text CONFIGTEXT8_A = new Text("WIE LANGE WOLLEN SIE SPIELEN?", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT8_B = new Text(" A - 5 Jahre", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT8_C = new Text(" B - 10 Jahre", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT8_D = new Text(" C - 15 Jahre", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT8_E = new Text(" D - 20 Jahre", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT8_F = new Text(" E - 26 Jahre", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT8_G = new Text("", Assets.FONT_AMIGA4EVER2, 10); + public static Text CONFIGTEXT8_H = new Text(" F - 5 Jahre \"EINSTEIGER SPIEL\"", Assets.FONT_AMIGA4EVER2, 10); + + /*BankBildschirm*/ + // Hauptbildschirm + public static Text BANKTEXT1_A = new Text("ICH BRAUCHE EINEN KREDIT.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BANKTEXT1_B = new Text("ICH MÖCHTE MEINEN KREDIT ABBEZAHLEN.", Assets.FONT_AMIGA4EVER2, 8); + + // Kredit nehmen Screen + public static Text BANKTEXT11_A = new Text("... ICH BRAUCHE $ #,# .", Assets.FONT_AMIGA4EVER2, 8); + public static Text BANKTEXT11_B = new Text("OK, ICH NEHME DEN KREDIT.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BANKTEXT11_D = new Text("ICH HABE ES MIR ANDERS ÜBERLEGT.", Assets.FONT_AMIGA4EVER2, 8); + + // Kredit bezahlen Screen + public static Text BANKTEXT12_A = new Text("...ICH ZAHLE $#,# ZURÜCK.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BANKTEXT12_B = new Text("OK, HIER IST DAS GELD.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BANKTEXT12_D = new Text("NEIN, ICH BRAUCHE DAS GELD NOCH.", Assets.FONT_AMIGA4EVER2, 8); + + /*BankBildschirm*/ + public static Text TEXT_BEENDEN = new Text("BEENDEN", Assets.FONT_AMIGA4EVER2, 8); + + /*AllroundTexte*/ + public static Text BEGRÜßUNG_DECOY = new Text("WILLKOMMEN, WIE KANN ICH HELFEN?", Assets.FONT_AMIGA4EVER2, 8); + public static Text TEXT_WEITER = new Text("WEITER", Assets.FONT_AMIGA4EVER2, 8); + public static Text TEXT_ENDE = new Text("ENDE", Assets.FONT_AMIGA4EVER2, 8); + public static Text TEXT_ABSCHIED = new Text("AUF WIEDERSEHEN, DANKE.", Assets.FONT_AMIGA4EVER2, 8); + public static Text TEXT_ABBRUCH = new Text("NEIN DANKE, ICH HABE ES MIR ÜBERLEGT.", Assets.FONT_AMIGA4EVER2, 8); + public static Text TEXT_ABBRUCH2 = new Text("ICH HABE ES MIR ANDERS ÜBERLEGT.", Assets.FONT_AMIGA4EVER2, 8); + // 1. # = Artikel + Geldquelle + verfügt oder verfüge ich, 2. # = volle Dollar, 3.# = Cent + public static Text BUDGETTEXT = new Text("# ÜBER $ #,# .", Assets.FONT_AMIGA4EVER2, 8); + public static Text BUDGETREICHTNICHT = new Text("ICH FÜRCHTE, FÜR MEHR REICHT IHR KAPITAL NICHT...", Assets.FONT_AMIGA4EVER2, 8); + public static Text ZAHLMENGE = new Text("ICH ZAHLE $ #,#", Assets.FONT_AMIGA4EVER2, 8); + public static Text ZAHLENFÜR = new Text("OK, ICH ZAHLE FÜR DIE \"#\"", Assets.FONT_AMIGA4EVER2, 8); + public static Text KOSTEN = new Text("DAS WÜRDE SIE $ #,# KOSTEN", Assets.FONT_AMIGA4EVER2, 8); + public static Text KEINEKOSTEN = new Text("FÜR NICHTS KANN ICH SCHLECHT ETWAS VERLANGEN", Assets.FONT_AMIGA4EVER2, 8); + public static Text RESTBETRAG = new Text("ES SIND NOCH $#,# ZU BEZAHLEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text KEINRESTBETRAG = new Text("DIE # IST BEREITS ABBEZAHLT.", Assets.FONT_AMIGA4EVER2, 8); + public static Text KEINZAHLBETRAG = new Text("MIT EINEM HÄNDEDRUCK ZAHLT SICH DAS SCHIFF LEIDER NICHT SCHNELLER AB.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BESTENDANK = new Text("BESTEN DANK", Assets.FONT_AMIGA4EVER2, 8); + public static Text DANKEZUFRIEDEN = new Text("ICH HOFFE SIE SIND MIT UNS ZUFRIEDEN.", Assets.FONT_AMIGA4EVER2, 8); + + // Demotexte (Werden entfernt in Vollversion) + public static Text DEMOTEXT_KEINEREPARATUR = new Text("UNSER TROCKENDOCK IST AKTUELL NICHT IN BETRIEB(DEMO)", Assets.FONT_AMIGA4EVER2, 8); + + /*Werftbildschirm*/ + public static Text WERFT_HELFEN = new Text("WIE KANN ICH IHNEN HELFEN?", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_REPERATUR = new Text("MEIN SCHIFF MÜSSTE REPARIERT WERDEN!", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_SCHIFFBAUEN = new Text("WELCHE SCHIFFE BAUEN SIE?", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_SCHIFFGEBRAUCHT = new Text("ICH SUCHE EIN GEBRAUCHTES SCHIFF!", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_SCHIFFVERKAUFEN = new Text("ICH MÖCHTE IHNEN EIN SCHIFF VERKAUFEN!", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_SCHIFFBEZAHLEN = new Text("ICH MÖCHTE MEIN SCHIFF BEZAHLEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WELCHESSCHIFF = new Text("WELCHES IHRER SCHIFFE?", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_REPARATUR_MUSCHELN = new Text("DEN MUSCHELBEWUCHS ENTFERNEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_REPARATUR_RUMPF = new Text("DEN RUMPF ABDICHTEN UND STREICHEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_REPARATUR_ABSCHIED = new Text("AUF WIEDERSEHEN, DANKE.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_REPARATUR_ANTRIEB = new Text("DIE TAKELAGE ODER DAMPFMASCHINE REPARIEREN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_REPARATUR_ALLES = new Text("DAS SCHIFF GENERALÜBERHOLEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAUEN_NÄCHSTES_SCHIFF = new Text("ZEIGEN SIE MIR DAS NÄCHSTE MODEL.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAUEN_LETZTES_SCHIFF = new Text("KÖNNEN ICH DAS LETZTE MODEL NOCHMAL SEHEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAUEN_BESTÄTIGEN = new Text("OK, BAUEN SIE MIR DIESES SCHIFF.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAUEN_ABBRUCH = new Text("ICH HABE ES MIR ANDERS ÜBERLEGT.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAUEN_BESTÄTIGUNG_PREIS = new Text("WIE HOCH IST DIE ANZAHLUNG?", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAUEN_BESTÄTIGUNG_BESTELLUNG = new Text("OK BAUEN SIE DAS SCHIFF.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAUEN_BESTÄTIGUNG_GELDQUELLE = new Text("# ÜBER $ #,# .", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAUEN_BESTÄTIGUNG_ABBRUCH = new Text("ICH HABE ES MIR ANDERS ÜBERLEGT.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAUEN_NAME_HINWEIS1 = new Text("BITTE WÄHLE EINEN SCHIFFS NAMEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAUEN_NAME_HINWEIS2 = new Text("WÄHLE KEINEN NAMEN, DEN EINES", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAUEN_NAME_HINWEIS3 = new Text("DEINER SCHIFFE BEREITS TRÄGT.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAUEN_ANZAHLUNG1 = new Text("WENN SIE $#,# ANZAHLEN", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAUEN_ANZAHLUNG2 = new Text("KÖNNEN WIR MIT DEM BAU BEGINNEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAUEN_ABSCHLUSS1 = new Text("DAS SCHIFF WIRD IN CA. # # GELIEFERT.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAUEN_ABSCHLUSS2 = new Text("NOCHMALS VIELEN DANK FÜR DEN AUFTRAG.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAUEN_GELDMANGEL = new Text("LEIDER REICHT DAS BUDGET DIESES KONTOS NICHT AUS.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_GEBRAUCHT_NÄCHSTES_SCHIFF = new Text("HABEN SIE NOCH ANDERE GEBRAUCHTE?", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_GEBRAUCHT_BESTÄTIGEN = new Text("OK, ICH NEHME DEN KAHN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BEZAHLEN_KEINESCHULDEN = new Text("SIE HABEN KEINE SCHULDEN BEI UNS!", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_GEBRAUCHT_KEINESCHIFFE = new Text("WIR HABEN ZUR ZEIT KEINE GEBRAUCHTEN SCHIFFE!", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAU_KEINPLATZ1 = new Text("TUT UNS LEID.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BAU_KEINPLATZ2 = new Text("WIR KÖNNEN MOMENTAN KEINE WEITEREN AUFTRÄGE ÜBERNEHMEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_VERKAUF_WELCHESSCHIFF = new Text("WELCHES IHRER SCHIFFE?", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_VERKAUF_KEINESCHIFF1 = new Text("SIE BESITZEN KEINE SCHIFFE IN DIESEM HAFEN", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_VERKAUF_KEINESCHIFF2 = new Text("DIE SIE UNS ANBIETEN KÖNNTEN!", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_VERKAUF_PREIS = new Text("WIE VIEL GEBEN SIE MIR FÜR DIESES SCHÖNE SCHIFF?", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_VERKAUF_BESTÄTIGUNG = new Text("OK ICH VERKAUFE ES IHNEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_VERKAUF_ANGEBOT = new Text("FÜR DIE # ZAHLE ICH IHNEN $#,#.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_VERKAUF_ABSCHLUSS = new Text("WIR HABEN DIE $#.# IN DIE # EINGEZAHLT.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BEZAHLEN_ALLEBEZAHLT = new Text("ALLE IHRE SCHIFFE SIND BEZAHLT.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BEZAHLEN_XBEZAHLT = new Text("DIE # IST BEREITS BEZAHLT.", Assets.FONT_AMIGA4EVER2, 8); + public static Text WERFT_BEZAHLEN_KEINESCHIFFE = new Text("SIE HABEN BEI UNS KEINE SCHULDEN.", Assets.FONT_AMIGA4EVER2, 8); + + + /*Handelsbildschirm*/ + public static Text HANDEL_HELFEN = new Text("WIE KANN ICH IHNEN HELFEN?", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_WÄHLEN = new Text("BITTE WÄHLEN SIE!", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_WÄHLEN_ZIEL = new Text("WOHIN SOLLEN WIR DIE WAREN DANN GEBEN?", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_KAUFEN = new Text("WELCHE WAREN KÖNNEN SIE ANBIETEN?", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_VERKAUFEN = new Text("ICH MÖCHTE IHNEN ETWAS VERKAUFEN!", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_ANGEBOT = new Text("WIR BIETEN AN:", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_NACHFRAGE = new Text("WIR KAUFEN?", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_AUSVERKAUFT = new Text("LEIDER SIND WIR MOMENTAN TOTAL AUSVERKAUFT!", Assets.FONT_AMIGA4EVER2, 8); + // 1. # Menge der Ware, 2. # Lademittel, 3. # Warenbezeichnung + public static Text HANDEL_RESTPOSTEN = new Text("LEIDER HABE ICH NUR # # # LAGERND.", Assets.FONT_AMIGA4EVER2, 8); + // 1. # Menge der Ware, 2. # Lademittel, 3. # Preis in DOLLAR, 4.# Preis in CENT + public static Text HANDEL_RESTPOSTEN2 = new Text("ABER FÜR DIE # # VERLANGE ICH $ #,#", Assets.FONT_AMIGA4EVER2, 8); + // 1. # = Menge, 2. # = Lademittel, 3. # = Ware + public static Text HANDEL_PREIS_PRO_MENGE_EINKAUF = new Text("WIE VIEL KOSTEN MICH # # # ?", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_PREIS_PRO_MENGE_VERKAUF = new Text("WIE VIEL ZAHLEN SIE FÜR # # # ?", Assets.FONT_AMIGA4EVER2, 8); + // # = (a. IN MEIN LAGER) oder (b. AUF DIE ) + public static Text HANDEL_ABSCHLUSS_EINKAUF = new Text("OK, GEBEN SIE ES #", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_ABSCHLUSS_VERKAUF = new Text("OK, ICH VERKAUFE DIE WARE.", Assets.FONT_AMIGA4EVER2, 8); + // 1. # = Warenbezeichnung, 2. # = Preis Dollar, 3. # = Preis Cent, 4. # = Lademittel + public static Text HANDEL_ERLÄUTERUNG1 = new Text("# ERHALTEN SIE FÜR $ #,# je # !", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_ERLÄUTERUNG2 = new Text("DIE # # KOSTEN SIE DAHER $ #,#", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_ABBRUCH_QUELLLAGER = new Text("EINEN ANDEREN QUELL-LAGERORT WÄHLEN", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_VERKAUF_AUS_LAGER = new Text("ICH VERKAUFE WARE AUS DEM LAGER", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_WARENLOS = new Text("SIE VERFÜGEN ÜBER KEINE WAREN IN DIESEM HAFEN!", Assets.FONT_AMIGA4EVER2, 8); + // 1. # = Zielname(Ihr Lager || Die ), 2. # = Lademittel + public static Text HANDEL_GELDLOS = new Text("# VERFÜGT NICHT ", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_GELDLOS2 = new Text("ÜBER GENÜGEND GELD FÜR MINDESTENS 1 #", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_GELDLOS3 = new Text("BITTE WÄHLEN SIE EINE ANDERE GELDQUELLE!", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_VERKAUFSQUELLE = new Text("WOHER WOLLEN SIE IHRE WAREN VERKAUFEN?", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_WARENWAHL = new Text("WELCHE WAREN # WOLLEN SIE MIR ANBIETEN?", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_WARENQUELLE_WECHSEL = new Text("EINE ANDERE WARENQUELLE WÄHLEN", Assets.FONT_AMIGA4EVER2, 8); + + /*Ortsspezifische Texte*/ + public static Text HANDEL_BEGRÜßUNG_LIVERPOOL = new Text("WILLKOMMEN IN LIVERPOOL", Assets.FONT_AMIGA4EVER2, 8); + public static Text HANDEL_BEGRÜßUNG_LONDON = new Text("HALLO SIR, WILLKOMMEN IN LIVERPOOL", Assets.FONT_AMIGA4EVER2, 8); + + /*BarTexte*/ + public static Text BAR_SUCHEMANNSCHAFT = new Text("ICH SUCHE EINE MANNSCHAFT.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_KOSTENFILIALE = new Text("WIE VIEL KOSTET MICH EINE FILIALE?", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_FILIALEVORHANDEN = new Text("WAS SOLL DAS, SIE HABEN DOCH EINE FILIALE HIER!", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_ABSCHIED = new Text("BIS ZUM NÄCHSTEN MAL, JUNGS.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_GELDTRANSFER = new Text("ICH GEBE GELD AUF EIN ANDERES SCHIFF.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_KEINE2SCHIFFE = new Text("DU HAST KEINE 2 SCHIFFE IM HAFEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_HINWEISE = new Text("FÜR EIN PAAR TIPS, GEBE ICH EINE RUNDE AUS, JUNGS.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_KEINESCHIFFE = new Text("DU HAST DOCH KEINE SCHIFFE IM HAFEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_WELCHESSCHIFF = new Text("FÜR WELCHES SCHIFF?", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_GUTESSCHIFF = new Text("WIRKLICH EIN SCHÖNES SCHIFF, DIE #.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_MANNSCHAFTSWAHL_BESTÄTIGUNG = new Text("OK, BESORG MIR DIE LEUTE.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_MANNSCHAFTSWAHL_BESCHREIBUNG1 = new Text("ICH SUCHE # SPITZENLEUTE FÜR DIE #.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_MANNSCHAFTSWAHL_BESCHREIBUNG2 = new Text("ICH BRAUCHE # WIRKLICH ERFAHRENE SEELEUTE.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_MANNSCHAFTSWAHL_BESCHREIBUNG3 = new Text("ICH SUCHE # LEUTE, DIE RICHTIG ZUPACKEN KÖNNEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_MANNSCHAFTSWAHL_BESCHREIBUNG4 = new Text("WAS KOSTEN # ZUVERLÄSSIGE LEUTE.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_MANNSCHAFTSWAHL_BESCHREIBUNG5 = new Text("FÜR DIE # SUCHE ICH # LEUTE.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_MANNSCHAFTSWAHL_BESCHREIBUNG6 = new Text("SUCH MIR # FÄHIGE LEUTE, DIE KEIN VERMÖGEM KOSTEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_MANNSCHAFTSWAHL_BESCHREIBUNG7 = new Text("ICH SUCHE # BRAUCHBARE LEUTE FÜR DIE #.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_MANNSCHAFTSWAHL_BESCHREIBUNG8 = new Text("ICH BRAUCHE # GUTE ABER MÖGLICHST BILLIGE LEUTE.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_MANNSCHAFTSWAHL_BESCHREIBUNG9 = new Text("ICH SUCHE # GRÜNSCHNÄBEL, DIE FAST UMSONST ARBEITEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_MANNSCHAFTSWAHL_BESCHREIBUNG10 = new Text("FANG MIR # MÖGLICHST BILLIGE IDIOTEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_ABBRUCH = new Text("WENN DU MEINST.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_MANNSCHAFTSWAHL_PREIS = new Text("DIE # MANN WÜRDEN DICH IM MONAT $#,# KOSTEN.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_MANNSCHAFTSWAHL_WELCHELEUTE = new Text("MICH WÜRDE INTERESSIEREN, WAS FÜR LEUTE DU SUCHST..??", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_MANNSCHAFTWAHL_ANHEUERN = new Text("OK DIE JUNGS MELDEN SICH IN # TAGEN AUF DER \"#\"", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_MANNSCHAFTWAHL_GENUGLEUTE = new Text("IN DIESEM HAFEN HAST DU DOCH AUF JEDEM SCHIFF GENUG LEUTE!", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_GELDTRANSFER_ZIEL = new Text("DAS GELD IST FÜR #.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_GELDTRANSFER_BETRAG = new Text("ICH BRAUCHE $#,#.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_GELDTRANSFER_BESTÄTIGUNG = new Text("OK, DAS GELD KOMMT #.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_HINWEIS_KEIN1 = new Text("ES GIBT WIRKLICH NIX NEUES HEUTE...", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_HINWEIS_KEIN2 = new Text("...ABER TROTZDEM DANKE FÜR DIE RUNDE BIER.", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_HINWEIS_KEINGELD1 = new Text("DAS SIND DIE RICHTIGEN, KEIN GELD IN DER TASCHE...", Assets.FONT_AMIGA4EVER2, 8); + public static Text BAR_HINWEIS_KEINGELD2 = new Text("...ABER GROßE SPRÜCHE KLOPFEN.", Assets.FONT_AMIGA4EVER2, 8); + #endregion + + public static void registriereEntität(Spieler SP) + { + SpielerListe.Add(SP); + } + + public static void registriereEntität(Schiff SCHIFF) + { + AlleSchiffe.Add(SCHIFF.NAME, SCHIFF); + } + + public static void registriereEntität(Hafen H) + { + AlleHäfen.Add(H.NAME, H); + } + + public static void registriereEntität(SeeStraße SST) + { + AlleSeeStraßen.Add(SST.BEZEICHNUNG, SST); + } + + public static void registriereEntität(MeeresKnotenpunkt MKP) + { + AlleMeeresKnoten.Add(MKP.ORT, MKP); + } + + public static void registriereEntität(Ware W) + { + WarenListe.Add(W.BEZEICHNUNG); + } + + public static void registriereSchiffsTyp(Schiff s) + { + AlleSchiffsTypen.Add(s); + } + + public static void registriereWarenTyp(string w) + { + AlleWarenTypen.Add(w); + } + + public static void EventAktion(WeltEvent ev, string Aktion) + { + switch (Aktion) + { + case "EINFÜGEN": + // Einfügen eines Events in die SortedList aller Events + WeltEvent TempEvent = new WeltEvent(ev); + EventListe.Add(TempEvent); + break; + case "ENTFERNEN": + EventListe.Remove(ev); + break; + default: + //Fehler + Console.WriteLine("Fehler: Eventaktion ist unbekannt!"); + break; + } + + + } + + public static void kreditAktionen(Spieler Schuldner, int Betrag, string Aktion) + { + switch (Aktion) + { + case "REGISTRIEREN": + KreditListe.Add(Schuldner, Betrag); + break; + case "ERHÖHEN": + KreditListe[Schuldner] += Betrag; + break; + case "VERMINDERN": + //Hinweis absicherung gegen Mehrbezahlen findet auf der Bezahlseite statt -> Entität das abbezahlen will muss zuerst berechnen wie viel noch zu bezahlen ist und den user nicht mehr bezahlen lassen. + KreditListe[Schuldner] -= Betrag; + break; + case "LÖSCHEN": + if (KreditListe[Schuldner] > 0) + { + //Fehler + Console.WriteLine("Fehler: Kredit ist noch nicht abbezahlt!"); + } + else + { + KreditListe.Remove(Schuldner); + } + + break; + default: + //Fehler + Console.WriteLine("Fehler Kreditaktion ist unbekannt"); + break; + } + } + } +} diff --git a/1869_Remake/Program.cs b/1869_Remake/Program.cs new file mode 100644 index 0000000..061ce13 --- /dev/null +++ b/1869_Remake/Program.cs @@ -0,0 +1,125 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +using Otter; +using _1869_Remake; +using _1869_Remake.Scenes; + +namespace _1869_Remake +{ + public class Program + { + static void Main(string[] args) + { + //Spiel erstellen + //Hinweis für Final release Projekteinstellungen von Konsolenanwendung zu Windowsanwendung änder damit Spiel direkt Fokus hat + + Globals.Remake = new Game("1869 - Remake", 640, 480,60,false); + + + // Intro Sequenz als Startsequenz andere FirstScenes sind Shortcuts für dev Gründe + //Globals.Remake.FirstScene = new Intro(); + Globals.Remake.FirstScene = new ConfigScreen(); + //Globals.Remake.FirstScene = new worldMap(); + //Globals.Remake.FirstScene = new BankScene(); + //Globals.Remake.FirstScene = new HallOfFameScene(); + //Globals.Remake.FirstScene = new StatistikScene(); + //Globals.Remake.FirstScene = new OptionenScene(); + + Globals.Remake.EnableAltF4 = true; + Globals.Remake.MouseVisible = true; + + + //Spielersession hinzufügen + Globals.PlayerSession = Globals.Remake.AddSession("Player"); + + //Steuerungsmöglichkeiten Deffinieren + Globals.PlayerSession.Controller.AddButton("Enter"); + Globals.PlayerSession.Controller.Button("Enter").AddKey(Key.Return); + + Globals.PlayerSession.Controller.AddButton("MausLinks"); + Globals.PlayerSession.Controller.Button("MausLinks").AddMouseButton(MouseButton.Left); + + Globals.PlayerSession.Controller.AddButton("MausRechts"); + Globals.PlayerSession.Controller.Button("MausRechts").AddMouseButton(MouseButton.Right); + + //A B C D E F G für eingaben + Globals.PlayerSession.Controller.AddButton("A"); + Globals.PlayerSession.Controller.Button("A").AddKey(Key.A); + + Globals.PlayerSession.Controller.AddButton("B"); + Globals.PlayerSession.Controller.Button("B").AddKey(Key.B); + + Globals.PlayerSession.Controller.AddButton("C"); + Globals.PlayerSession.Controller.Button("C").AddKey(Key.C); + + Globals.PlayerSession.Controller.AddButton("D"); + Globals.PlayerSession.Controller.Button("D").AddKey(Key.D); + + Globals.PlayerSession.Controller.AddButton("E"); + Globals.PlayerSession.Controller.Button("E").AddKey(Key.E); + + Globals.PlayerSession.Controller.AddButton("F"); + Globals.PlayerSession.Controller.Button("F").AddKey(Key.F); + + Globals.PlayerSession.Controller.AddButton("G"); + Globals.PlayerSession.Controller.Button("G").AddKey(Key.G); + + // O für Original Modus, R für Remake + Globals.PlayerSession.Controller.AddButton("O"); + Globals.PlayerSession.Controller.Button("O").AddKey(Key.O); + + Globals.PlayerSession.Controller.AddButton("R"); + Globals.PlayerSession.Controller.Button("R").AddKey(Key.R); + + //Leertaste für Neues Spiel, J für Spiel Laden + Globals.PlayerSession.Controller.AddButton("Leer"); + Globals.PlayerSession.Controller.Button("Leer").AddKey(Key.Space); + + Globals.PlayerSession.Controller.AddButton("J"); + Globals.PlayerSession.Controller.Button("J").AddKey(Key.J); + + Globals.PlayerSession.Controller.AddButton("N"); + Globals.PlayerSession.Controller.Button("N").AddKey(Key.N); + + // M für Männlich, W für weiblich + Globals.PlayerSession.Controller.AddButton("M"); + Globals.PlayerSession.Controller.Button("M").AddKey(Key.M); + + Globals.PlayerSession.Controller.AddButton("W"); + Globals.PlayerSession.Controller.Button("W").AddKey(Key.W); + + Globals.PlayerSession.Controller.AddButton("Z"); + Globals.PlayerSession.Controller.Button("Z").AddKey(Key.Z); + + // Zahlentasten + Globals.PlayerSession.Controller.AddButton("1"); + Globals.PlayerSession.Controller.Button("1").AddKey(Key.Num1); + Globals.PlayerSession.Controller.Button("1").AddKey(Key.Numpad1); + + Globals.PlayerSession.Controller.AddButton("2"); + Globals.PlayerSession.Controller.Button("2").AddKey(Key.Num2); + Globals.PlayerSession.Controller.Button("2").AddKey(Key.Numpad2); + + Globals.PlayerSession.Controller.AddButton("3"); + Globals.PlayerSession.Controller.Button("3").AddKey(Key.Num3); + Globals.PlayerSession.Controller.Button("3").AddKey(Key.Numpad3); + + Globals.PlayerSession.Controller.AddButton("4"); + Globals.PlayerSession.Controller.Button("4").AddKey(Key.Num4); + Globals.PlayerSession.Controller.Button("4").AddKey(Key.Numpad4); + + Globals.PlayerSession.Controller.AddButton("5"); + Globals.PlayerSession.Controller.Button("5").AddKey(Key.Num5); + Globals.PlayerSession.Controller.Button("5").AddKey(Key.Numpad5); + + //Spiel Starten + Globals.Remake.Start(); + + + } + } +} diff --git a/1869_Remake/Properties/AssemblyInfo.cs b/1869_Remake/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..2659fe3 --- /dev/null +++ b/1869_Remake/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// Allgemeine Informationen über eine Assembly werden über die folgenden +// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, +// die einer Assembly zugeordnet sind. +[assembly: AssemblyTitle("1869_Remake")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Orgname")] +[assembly: AssemblyProduct("1869_Remake")] +[assembly: AssemblyCopyright("Copyright © Orgname 2017")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar +// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von +// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. +[assembly: ComVisible(false)] + +// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird +[assembly: Guid("7fbb14b6-14b4-43de-aa70-844b2a9e1ff4")] + +// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: +// +// Hauptversion +// Nebenversion +// Buildnummer +// Revision +// +// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern +// übernehmen, indem Sie "*" eingeben: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/1869_Remake/Scenes/BankScene.cs b/1869_Remake/Scenes/BankScene.cs new file mode 100644 index 0000000..8c35fa8 --- /dev/null +++ b/1869_Remake/Scenes/BankScene.cs @@ -0,0 +1,280 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Otter; +using _1869_Remake; +using _1869_Remake.ToolKlassen; + +namespace _1869_Remake.Scenes +{ + public class BankScene : Scene + { + public Image BlackScreen = new Image(Assets.BLACKSCREEN); + public Image BankScreen = new Image(Assets.BANKSCREEN); + public Image BankScreen_Augen = new Image(Assets.BANKSCREEN_AUGEN); + public Image PfeilRunter = new Image(Assets.PFEILRUNTER); + public Image PfeilHoch = new Image(Assets.PFEILHOCH); + + private bool FadeOut = false; + + public bool farbeIstGewechselt_Auswahl_1 = false; + public bool farbeIstGewechselt_Auswahl_2 = false; + public bool farbeIstGewechselt_Auswahl_3 = false; + + //AnzeigeTimer aktuell nur für warten vor dem 1. Text (später direkt nach tween) + public const float TIMER_GRENZE = 90f; + public float szenenTimer = 0f; + public bool wahlFertig = true; + public bool anzeigeFertig = false; + public bool pfeileAngezeigt = false; + + public Text[] anzeigeTexte = new Text[10]; + + + public float BLINZEL_GRENZE = 320f; + public float BLINZEL_DAUER = 40f; + public float blinzelTimer = 0f; + public bool blinzelt = false; + + //aktuelle Position im "KonversationsBaum" + public int BankSeite = 0; + public int AnfrageBetrag; + public int AnfrageDollar; + public int AnfrageCent; + + //Beträge, mit denen Leihbetrag und Zinsbetrag erhöht und verringert werden -> Als int gespeichert um nicht mit kommazahlen zu rechnen + public int LeihBetrag_Staffelung = 26250; //262,50 + public int ZinsBetrag_Staffelung = 6370; //63,70 -> entspricht ~ 24% Zinsen -> Schnäppchen!! xD + + //Startpunkt des Anzeigefensters -> Es werden immer nur 3 Optionen angezeigt; Wenn mehr verfügbar dann wird nur Ausschnitt + //aller Optionen gezeigt, Variable zeigt auf den Startindex der 3 aufeinander folgenden Punkte + public int AnzeigeRange = 0; + + TextBuilder TextLieferant; + + + public BankScene() + { + //Todo: textbuilder Handling hier umbauen (gemäß vorlage in Handel) + + //Initialisieren des Hauptbildschirms und einblenden + Globals.aktuelleSzene = "Bank"; + BankScreen.CenterOrigin(); + BankScreen.X = Globals.Remake.HalfWidth; + BankScreen.Y = Globals.Remake.HalfHeight; + + BankScreen.Alpha = 0f; + + AddGraphic(BankScreen); + Tween(BankScreen, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); + + + //Animationen (Oldschool Umsetzung via Timer und Überblendung mittels Alpha) + BankScreen_Augen.CenterOrigin(); + BankScreen_Augen.X = Globals.Remake.HalfWidth; + BankScreen_Augen.Y = 156; + + BankScreen_Augen.Alpha = 0f; + AddGraphic(BankScreen_Augen); + + //Vorbereiten des Blackscreens + BlackScreen.CenterOrigin(); + BlackScreen.X = Globals.Remake.HalfWidth; + BlackScreen.Y = Globals.Remake.HalfHeight; + BlackScreen.Alpha = 0f; + + //Immer anfangs den maximal Betrag anbieten + AnfrageBetrag = 4200; + AnfrageDollar = 4200; + AnfrageCent = 0; + + //TextBuilder einbinden + TextLieferant = new TextBuilder(Globals.aktuelleSzene); + Add(TextLieferant); + + Queue WillkommensText = new Queue(); + WillkommensText.Enqueue("Begrüßung_Decoy"); + // Willkommenstext erstellen (Mittig über dem Bankier) + TextLieferant.erzeugeSprachText(WillkommensText, new Queue(), 350, 50); + TextLieferant.erzeugeAuswahlText(new Queue(), 30, 410); + + + } + + public override void Update() + { + base.Update(); + + //hochzählendes Zeitelement um Aktionen in der Szene zu Takten + szenenTimer++; + + //BlackScreen Durchsichtigkeit 1 ist wurde die nächste Szene getriggert -> wechsel zum Hauptbildschirm + if (BlackScreen.Alpha >= 0.999f) + { + Globals.LetzteSzene = "Bank"; + this.RemoveAll(); + Globals.Remake.SwitchScene(new worldMap()); + } + + //Erst nach Timer sind aktionen möglich + if (szenenTimer >= TIMER_GRENZE && !FadeOut) + { + /* + // Auswahl 1 + if (Util.InRect(this.MouseX, this.MouseY, 25, 410, 600, 20)) + { + if (Globals.PlayerSession.Controller.Button("MausLinks").Down) + { + + + /* + if (!farbeIstGewechselt_Auswahl_1) + { + Auswahl.toggleHighlightFarbe(0); + farbeIstGewechselt_Auswahl_1 = true; + } + + } + + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + Console.WriteLine("Auswahl 1 ist gedrückt!"); + + + //zurückwechseln der Farbe zu Grün + /* + if (farbeIstGewechselt_Auswahl_1) + { + Auswahl.toggleHighlightFarbe(0); + farbeIstGewechselt_Auswahl_1 = false; + } + string TempEbene = Auswahl.zeigeAktuelleEbene() + ".1"; + if (Auswahl.checkEbeneExistiert(TempEbene)) + { + Auswahl.LadeTexteAuswahl(TempEbene); + } + } + + } + else + { + /* + //zurückwechseln der Farbe zu Grün wenn Taste Released oder Textfeld verlassen + if (farbeIstGewechselt_Auswahl_1) + { + Auswahl.toggleHighlightFarbe(0); + farbeIstGewechselt_Auswahl_1 = false; + } + + + } + + + + // Auswahl 2 + if (Util.InRect(this.MouseX, this.MouseY, 25, 434, 600, 20)) + { + if (Globals.PlayerSession.Controller.Button("MausLinks").Down) + { + if (!farbeIstGewechselt_Auswahl_2) + { + Auswahl.toggleHighlightFarbe(1); + farbeIstGewechselt_Auswahl_2 = true; + } + + } + + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + Console.WriteLine("Auswahl 2 ist gedrückt!"); + //zurückwechseln der Farbe zu Grün + if (farbeIstGewechselt_Auswahl_2) + { + Auswahl.toggleHighlightFarbe(1); + farbeIstGewechselt_Auswahl_2 = false; + + string TempEbene = Auswahl.zeigeAktuelleEbene() + ".2"; + if (Auswahl.checkEbeneExistiert(TempEbene)) + { + Auswahl.LadeTexteAuswahl(TempEbene); + } + } + } + } + else + { + //zurückwechseln der Farbe zu Grün wenn Taste Released oder Textfeld verlassen + if (farbeIstGewechselt_Auswahl_2) + { + Auswahl.toggleHighlightFarbe(1); + farbeIstGewechselt_Auswahl_2 = false; + } + + } + + // Auswahl 3 + if (Util.InRect(this.MouseX, this.MouseY, 25, 458, 600, 20)) + { + if (Globals.PlayerSession.Controller.Button("MausLinks").Down) + { + if (!farbeIstGewechselt_Auswahl_3) + { + Auswahl.toggleHighlightFarbe(2); + farbeIstGewechselt_Auswahl_3 = true; + } + + } + + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + Console.WriteLine("Auswahl 3 ist gedrückt!"); + //zurückwechseln der Farbe zu Grün + if (farbeIstGewechselt_Auswahl_3) + { + Auswahl.toggleHighlightFarbe(2); + farbeIstGewechselt_Auswahl_3 = false; + + if (Auswahl.zeigeAktuelleEbene() == "1") + { + //für die Texte ein FadeOut anstoßen + Auswahl.setzeFadeOut(); + Sprache.setzeFadeOut(); + + //FadeOut zu WorldMap + Tween(BlackScreen, new { Alpha = 1f }, 64f, 0f).Ease(Ease.BackInOut); + AddGraphic(BlackScreen); + + FadeOut = true; + } + else + { + string TempEbene = Auswahl.zeigeAktuelleEbene() + ".3"; + if (Auswahl.checkEbeneExistiert(TempEbene)) + { + Auswahl.LadeTexteAuswahl(Auswahl.zeigeAktuelleEbene() + ".3"); + } + + } + + } + } + } + else + { + //zurückwechseln der Farbe zu Grün wenn Taste Released oder Textfeld verlassen + if (farbeIstGewechselt_Auswahl_3) + { + Auswahl.toggleHighlightFarbe(2); + farbeIstGewechselt_Auswahl_3 = false; + } + + } + */ + + } + + } +} +} diff --git a/1869_Remake/Scenes/BarScene.cs b/1869_Remake/Scenes/BarScene.cs new file mode 100644 index 0000000..0d3d817 --- /dev/null +++ b/1869_Remake/Scenes/BarScene.cs @@ -0,0 +1,1163 @@ +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); + } + } + } + +} diff --git a/1869_Remake/Scenes/ConfigScreen.cs b/1869_Remake/Scenes/ConfigScreen.cs new file mode 100644 index 0000000..ab8fced --- /dev/null +++ b/1869_Remake/Scenes/ConfigScreen.cs @@ -0,0 +1,890 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Otter; +using _1869_Remake; +using _1869_Remake.ToolKlassen; +using _1869_Remake.Entities; + +namespace _1869_Remake.Scenes +{ + public class ConfigScreen : Scene + { + + // Imageobjekte mit dem Config Bildschirm + public Image ConfigImage = new Image(Assets.CONFIGSCREEN); + public Image FadeInBlackScreen = new Image(Assets.BLACKSCREEN); + public Image FadeOutBlackScreen = new Image(Assets.BLACKSCREEN); + + // Welche Einstellungsseite gerade gezeigt wird + // 0 = Moduswahl + // 1 = Ladebildschirm + // 2 = Anzahl Spieler + // 3 = Name der Spieler + // 4 = Geschlechterwahl + // 5 = Firma der Spieler + // 6 = Starthafen wählen + // 7 = Bestätigung der Daten + // 8 = Spieldauer + + public int configSeite = 0; + + //Nur wenn wahl abgeschlossen wird nächster Text angezeigt + public bool wahlFertig = true; + public bool anzeigeFertig = false; + + //Anzahl Spieler : 1-4 möglich + + public int aktuellerSpieler = 0; + public int spielerIndex = 1; + public Hafen startFiliale; + + public Text[] anzeigeTexte = new Text[10]; + //Textbox zum Eingeben der Texte + + public TextBox textFeld; + + //Geschlecht: M = Männlich, W = Weiblich + public String geschlecht; + + //Name der Firma und des Spielers + string spielerName; + public string nameFirma; + public int ersteFiliale; + + public int spielDauer; + public bool bestätigt = false; + private bool beginner = false; + private Hafen tempHafen; + + public const float TIMER_GRENZE = 45f; + //AnzeigeTimer muss hoch starten damit sofort erstes bild angezeigt wird + public float szenenTimer = 0f; + public int counter = 0; + + public ConfigScreen() + { + Globals.aktuelleSzene = "Config"; + + //Initialisieren des Hauptbildschirms und einblenden + ConfigImage.CenterOrigin(); + ConfigImage.X = Globals.Remake.HalfWidth; + ConfigImage.Y = Globals.Remake.HalfHeight; + + ConfigImage.Alpha = 1f; + + AddGraphic(ConfigImage); + Tween(ConfigImage, new { Alpha = 1f }, 120f, 0f).Ease(Ease.BackInOut); + + //Vorbereiten des Blackscreens + FadeInBlackScreen.CenterOrigin(); + FadeInBlackScreen.X = Globals.Remake.HalfWidth; + FadeInBlackScreen.Y = Globals.Remake.HalfHeight; + FadeInBlackScreen.Alpha = 1f; + + AddGraphic(FadeInBlackScreen); + Tween(FadeInBlackScreen, new { Alpha = 0f }, 180f, 0f).Ease(Ease.BackInOut); + + FadeOutBlackScreen.CenterOrigin(); + FadeOutBlackScreen.X = Globals.Remake.HalfWidth; + FadeOutBlackScreen.Y = Globals.Remake.HalfHeight; + FadeOutBlackScreen.Alpha = 0f; + + + } + + public override void Update() + { + base.Update(); + + //hochzählendes Zeitelement um Aktionen in der Szene zu Takten + szenenTimer++; + + //Erst nach Timer sind aktionen möglich + if (szenenTimer >= TIMER_GRENZE) + { + + // Nach dem timer alle unsichtbaren Texte einblenden um Zeit zwischen Texten zu simulieren => Kein flackern durch schnell eingeblendete Texte + // Nur neu erstellen wenn notwendig für bessere Performance + if (!anzeigeFertig) + { + foreach (Text t in anzeigeTexte) + { + if (t != null) + { + t.Alpha = 1f; + t.Color = Globals.ConfigGrau; + } + } + + if (configSeite == 3 || configSeite == 5) + { + textFeld.Focus(); + } + anzeigeFertig = true; + } + + + if (wahlFertig) + { + //Initialisieren der Grafiken erst ab 2. Durchgang (Nurentfernen der Texte nicht des Hintergrundbildes) + if (configSeite != 0) + { + foreach (Text t in anzeigeTexte) + { + RemoveGraphic(t); + } + + if (configSeite == 4 || configSeite == 6) + Remove(textFeld); + } + + + //Initialisieren des Arrays + counter = 0; + foreach (var t in anzeigeTexte) + { + if (t != null) + { + counter++; + } + } + + for (int i = 0; i < counter; i++) + { + anzeigeTexte[i] = null; + } + + //Anzeige des aktuellen Textes + switch (configSeite) + { + //Versionsscreen + case 0: + anzeigeTexte[0] = Globals.CONFIGTEXT0; + anzeigeTexte[1] = Globals.CONFIGTEXT0_1; + anzeigeTexte[2] = Globals.CONFIGTEXT0_2; + break; + //Spiel laden oder Neu + case 1: + anzeigeTexte[0] = Globals.CONFIGTEXT1; + break; + //Anzahl Spieler + case 2: + anzeigeTexte[0] = Globals.CONFIGTEXT2; + + break; + // Name Spieler + case 3: + switch (aktuellerSpieler) + { + case 1: anzeigeTexte[0] = Globals.CONFIGTEXT3_A; break; + case 2: anzeigeTexte[0] = Globals.CONFIGTEXT3_B; break; + case 3: anzeigeTexte[0] = Globals.CONFIGTEXT3_C; break; + case 4: anzeigeTexte[0] = Globals.CONFIGTEXT3_D; break; + + } + + //Eingabefeld für Texteingabe + textFeld = new TextBox(Globals.Remake.HalfWidth - 50, Globals.Remake.HalfHeight, 100, 20, 15, true); + this.Add(textFeld); + + break; + // Geschlecht + case 4: + + anzeigeTexte[0] = Globals.CONFIGTEXT4; + break; + // Name Firma + case 5: + switch (aktuellerSpieler) + { + case 1: anzeigeTexte[0] = Globals.CONFIGTEXT5_A; break; + case 2: anzeigeTexte[0] = Globals.CONFIGTEXT5_B; break; + case 3: anzeigeTexte[0] = Globals.CONFIGTEXT5_C; break; + case 4: anzeigeTexte[0] = Globals.CONFIGTEXT5_D; break; + + } + + //Eingabefeld für Texteingabe + textFeld = new TextBox(Globals.Remake.HalfWidth - 50, Globals.Remake.HalfHeight, 100, 20, 15, true); + this.Add(textFeld); + + break; + //Starthafen + case 6: + anzeigeTexte[0] = Globals.CONFIGTEXT6_A; + anzeigeTexte[1] = Globals.CONFIGTEXT6_B; + anzeigeTexte[2] = Globals.CONFIGTEXT6_C; + anzeigeTexte[3] = Globals.CONFIGTEXT6_D; + anzeigeTexte[4] = Globals.CONFIGTEXT6_E; + anzeigeTexte[5] = Globals.CONFIGTEXT6_F; + break; + // Zusammenfassung der Daten + case 7: + + anzeigeTexte[0] = new Text("SPIELERNAME: " + spielerName, Assets.FONT_AMIGA4EVER2, 10); + anzeigeTexte[1] = new Text("GESCHLECHT : " + geschlecht, Assets.FONT_AMIGA4EVER2, 10); + anzeigeTexte[2] = new Text("FIRMENNAME : " + nameFirma, Assets.FONT_AMIGA4EVER2, 10); + anzeigeTexte[3] = new Text("STARTHAFEN : " + startFiliale.NAME, Assets.FONT_AMIGA4EVER2, 10); + anzeigeTexte[4] = new Text("", Assets.FONT_AMIGA4EVER2, 10); + anzeigeTexte[5] = Globals.CONFIGTEXT7; + + //Hier Kopieren der Spieler in die Globalen Daten einfügen Wenn daten struktur bestimmt ist + + break; + // Spieldauer wählen 5-26 Jahre + case 8: + anzeigeTexte[0] = Globals.CONFIGTEXT8_A; + anzeigeTexte[1] = Globals.CONFIGTEXT8_B; + anzeigeTexte[2] = Globals.CONFIGTEXT8_C; + anzeigeTexte[3] = Globals.CONFIGTEXT8_D; + anzeigeTexte[4] = Globals.CONFIGTEXT8_E; + anzeigeTexte[5] = Globals.CONFIGTEXT8_F; + anzeigeTexte[6] = Globals.CONFIGTEXT8_G; + anzeigeTexte[7] = Globals.CONFIGTEXT8_H; + break; + } + + //Aufbau der Texte in der mitte des Bildschirms (transparent) + int indexer = 0; + foreach (Text t in anzeigeTexte) + { + + if (t != null) + { + if (configSeite == 6) + { + //ohne Center origin damit linksbündigkeit bleibt + t.X = 150; + t.Y = Globals.Remake.HalfHeight - 60 + (indexer * 15); + + t.Alpha = 0f; + AddGraphic(t); + } + else + if (configSeite == 7 && indexer != 5) + { + //ohne Center origin damit linksbündigkeit bleibt + t.X = 200; + t.Y = Globals.Remake.HalfHeight - 60 + (indexer * 15); + + t.Alpha = 0f; + AddGraphic(t); + + } + else + { + t.CenterOrigin(); + t.X = Globals.Remake.HalfWidth + 50 - (t.ToString().Length * 5); + t.Y = Globals.Remake.HalfHeight - 30 + (indexer * 15); + + + t.Alpha = 0f; + AddGraphic(t); + } + indexer++; + + } + + } + + //Wechsel des Textes fertig und timer neu reseten; Nach wechsel muss erst Eingabe des Users erfolgen für nächsten Wechsel + wahlFertig = false; + anzeigeFertig = false; + szenenTimer = 0f; + + } + + switch (configSeite) + { + //Versionsscreen + case 0: + if (Globals.PlayerSession.Controller.Button("O").Pressed) + { + Globals.SpielModus = 1; + + configSeite++; + wahlFertig = true; + setzeHäfen(Globals.SpielModus); + setzenWare(Globals.SpielModus); + setzeSchiffsTypen(Globals.SpielModus); + setzenWarenAufstockung(Globals.SpielModus); + setzenMeeresKnoten(Globals.SpielModus); + setzenMeeresStraßen(Globals.SpielModus); + setzePreisListeUnerwünscht(Globals.SpielModus); + + + } + + if (Globals.PlayerSession.Controller.Button("R").Pressed) + { + //Solange keine erweiterung der Häfen/WAREN geplant weiterhin die reguläre Palette setzen + Globals.SpielModus = 1; + configSeite++; + wahlFertig = true; + + setzeHäfen(Globals.SpielModus); + setzeSchiffsTypen(Globals.SpielModus); + setzenWare(Globals.SpielModus); + setzenMeeresKnoten(Globals.SpielModus); + setzenMeeresStraßen(Globals.SpielModus); + setzenWarenAufstockung(Globals.SpielModus); + setzePreisListeUnerwünscht(Globals.SpielModus); + + } + + break; + //Spiel laden oder Neu + case 1: + if (Globals.PlayerSession.Controller.Button("Leer").Pressed) + { + configSeite++; + wahlFertig = true; + + } + else + + if (Globals.PlayerSession.Controller.Button("J").Pressed) + { + configSeite++; + wahlFertig = true; + + + } + + break; + //Anzahl Spieler + case 2: + if (Globals.PlayerSession.Controller.Button("1").Pressed) + { + Globals.AnzahlSpieler = 1; + wahlFertig = true; + + } + if (Globals.PlayerSession.Controller.Button("2").Pressed) + { + Globals.AnzahlSpieler = 2; + wahlFertig = true; + + } + if (Globals.PlayerSession.Controller.Button("3").Pressed) + { + Globals.AnzahlSpieler = 3; + wahlFertig = true; + + } + if (Globals.PlayerSession.Controller.Button("4").Pressed) + { + Globals.AnzahlSpieler = 4; + wahlFertig = true; + + } + + if (wahlFertig) + { + configSeite++; + //Setzen des ersten Spielers + aktuellerSpieler = 1; + + + } + + break; + // Name Spieler + case 3: + if (Globals.PlayerSession.Controller.Button("Enter").Pressed) + { + spielerName = textFeld.getInput(); + configSeite++; + wahlFertig = true; + + } + break; + // Geschlecht + case 4: + if (Globals.PlayerSession.Controller.Button("M").Pressed) + { + geschlecht = "MÄNNLICH"; + configSeite++; + wahlFertig = true; + + } + else + if (Globals.PlayerSession.Controller.Button("W").Pressed) + { + geschlecht = "WEIBLICH"; + configSeite++; + wahlFertig = true; + + } + + break; + // Name Firma + case 5: + if (Globals.PlayerSession.Controller.Button("Enter").Pressed) + { + nameFirma = textFeld.getInput(); + configSeite++; + wahlFertig = true; + + } + break; + + //Starthafen + case 6: + if (Globals.PlayerSession.Controller.Button("1").Pressed) + { + + Globals.AlleHäfen.TryGetValue("LIVERPOOL", out tempHafen); + + wahlFertig = true; + + } + if (Globals.PlayerSession.Controller.Button("2").Pressed) + { + Globals.AlleHäfen.TryGetValue("LONDON", out tempHafen); + wahlFertig = true; + + } + if (Globals.PlayerSession.Controller.Button("3").Pressed) + { + Globals.AlleHäfen.TryGetValue("LES HAVRES", out tempHafen); + wahlFertig = true; + + } + if (Globals.PlayerSession.Controller.Button("4").Pressed) + { + Globals.AlleHäfen.TryGetValue("NEW YORK", out tempHafen); + wahlFertig = true; + } + if (Globals.PlayerSession.Controller.Button("5").Pressed) + { + Globals.AlleHäfen.TryGetValue("SAVANNAH", out tempHafen); + wahlFertig = true; + + } + + if (wahlFertig) + { + startFiliale = tempHafen; + configSeite++; + + } + break; + // Zusammenfassung der Daten (Bestätigung J/N) -> wenn J dann nächster Spieler oder Spieldauerwahl/ Wenn N dann zu case 3 mit selbem Spieler + case 7: + if (Globals.PlayerSession.Controller.Button("J").Pressed) + { + wahlFertig = true; + bestätigt = true; + Spieler tempSpieler = new Spieler(spielerName, nameFirma, geschlecht,spielerIndex++); + tempSpieler.gründetFiliale(startFiliale,0); + // Testschiffe hinzufügen (Zu testzwecken) -> Alle starten am Starthafen + /* + tempSpieler.erhalteSchiff(startFiliale.NAME,1); + tempSpieler.erhalteSchiff(startFiliale.NAME, 2); + tempSpieler.erhalteSchiff(startFiliale.NAME, 3); + tempSpieler.erhalteSchiff(startFiliale.NAME, 4); + tempSpieler.erhalteSchiff(startFiliale.NAME, 5); + */ + + + } + + if (Globals.PlayerSession.Controller.Button("N").Pressed) + { + wahlFertig = true; + } + + if (wahlFertig) + { + if (bestätigt) + { + bestätigt = false; + if (aktuellerSpieler == Globals.AnzahlSpieler) + { + configSeite++; + + } + else + { + aktuellerSpieler++; + configSeite = 3; + } + } + else + { + configSeite = 3; + + } + + + + } + break; + + // Spieldauer wählen 5-26 Jahre + case 8: + + if (Globals.PlayerSession.Controller.Button("A").Pressed) + { + Globals.Spieldauer = 5; + wahlFertig = true; + + } + if (Globals.PlayerSession.Controller.Button("B").Pressed) + { + Globals.Spieldauer = 10; + wahlFertig = true; + } + if (Globals.PlayerSession.Controller.Button("C").Pressed) + { + Globals.Spieldauer = 15; + wahlFertig = true; + } + if (Globals.PlayerSession.Controller.Button("D").Pressed) + { + Globals.Spieldauer = 20; + wahlFertig = true; + } + if (Globals.PlayerSession.Controller.Button("E").Pressed) + { + Globals.Spieldauer = 26; + wahlFertig = true; + } + + if (Globals.PlayerSession.Controller.Button("F").Pressed) + { + Globals.Spieldauer = 5; + //Bei beginnerspiel wird mehr startkapital festgelegt + beginner = true; + wahlFertig = true; + } + + if (wahlFertig) + { + + foreach (Spieler aktuellerSpieler in Globals.SpielerListe) + { + //Wenn Spieldauer bestimmt wurde, erhöhe das Budget der Startfiliale(erste und einzige Filiale bisher) um 7000 [da ohne floats gearbeitet werden soll geben wir 70000 ein] + if (beginner) + aktuellerSpieler.FILIALEN.First().erhöheBudget(1200000); + else + aktuellerSpieler.FILIALEN.First().erhöheBudget(700000); + } + + Tween(FadeOutBlackScreen, new { Alpha = 1f }, 64f, 0f).Ease(Ease.BackInOut); + AddGraphic(FadeOutBlackScreen); + + + } + + if (FadeOutBlackScreen.Alpha >= 0.999f) + { + //Setzen des Startdatums (StartDatum ist immer 01.01.1854 + //Einfügen der festen WeltEvents in die Queue (Original Version) + setzenBasisEvents(1); + + switch (Globals.SpielerListe[0].FILIALEN[0].HEIMATHAFEN.NAME) + { + case "LIVERPOOL": + case "LONDON": + case "LES HAVRES": + Globals.weltKarte = "EUROPA"; break; + case "SAVANNAH": + case "NEW YORK": + Globals.weltKarte = "AMERIKA"; break; + } + + //Szenenwechsel + Globals.LetzteSzene = "Config"; + this.RemoveAll(); + this.ClearGraphics(); + Globals.Remake.SwitchScene(new worldMap()); + } + + break; + } + + + } + + + } + + public void setzeHäfen(int Version) + { + // Original Version + if (Version == 1) + { + + //Anlegen aller Originalhäfen (39 Stück) + + //Amerika + new Hafen("SAN FRANZISKO", "VEREINIGTE STAATEN", 0, 0, false); + new Hafen("NEW ORLEANS", "VEREINIGTE STAATEN", 0, 0, false); + new Hafen("SAVANNAH", "VEREINIGTE STAATEN", 0, 0, false); + new Hafen("NEW YORK", "KUBA", 0, 0, false); + new Hafen("LOS ANGELES", "VEREINIGTE STAATEN", 0, 0, false); + new Hafen("PUERTO BELLO", "PANAMA", 0, 0, false); + new Hafen("CEYENNE", "GUAYANA", 0, 0, false); + new Hafen("CALLAO", "PERU", 0, 0, false); + new Hafen("ARICA", "CHILE", 0, 0, false); + new Hafen("RIO DE JANEIRO", "KÖNIGREICH BRASILIEN", 0, 0, false); + + //Afrika + new Hafen("AKKRA", "NIGERIA", 0, 0, false); + new Hafen("LAGOS", "GOLDKÜSTE", 0, 0, false); + new Hafen("LUANDA", "ANGOLA", 0, 0, false); + new Hafen("KAPSTADT", "KAPLAND", 0, 0, false); + new Hafen("MOCAMBIQUE", "MOCAMBIQUE", 0, 0, false); + new Hafen("TANGA", "DEUTSCH-OSTAFRIKA", 0, 0, false); + //Europa Punkt + new Hafen("PORT SAID", "ÄGYPTEN", 555, 350, false); + new Hafen("ADEN", "ARABIEN", 0, 0, false); + //Europa Punkt + new Hafen("TUNIS", "TUNESIEN", 355, 285, false); + + //Europa + new Hafen("ODESSA", "KAISERREICH RUSSLAND", 500, 185, false); + new Hafen("TRIEST", "KAISERREICH ÖSTERREICH / KOLONIE DER MAX-GRUPPE", 385, 185, false); + new Hafen("BARCELONA", "KÖNIGREICH SPANIEN", 290, 235, false); + new Hafen("LISSABON", "KÖNIGREICH PORTUGAL", 225, 245, false); + new Hafen("LE HAVRE", "KAISERREICH FRANKREICH", 290, 145, true); + new Hafen("AMSTERDAM", "KÖNIGREICH NIEDERLANDE", 315, 125, false); + new Hafen("HAMBURG", "KÖNIGREICH HANNOVER", 335, 110, false); + new Hafen("LONDON", "KÖNIGREICH ENGLAND", 285, 115, true); + new Hafen("LIVERPOOL", "KÖNIGREICH ENGLAND", 260, 100, true); + + //Asien/Australien + new Hafen("DIU", "INDIEN/ENGLISCHE KOLONIE", 0, 0, false); + new Hafen("BOMBAY", "INDIEN/ENGLISCHE KOLONIE", 0, 0, false); + new Hafen("COLOMBO", "CEYLON/ENGLISCHE KOLONIE", 0, 0, false); + new Hafen("RANGOON", "BURMA/ENGLISCHE KOLONIE", 0, 0, false); + new Hafen("MACAO", "CHINA/ENGLISCHER VERTRAGSHAFEN", 0, 0, false); + new Hafen("SHANGHAI", "CHINA/ENGLISCHER VERTRAGSHAFEN", 0, 0, false); + new Hafen("SINGAPORE", "MALAISIEN/ENGLISCHE KOLONIE", 0, 0, false); + new Hafen("MANDAO", "CELEBES/NIEDERLÄNDISCHE KOLONIE", 0, 0, false); + new Hafen("PERTH", "AUSTRALIEN/ENGLISCHE KOLONIE", 0, 0, false); + new Hafen("MELBOURNE", "AUSTRALIEN/ENGLISCHE KOLONIE", 0, 0, false); + new Hafen("SIDNEY", "AUSTRALIEN/ENGLISCHE KOLONIE", 0, 0, false); + } + } + + public void setzenMeeresKnoten(int Version) + { + // Original Version + if (Version == 1) + { + new MeeresKnotenpunkt("Test GB"); + new MeeresKnotenpunkt("Test Spanien"); + } + } + + public void setzenMeeresStraßen(int Version) + { + // Original Version + if (Version == 1) + { + // To Do: System einführen bei dem alle Straßen zu allen Jahreszeiten bekannt sind und je nach dem ob user diese bereits befahren ist, + // zeigen sie mittels farbe an ob man günstige Strömungsverhältnisse hat (schneller am Ziel) + new SeeStraße("GB - Spanien",50,50,150,150,2); + new SeeStraße("Spanien - GB",150,150,50,50,1); + } + } + + public void setzenBasisEvents(int Version) + { + // Da zu Begin des Spiels die Liste leer ist können wir die aktuellen Basis Events beretis eins nach dem anderen hier einfügen + // es muss nur sicher gestellt werden, dass in jeder eventabhängigen Instanz eine EventHandler aktiv ist + // Original Version + if (Version == 1) + { + //Setzen des Startdatums + Globals.AktuellerTag_E = 1; + Globals.AktuellerTag_Z = 0; + Globals.AktuellerMonat = 1; + Globals.AktuellesJahr_E = 4; + Globals.AktuellesJahr_Z = 5; + Globals.AktuellesJahr_H = 8; + Globals.AktuellesJahr_T = 1; + Globals.AktuellesDatum = new DateTime(1854, 01, 01); + + + // Hinweis: Bei Laden des Startevents müssen die Häfen ihr "Initial Lager" erstellen, Beispiel -> Tunis hat zu beginn nur früchte geladen, Kein Pflanzen öl!! (das wird erst gegen März) verfügbar + Globals.EventAktion(new WeltEvent(new DateTime(1854, 1, 1), "START"),"EINFÜGEN"); + + //Für Jeden Spieler muss für den 1.1.1854 ein Spielerwechsel initiiert werden damit die Spieler alle am 1. Tag einmal dran kommen + for (int spielerIndex = 0; spielerIndex < Globals.SpielerListe.Count(); spielerIndex++) + { + Globals.EventAktion(new WeltEvent(new DateTime(1854, 1, 1), "SPIELERWECHSEL", Globals.SpielerListe[spielerIndex]), "EINFÜGEN"); + } + + //SpielEnde je nach gewählter Spieldauer + switch (Globals.Spieldauer) + { + case 5: + Globals.EventAktion(new WeltEvent(new DateTime(1859, 1, 1), "ENDE"),"EINFÜGEN"); + break; + case 10: + Globals.EventAktion(new WeltEvent(new DateTime(1864, 1, 1), "ENDE"), "EINFÜGEN"); + break; + case 15: + Globals.EventAktion(new WeltEvent(new DateTime(1869, 1, 1), "ENDE"), "EINFÜGEN"); + break; + case 20: + Globals.EventAktion(new WeltEvent(new DateTime(1874, 1, 1), "ENDE"), "EINFÜGEN"); + break; + case 26: + Globals.EventAktion( new WeltEvent(new DateTime(1880, 1, 1), "ENDE"), "EINFÜGEN"); + break; + } + + } + } + + public void setzenWare(int Version) + { + // Original Version + if (Version == 1) + { + //ToDo: Vervollständigen aller möglichen Waren + Globals.AlleWarenTypen = new List(); + //Anlegen aller Originalwaren (XX Stück) + Globals.registriereWarenTyp("BAUMWOLLE"); + Globals.registriereWarenTyp("EDELHOLZ"); + Globals.registriereWarenTyp("ELFENBEIN"); + Globals.registriereWarenTyp("FRÜCHTE"); + Globals.registriereWarenTyp("GEWÜRZE"); + Globals.registriereWarenTyp("KAFFEE"); + Globals.registriereWarenTyp("KAKAO"); + Globals.registriereWarenTyp("KAUTSCHUK"); + Globals.registriereWarenTyp("KOHLE"); + Globals.registriereWarenTyp("MASCHINEN"); + Globals.registriereWarenTyp("PFLANZENÖL"); + Globals.registriereWarenTyp("SALPETER"); + Globals.registriereWarenTyp("SEIDE"); + Globals.registriereWarenTyp("TABAK"); + Globals.registriereWarenTyp("TEXTILIEN"); + Globals.registriereWarenTyp("TEE"); + Globals.registriereWarenTyp("WAFFEN"); + Globals.registriereWarenTyp("WEIN"); + Globals.registriereWarenTyp("WERKZEUG"); + Globals.registriereWarenTyp("WOLLE"); + Globals.registriereWarenTyp("ZUCKER"); + + } + } + + public void setzeSchiffsTypen(int Version) + { + // Original Version + if (Version == 1) + + { + Globals.AlleSchiffsTypen = new List(); + //Anlegen aller möglichenSchiffstypen als Refferenz + Globals.registriereSchiffsTyp(new Schiff("SCHONERSCHABLONE","SCHONER",0)); + Globals.registriereSchiffsTyp(new Schiff("BARKSCHABLONE", "BARK", 0)); + Globals.registriereSchiffsTyp(new Schiff("HOLZDAMPFSCHIFFSCHABLONE", "HOLZDAMPFSCHIFF", 0)); + Globals.registriereSchiffsTyp(new Schiff("EISENDAMPFSCHIFFSCHABLONE", "EISENDAMPFSCHIFF", 0)); + Globals.registriereSchiffsTyp(new Schiff("BRIGGSCHABLONE", "BRIGG", 0)); + Globals.registriereSchiffsTyp(new Schiff("FREGATTESCHABLONE", "FREGATTE", 0)); + Globals.registriereSchiffsTyp(new Schiff("KLIPPERSCHABLONE", "KLIPPER", 0)); + + + } + } + + // To Do: Sonderpreis logik herausfinden (Wenn sehr Hoher Import von etwas ist) + public void setzePreisListeSonder(int Version) + { + if (Version == 1) + { + // Wenn richtige Werte berechnet sind muss eingefügt werden; Bis dahin kostet alles pauschal 5 Dollar + Globals.PreisListe_UnerwünschteWare.Add("BAUMWOLLE", 500); + Globals.PreisListe_UnerwünschteWare.Add("EDELHOLZ", 500); + Globals.PreisListe_UnerwünschteWare.Add("ELFENBEIN", 500); + Globals.PreisListe_UnerwünschteWare.Add("FRÜCHTE", 500); + Globals.PreisListe_UnerwünschteWare.Add("GEWÜRZE", 500); + Globals.PreisListe_UnerwünschteWare.Add("KAFFEE", 500); + Globals.PreisListe_UnerwünschteWare.Add("KAKAO", 500); + Globals.PreisListe_UnerwünschteWare.Add("KAUTSCHUK", 500); + Globals.PreisListe_UnerwünschteWare.Add("KOHLE", 500); + Globals.PreisListe_UnerwünschteWare.Add("MASCHINEN", 500); + Globals.PreisListe_UnerwünschteWare.Add("PFLANZENÖL", 500); + Globals.PreisListe_UnerwünschteWare.Add("SALPETER", 500); + Globals.PreisListe_UnerwünschteWare.Add("SEIDE", 500); + Globals.PreisListe_UnerwünschteWare.Add("TABAK", 500); + Globals.PreisListe_UnerwünschteWare.Add("TEXTILIEN", 1850); + Globals.PreisListe_UnerwünschteWare.Add("TEE", 500); + Globals.PreisListe_UnerwünschteWare.Add("WAFFEN", 500); + Globals.PreisListe_UnerwünschteWare.Add("WEIN", 500); + Globals.PreisListe_UnerwünschteWare.Add("WERKZEUG", 8480); + Globals.PreisListe_UnerwünschteWare.Add("WOLLE", 500); + Globals.PreisListe_UnerwünschteWare.Add("ZUCKER", 500); + } + } + + public void setzePreisListeUnerwünscht(int Version) + { + //Original Version + //Anlegen aller PreiseOriginalwaren (XX Stück) + //ToDo: Mit jeder Ware in einem Hafen verkaufen gehn in dem die Ware nich gewünscht ist + + if(Version == 1) + { + // Wenn richtige Werte berechnet sind muss eingefügt werden; Bis dahin kostet alles pauschal 5 Dollar + Globals.PreisListe_UnerwünschteWare.Add("BAUMWOLLE", 500); + Globals.PreisListe_UnerwünschteWare.Add("EDELHOLZ", 500); + Globals.PreisListe_UnerwünschteWare.Add("ELFENBEIN", 500); + Globals.PreisListe_UnerwünschteWare.Add("FRÜCHTE", 500); + Globals.PreisListe_UnerwünschteWare.Add("GEWÜRZE", 500); + Globals.PreisListe_UnerwünschteWare.Add("KAFFEE", 500); + Globals.PreisListe_UnerwünschteWare.Add("KAKAO", 500); + Globals.PreisListe_UnerwünschteWare.Add("KAUTSCHUK", 500); + Globals.PreisListe_UnerwünschteWare.Add("KOHLE", 500); + Globals.PreisListe_UnerwünschteWare.Add("MASCHINEN", 500); + Globals.PreisListe_UnerwünschteWare.Add("PFLANZENÖL", 500); + Globals.PreisListe_UnerwünschteWare.Add("SALPETER", 500); + Globals.PreisListe_UnerwünschteWare.Add("SEIDE", 500); + Globals.PreisListe_UnerwünschteWare.Add("TABAK", 500); + Globals.PreisListe_UnerwünschteWare.Add("TEXTILIEN", 1140); + Globals.PreisListe_UnerwünschteWare.Add("TEE", 500); + Globals.PreisListe_UnerwünschteWare.Add("WAFFEN", 500); + Globals.PreisListe_UnerwünschteWare.Add("WEIN", 500); + Globals.PreisListe_UnerwünschteWare.Add("WERKZEUG", 500); + Globals.PreisListe_UnerwünschteWare.Add("WOLLE", 500); + Globals.PreisListe_UnerwünschteWare.Add("ZUCKER", 500); + } + + + } + + public void setzenWarenAufstockung(int Version) + { + // Original Version + if (Version == 1) + { + //Hinzufügen der AufstockSchablonen für alle Häfen und deren jeweiligen Monaten siehe Restock-Recherchen + + //Amerika + //Afrika + //Europa + Globals.AlleHäfen["LIVERPOOL"].setzeRestockListe("JANUAR",new Ware("MASCHINEN",14520, 100,0,"KISTE"),"EXPORT"); + Globals.AlleHäfen["LIVERPOOL"].setzeRestockListe("JANUAR", new Ware("TEXTILIEN", 1320, 100, 0, "KISTE"), "EXPORT"); + Globals.AlleHäfen["LIVERPOOL"].setzeRestockListe("JANUAR", new Ware("BAUMWOLLE", 540, 100, 0, "KISTE"), "IMPORT"); + Globals.AlleHäfen["LIVERPOOL"].setzeRestockListe("JANUAR", new Ware("TEE", 2290, 100, 0, "KISTE"), "IMPORT"); + Globals.AlleHäfen["LIVERPOOL"].setzeRestockListe("JANUAR", new Ware("ELFENBEIN", 6980, 100, 0, "KISTE"), "IMPORT"); + Globals.AlleHäfen["LIVERPOOL"].setzeRestockListe("JANUAR", new Ware("EDELHOLZ", 1420, 100, 0, "KISTE"), "IMPORT"); + Globals.AlleHäfen["LIVERPOOL"].setzeRestockListe("JANUAR", new Ware("WEIN", 1400, 100, 0, "KISTE"), "IMPORT"); + //Für Testzwecke auch Textilien Importieren (zum testen von reduziertem Preis und vollem Import Preis) + Globals.AlleHäfen["LIVERPOOL"].setzeRestockListe("JANUAR", new Ware("TEXTILIEN", 1000, 75, 0, "KISTE"), "IMPORT"); + //Asien/Australien + } + } + } +} + diff --git a/1869_Remake/Scenes/HallOfFameScene.cs b/1869_Remake/Scenes/HallOfFameScene.cs new file mode 100644 index 0000000..8afcf3c --- /dev/null +++ b/1869_Remake/Scenes/HallOfFameScene.cs @@ -0,0 +1,222 @@ +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 +{ + public class HallOfFameScene : Scene + { + public Image BlackScreen = new Image(Assets.BLACKSCREEN); + public Image HoFScreen = new Image(Assets.HOFSCREEN); + + //AnzeigeTimer aktuell nur für warten vor dem 1. Text (später direkt nach tween) + public const float TIMER_GRENZE = 90f; + public float szenenTimer = 0f; + public bool wahlFertig = true; + public bool anzeigeFertig = false; + + //aktuelle Seite im Hall of Fame "Katalog" + public int HoFSeite = 0; + public bool ersterAufbau = true; + + public Text[] anzeigeTexte = new Text[10]; + public Text WeiterText = Globals.TEXT_WEITER; + public Text EndeText = Globals.TEXT_ENDE; + + public HallOfFameScene() + { + //Initialisieren des Hauptbildschirms und einblenden + Globals.aktuelleSzene = "Hall of Fame"; + + HoFScreen.CenterOrigin(); + HoFScreen.X = Globals.Remake.HalfWidth; + HoFScreen.Y = Globals.Remake.HalfHeight; + + HoFScreen.Alpha = 0f; + + AddGraphic(HoFScreen); + Tween(HoFScreen, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + WeiterText.X = 200; + WeiterText.Y = 390; + //Anmerkung wenn .Color nach .Alpha verändert wird , wird anscheinend der Alpha wert wieder zurück auf 1 gesetzt = Vorsicht bei Zuordnung + WeiterText.Color = Globals.StdGrün; + WeiterText.Alpha = 0f; + + + AddGraphic(WeiterText); + Tween(WeiterText, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + EndeText.X = 410; + EndeText.Y = 390; + EndeText.Color = Globals.StdGrün; + EndeText.Alpha = 0f; + + + AddGraphic(EndeText); + Tween(EndeText, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + //Vorbereiten des Blackscreens + BlackScreen.CenterOrigin(); + BlackScreen.X = Globals.Remake.HalfWidth; + BlackScreen.Y = Globals.Remake.HalfHeight; + BlackScreen.Alpha = 0f; + } + + public override void Update() + { + base.Update(); + + //hochzählendes Zeitelement um Aktionen in der Szene zu Takten + szenenTimer++; + + //BlackScreen Durchsichtigkeit 1 ist wurde die nächste Szene getriggert -> wechsel zum Hauptbildschirm + if (BlackScreen.Alpha >= 0.999f) + { + Globals.LetzteSzene = "Hall of Fame"; + Globals.Remake.SwitchScene(new worldMap()); + } + + //Erst nach Timer sind aktionen möglich + if (szenenTimer >= TIMER_GRENZE) + { + // Nach dem timer alle unsichtbaren Texte einblenden um Zeit zwischen Texten zu simulieren => Kein flackern durch schnell eingeblendete Texte + // Nur neu erstellen wenn notwendig für bessere Performance + if (!anzeigeFertig) + { + foreach (Text t in anzeigeTexte) + { + if (t != null) + { + t.Alpha = 1f; + t.Color = Globals.StdGrün; + + } + } + + anzeigeFertig = true; + } + + if (wahlFertig) + { + //Initialisieren der Grafiken erst ab 2. Durchgang (Nurentfernen der Texte nicht des Hintergrundbildes) + if (!ersterAufbau) + { + foreach (Text t in anzeigeTexte) + { + RemoveGraphic(t); + } + + } + else + { + ersterAufbau = false; + } + + + //Initialisieren des Arrays + int counter = 0; + foreach (var t in anzeigeTexte) + { + if (t != null) + { + counter++; + } + } + + for (int i = 0; i < counter; i++) + { + anzeigeTexte[i] = null; + + } + + + + //Anzeige des aktuellen Textes + switch (HoFSeite) + { + //Jede Seite einzeln + case 0: + + break; + + case 1: + + + + break; + case 2: + + break; + } + + + + //Wechsel des Textes fertig und timer neu reseten; Nach wechsel muss erst Eingabe des Users erfolgen für nächsten Wechsel + wahlFertig = false; + + + } + + //Überprüfen der Buttons + //Weiter + if (Util.InRect(this.MouseX, this.MouseY, 200, 390, 50, 15)) + { + + WeiterText.Color = Globals.HighLightMagenta; + + + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + wahlFertig = true; + } + + if (wahlFertig) + { + //HOFSeite = 1; + anzeigeFertig = false; + + szenenTimer = 0; + } + } + + else + { + WeiterText.Color = Globals.StdGrün; + } + + //Ende + if (Util.InRect(this.MouseX, this.MouseY, 410, 390, 50, 15)) + { + + EndeText.Color = Globals.HighLightMagenta; + + + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + wahlFertig = true; + } + + if (wahlFertig) + { + AddGraphic(BlackScreen); + Tween(BlackScreen, new { Alpha = 1f }, 64f, 0f).Ease(Ease.BackInOut); + + anzeigeFertig = false; + + szenenTimer = 0; + } + } + + else + { + EndeText.Color = Globals.StdGrün; + } + } + } + } +} diff --git a/1869_Remake/Scenes/HandelScene.cs b/1869_Remake/Scenes/HandelScene.cs new file mode 100644 index 0000000..ec21c74 --- /dev/null +++ b/1869_Remake/Scenes/HandelScene.cs @@ -0,0 +1,2064 @@ +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 HandelScene : Scene + { + // Der Handelsscreen ist etwas Tricky da hier bei jedem neuen Mal des Aufrufens, eine neue Konstellation an Elementen gen werden muss + // -> Beispiel Konstellationen : BG: Holzhütte, Tafelwand: Ziegel mit Fass, Hintergrund: Tür geschlossen, Verkäufer: alter Mann + + //TO Do: a) Sprites für Baukasten extrahieren -> erster Schritt screens aller Einkaufszimmer für alle Häfen & Positionen bei den Sprites auslooten(möglichst vereinheitlichen sonst muss alles feinjustiert werden) + + + Dictionary BG = new Dictionary(); + Dictionary BG_Rechts = new Dictionary(); + Dictionary Verkäufer_Gesicht = new Dictionary(); + Dictionary Verkäufer_OKörper = new Dictionary(); + Dictionary Verkäufer_Hände = new Dictionary(); + Dictionary Verkäufer_DekoVerkäufer = new Dictionary(); + Dictionary Fenster_Tür = new Dictionary(); + Dictionary Tisch = new Dictionary(); + Dictionary TischFachL = new Dictionary(); + Dictionary TischFachM = new Dictionary(); + Dictionary TischFachR = new Dictionary(); + Dictionary Tisch_Deko_Boden = new Dictionary(); + Dictionary Tür_FeldL = new Dictionary(); + Dictionary Tür_FeldR = new Dictionary(); + Dictionary Decke_L = new Dictionary(); + Dictionary Decke_M = new Dictionary(); + Dictionary Decke_R = new Dictionary(); + Dictionary DekoTisch_L = new Dictionary(); + Dictionary DekoTisch_M = new Dictionary(); + Dictionary DekoTisch_R = new Dictionary(); + Dictionary Tafel = new Dictionary(); + Dictionary Tafel_BG = new Dictionary(); + Dictionary Tafel_VG = new Dictionary(); + + //Liste aller Images, die angezeigt werden müssen in diesem Screen + List AnzeigeListe = new List(); + + TextBuilder TextLieferant; + + 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; + + //Temporärer Speicherort für die im Auswahlbaum gewählte Ware + public Ware gewählteHandelsWare; + //Temporärer Speicherort für die Filiale die aktuell verfügbar ist + public Filiale gewählteSpielerFiliale; + //Temporärer Speicherort für die Filiale die aktuell verfügbar ist + public Schiff gewähltesSpielerSchiff; + public string gewählteGeldQuelle; + //Menge an Waren und Preis die gehandelt werden + public int gewählteMenge; + public int gewählterPreis; + public string gewähltesZiel; + public bool WareLeer = false; + public bool GeldLeer = false; + //Temporäre Liste der möglichen Geldquellen + public List möglicheGeldQuellen = new List(); + public int geldQuellenIndex = 0; + //Letzte dem Textbuilder übergebene Liste an Paramtern (Wird nur für Shortcut funktionalität verwender) + private List letzteÜbergebeneListe = new List(); + + public Hafen aktuellerHafen; + + //TempTextVariablen + Queue TempSprachText = new Queue(); + Queue TempSprachParams = new Queue(); + Queue TempQueue = new Queue(); + Schiff TempGeldQuellenSchiff; + Filiale TempGeldQuellenFiliale; + + + public HandelScene(string Preset) + { + //Initialisieren des Hauptbildschirms und einblenden + Globals.aktuelleSzene = "Handel"; + + //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); + + //Presets über die Dictionaries vorbereiten + setzePresets(); + + //Gewähltes Preset aus dem Pool in die anzeigeliste schreiben + importierePresetInListe(Preset); + + //anzeigen der anzeigeListe + ladePresets(); + + //TextBuilder einbinden (POS = Unterer RAND) + TextLieferant = new TextBuilder(Globals.aktuelleSzene); + Add(TextLieferant); + + //Einleitungssprachtexte + Queue WillkommensText = new Queue(); + WillkommensText.Enqueue("Helfen"); + TextLieferant.erzeugeSprachText(WillkommensText, new Queue(), Globals.Remake.HalfWidth, 100); + + //Auswahltexte + TextLieferant.erzeugeAuswahlText(new Queue(), 25, 410); + + //Tafeltexte + List TempWarenListeExport = new List(); + List TempWarenListeImport = new List(); + + //Füllen aller vorhanden Waren in eine Liste für die TafelTexte(Export zuerst) + foreach (Ware item in Globals.AlleHäfen[Preset].EXPORTWARE) + { + TempWarenListeExport.Add(item); + } + + foreach (Ware item in Globals.AlleHäfen[Preset].IMPORTWARE) + { + TempWarenListeImport.Add(item); + } + + //Erzeuge Tafeltexte mit Position der Tafel -> Texte werden intern im Builder richtig Positioniert und mit den Filler-Texten versehen + TextLieferant.erzeugeTafelText(TempWarenListeExport, TempWarenListeImport); + + //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(); + // In der Klasse wird nur anzeige logik behandelt -> Klicklogik wird von Textbuilder abgefangen + // Resultat eines Klicks wird hier aber gecheckt und bei richtiger Situation in andere Szene gewechselt + + //hochzählendes Zeitelement um Aktionen in der Szene zu Takten + szenenTimer++; + + if (FadeOutBlackScreen.Alpha >= 0.999f) + { + Globals.LetzteSzene = "Handel"; + 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(); + string auswahlMouseButton = TextLieferant.checkButtonAuswahl(); + + switch (TextLieferant.aktuelleEbene) + { + // Textbaum - Root + 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 werdenkd + case 1: + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + letzteÜbergebeneListe.Clear(); + + //Auswahl Angebot + foreach (Ware item in aktuellerHafen.EXPORTWARE) + { + TempQueue.Enqueue(item.BEZEICHNUNG); + letzteÜbergebeneListe.Add(item.BEZEICHNUNG); + } + + Queue TempSprachText = new Queue(); + + // Wenn Hafen keine Waren für Export hat kann keine Einkaufslogik erfolgen + if (TempQueue.Count() == 0) + { + + TempSprachText.Enqueue("Ausverkauft"); + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + } + else + { + // Wenn dieser Übergang kein Shortcut ist Sprachtext auslösen + if (TempQueue.Count() > 1) + { + TempSprachText.Enqueue("Wählen_EINKAUF"); + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + } + else + { + // Wenn nur eine Auswahlmöglichkeit im nächsten Baumzweig zu erwarten wäre, wird eine Auswahl vorgewählt (Shortcut Funktion) + if (TempQueue.Count() == 1) + { + TextLieferant.setAuswahl(1); + } + } + TextLieferant.wechsleAuswahlText("1.1A", TempQueue, true); + + } + + break; + case 2: + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + //Auswahl Verkauf + + //Sammeln aller möglichen Warenquellen + //Wenn Filiale vorhanden -> Lager ist mögliche Quelle + + // MöglicheGeldQuelle wird im Verkaufsstrang als ZielKasse benutzt + möglicheGeldQuellen.Clear(); + if (aktuellerHafen.filialeVorhanden) + { + foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) + { + if (f.BESITZER == Globals.AktuellerSpieler && f.LAGER.IsNotEmpty()) + { + TempQueue.Enqueue("Verkauf aus Lager"); + möglicheGeldQuellen.Add("LAGER"); + letzteÜbergebeneListe.Add("LAGER"); + } + } + + } + + //Wenn Schiffe vorhanden -> Schiff ist mögliche Quelle + foreach (Schiff Boot in aktuellerHafen.angedockteSchiffe) + { + if (Boot.COMMANDEUR == Globals.AktuellerSpieler) + { + if (Boot.LADUNG.IsNotEmpty()) + { + TempQueue.Enqueue(Boot.NAME); + + letzteÜbergebeneListe.Add(Boot.NAME); + } + //Mögliche Geldziele sind alle Schiffe des Spielers + möglicheGeldQuellen.Add(Boot.NAME); + + } + } + + // Wenn nur eine Auswahlmöglichkeit im nächsten Baumzweig zu erwarten wäre, wird eine Auswahl vorgewählt (Shortcut Funktion) + TempSprachText = new Queue(); + + // Wenn Hafen keine Waren für Import hat -> kann keine Verkaufslogik erfolgen + if (TempQueue.Count() == 0) + { + + TempSprachText.Enqueue("Warenlos"); + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + } + else + { + // Wenn dieser Übergang kein Shortcut ist Sprachtext auslösen + if (TempQueue.Count() == 1) + { + TextLieferant.setAuswahl(1); + } + else + { + TempSprachText.Enqueue("HANDEL_VERKAUFSQUELLE"); + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + } + TextLieferant.wechsleAuswahlText("1.2A", TempQueue, true); + } + break; + + case 3: + Console.WriteLine("Auswahl 3 Logik des Handelsfensters"); + + //Untere Auswahl im ersten MenüBaum = Verlassen + //FadeOut zu WorldMap + Tween(FadeOutBlackScreen, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + TextLieferant.setzeFadeOut(); + + break; + + } + + #endregion + + break; + //Auswahlmöglichkeiten Angebot (Hier werden die Exportwaren angezeigt) + case "1.1A": + #region AngebotsLogik - Warenauswahl + // Hier wird die Ware ausgewählt und die anzeige des Ziels vorbereitet + switch (tempAuswahl) + { + case 0: + //Noch keine Auswahl getroffen + break; + + case 999: + // 999 bei variablen Listen ist immer Abbruch + // Wenn abbruch erfolgen soll -> zurück zu Root + letzteÜbergebeneListe.Clear(); + gewählteHandelsWare = null; + gewählteSpielerFiliale = null; + gewähltesSpielerSchiff = null; + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + break; + + default: + // Bei allen anderen werten übernahme des aktuellen Wertes + // Es können nur max. 2 Exportwaren angezeigt werden trotzdem werden unendlich viele (außer 999 abgefangen) + + // Übernahme der gewählten Ware (-1 hier weil der Textbuilder von 1 beginnt zu zählen + gewählteHandelsWare = aktuellerHafen.EXPORTWARE[tempAuswahl - 1]; + letzteÜbergebeneListe.Clear(); + möglicheGeldQuellen.Clear(); + + // Aufbau der Auswahlliste, je nach dem was vorhanden ist (Keine Absicherung, da mindestens 1 Eintrag da sein muss sonst wäre man nicht in diesem Menü) + // Wenn aber nur 1 Eintrag vorhanden ist, direkt diesen auswählen (Shortcut Funktion) + if (aktuellerHafen.filialeVorhanden) + { + TempQueue.Enqueue("Die Ware soll ins Lager!"); + letzteÜbergebeneListe.Add("LAGER"); + möglicheGeldQuellen.Add("LAGER"); + + } + + foreach (Schiff Boot in aktuellerHafen.angedockteSchiffe) + { + TempQueue.Enqueue(Boot.NAME); + letzteÜbergebeneListe.Add(Boot.NAME); + möglicheGeldQuellen.Add(Boot.NAME); + + } + + // Da hier immer mindestens 1 ist brauchen wir auf keine gefunden nicht abfangen + if (TempQueue.Count() == 1) + { + //Shortcut zu Mengenbestimmungsscreen setzen + TextLieferant.setAuswahl(1); + } + else + { + // Wenn kein Shortcut erfolgen soll muss ein Text angezeigt werden + TempSprachText.Enqueue("Wählen_ZIEL"); + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + + } + //Wechsel zu Auswahl von Ziellagerort + TextLieferant.wechsleAuswahlText("1.1B", TempQueue, true); + break; + } + #endregion + break; + //Auswahlmöglichkeiten Ziellagerort (Hier werden die im Hafen vorhandenen Ziele angezeigt) + case "1.1B": + #region Angebotslogik - Ziellagerort + //Auswahl des Ziels und Vorbereitung für Handelsbestätigung + switch (tempAuswahl) + { + case 0: + //Noch keine Auswahl getroffen + break; + case 999: + // 999 bei variablen Listen ist immer Abbruch + + // Wenn abbruch erfolgen soll -> zurück zu Root + letzteÜbergebeneListe.Clear(); + gewählteHandelsWare = null; + gewählteSpielerFiliale = null; + gewähltesSpielerSchiff = null; + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + break; + + default: + // Bei allen anderen Werten + // Übernahme der letzen Auswahl (Überprüfen ob letzte Auswahl eine Filiale oder Schiff war) + gewähltesSpielerSchiff = null; + gewählteSpielerFiliale = null; + TempGeldQuellenSchiff = null; + TempGeldQuellenFiliale = null; + + bool TempWareMinKauf = false; + + // Übernahme des gewählten Ortes als default Geldquelle + geldQuellenIndex = tempAuswahl - 1; + gewählteGeldQuelle = möglicheGeldQuellen[geldQuellenIndex]; + + if (letzteÜbergebeneListe[tempAuswahl - 1] == "LAGER") + { + gewählteSpielerFiliale = aktuellerHafen.überprüfeAktuelleFilialeVorhanden(Globals.AktuellerSpieler); + TempGeldQuellenFiliale = gewählteSpielerFiliale; + } + else + { + // Wenn nicht die Filiale gewählt wurde sondern ein bestimmtes Schiff -> Finden des Schiffs + List TempListe = aktuellerHafen.überprüfeEigeneSchiffeVorhanden(Globals.AktuellerSpieler); + + foreach (Schiff s in TempListe) + { + if (s.NAME == letzteÜbergebeneListe[tempAuswahl - 1]) + { + gewähltesSpielerSchiff = s; + TempGeldQuellenSchiff = s; + break; + } + + } + } + + // Wenn der ZielLagerort bekannt ist muss die maximal Einkaufsmenge errechnet werden + gewählteMenge = 0; + gewählterPreis = 0; + if (gewählteSpielerFiliale != null) + { + + gewählteMenge = gewählteSpielerFiliale.BUDGET / (gewählteHandelsWare.LAGERPREIS); + if (gewählteMenge == 0) + { + TempWareMinKauf = true; + } + + //überprüfen, wie viel maximalware im Hafenlager ist + WareLeer = false; + foreach (Ware item in aktuellerHafen.EXPORTWARE) + { + if (item.BEZEICHNUNG == gewählteHandelsWare.BEZEICHNUNG) + { + if (item.MENGE < gewählteMenge) + { + // Wenn im Hafen verfügbare Menge kleiner der errechneten max budget Menge dann nur soviel verkaufen als auch im Hafen ist + gewählteMenge = item.MENGE; + //setzen Indikator, dass Mengengrenze erreicht ist + WareLeer = true; + } + } + } + gewählterPreis = gewählteMenge * gewählteHandelsWare.LAGERPREIS; + gewähltesZiel = "LAGER"; + + } + else + { + gewählteMenge = gewähltesSpielerSchiff.SCHIFFSBUDGET / (gewählteHandelsWare.LAGERPREIS); + if (gewählteMenge == 0) + { + TempWareMinKauf = true; + } + + //überprüfen, wie viel maximalware im Hafenlager ist + foreach (Ware item in aktuellerHafen.EXPORTWARE) + { + if (item.BEZEICHNUNG == gewählteHandelsWare.BEZEICHNUNG) + { + if (item.MENGE < gewählteMenge) + { + // Wenn im Hafen verfügbare Menge kleiner der errechneten max budget Menge dann nur soviel verkaufen als auch im Hafen ist + gewählteMenge = item.MENGE; + //setzen Indikator, dass Mengengrenze erreicht ist + WareLeer = true; + } + } + } + gewählterPreis = gewählteMenge * gewählteHandelsWare.LAGERPREIS; + gewähltesZiel = gewähltesSpielerSchiff.NAME; + } + + // Alte Übergabeliste wird nicht mehr benötigt und verworfen + letzteÜbergebeneListe.Clear(); + + // Aufbau der Auswahlliste, je nach dem was vorhanden ist (Keine Absicherung, da mindestens 1 Eintrag da sein muss sonst wäre man nicht in diesem Menü) + // Wenn aber nur 1 Eintrag vorhanden ist, direkt diesen auswählen (Shortcut Funktion) + + // 1. Param ist errechnete max Menge im Bezug auf vorhandenem Budget sein + TempQueue.Enqueue(gewählteMenge.ToString()); + letzteÜbergebeneListe.Add(gewählteMenge.ToString()); + + // 2. Param ist Lademittel der Ware + if (gewählteMenge > 1) + TempQueue.Enqueue(gewählteHandelsWare.LADEMITTEL + "N"); + else + TempQueue.Enqueue(gewählteHandelsWare.LADEMITTEL); + letzteÜbergebeneListe.Add(gewählteHandelsWare.LADEMITTEL); + + // 3. Param ist der Name der Ware + TempQueue.Enqueue(gewählteHandelsWare.BEZEICHNUNG); + letzteÜbergebeneListe.Add(gewählteHandelsWare.BEZEICHNUNG); + + // 4. Param ist der Zielort + if (gewähltesZiel == "LAGER") + { + TempQueue.Enqueue("INS " + gewähltesZiel); + } + else + { + TempQueue.Enqueue("AUF DIE " + gewähltesZiel); + } + letzteÜbergebeneListe.Add(gewähltesZiel); + + // 5. Param ist der GeldQuelle + if (gewähltesZiel == "LAGER") + { + TempQueue.Enqueue("IM " + gewähltesZiel + " VERFÜGE ICH"); + } + else + { + TempQueue.Enqueue("DIE " + gewähltesZiel + " VERFÜGT"); + } + letzteÜbergebeneListe.Add(gewähltesZiel); + + // 6. Param Budget des Ziels in EURO + if (TempGeldQuellenFiliale != null) + { + TempQueue.Enqueue((TempGeldQuellenFiliale.BUDGET / 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenFiliale.BUDGET / 100).ToString()); + } + else + { + TempQueue.Enqueue((TempGeldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); + } + + + // 7. Param Budget des Ziels in CENT + if (gewählteSpielerFiliale != null) + { + TempQueue.Enqueue((TempGeldQuellenFiliale.BUDGET % 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenFiliale.BUDGET % 100).ToString()); + } + else + { + TempQueue.Enqueue((TempGeldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); + } + + // Veranlassen eines Initialsprachtextes mit Erläuterung zum Preis -> Preisbildung wird zuerst erläutert + + // Überprüfen ob das gewählte Ziel genügend geld hat für wenigstens 1 Kiste Ware + if (TempWareMinKauf) + { + TempSprachText.Enqueue("Geldlos"); + TempSprachText.Enqueue("Geldlos2"); + TempSprachText.Enqueue("Geldlos3"); + + // Füllen der Sprachparameter + // # VERFÜGT NICHT ÜBER GENÜGEND GELD FÜR MINDESTENS 1 # + // 1. # = Geldquelle ("IHR LAGER" || "DIE "), 2. # = Lademittel + if (TempGeldQuellenFiliale != null) + { + TempSprachParams.Enqueue("IHR LAGER"); + } + else + { + TempSprachParams.Enqueue("DIE " + TempGeldQuellenSchiff.NAME); + } + + TempSprachParams.Enqueue((gewählteHandelsWare.LADEMITTEL)); + + } + else + { + // Wenn mehr als 1 Kiste gekauft werden kann wird dieser Text angezeigt + TempSprachText.Enqueue("Erläuterung1"); + TempSprachText.Enqueue("Erläuterung2"); + + // Füllen der Sprachparameter + // 1. Text: # ERHALTEN SIE FÜR $ #,# je # ! + // 1. # = Warenbezeichnung, 2. # = Preis Dollar, 3. # = Preis Cent, 4. # = Lademittel + + TempSprachParams.Enqueue(gewählteHandelsWare.BEZEICHNUNG); + TempSprachParams.Enqueue((gewählteHandelsWare.LAGERPREIS / 100).ToString()); + TempSprachParams.Enqueue((gewählteHandelsWare.LAGERPREIS % 100).ToString()); + TempSprachParams.Enqueue((gewählteHandelsWare.LADEMITTEL)); + // 2. Text: DIE # # KOSTEN SIE DAHER $ #,# + // 1. # = Menge, 2. # = Lademittel, 3. # = Preis Dollar, 4. # = Preis Cent + TempSprachParams.Enqueue(gewählteMenge.ToString()); + if (gewählteMenge > 1) + { + TempSprachParams.Enqueue((gewählteHandelsWare.LADEMITTEL + "N")); + } + else + { + TempSprachParams.Enqueue((gewählteHandelsWare.LADEMITTEL)); + } + + TempSprachParams.Enqueue((gewählterPreis / 100).ToString()); + TempSprachParams.Enqueue((gewählterPreis % 100).ToString()); + + } + + TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + + TextLieferant.wechsleAuswahlText("1.1.1", TempQueue, false); + + break; + } + + #endregion + break; + //Auswahlmöglichkeiten Abschluss des Handels (Hier wird Preis/Menge) + case "1.1.1": + #region Abschluss Einkauf + + switch (tempAuswahl) + { + case 0: + //Noch keine Auswahl getroffen + break; + case 1: + // Auswahl 1: Mengenregulierung (Links klick mehr Menge/Rechtsklick weniger Menge) + //Neu Berechnung der Menge und überprüfen ob Max oder Min Menge erreicht + + // Indikator resetten + WareLeer = false; + GeldLeer = false; + + if (auswahlMouseButton == "MausLinks") + { + // Logik fürs erhöhen der Menge + if (TempGeldQuellenFiliale != null) + { + // Logik bei gewählter Filiale + + // Überprüfen, ob mindestens 1 Lademittel gekauft werden kann + int TempMaxMenge = TempGeldQuellenFiliale.BUDGET / (gewählteHandelsWare.LAGERPREIS); + + // Erhöhen der Menge(Wenn Warenmenge > im Hafen vorhandener Menge wird erhöhung nicht erlaubt + Sprachtext als hinweis) + gewählteMenge++; + + if (TempMaxMenge == 0) + { + gewählteMenge = 0; + } + + //Sprachtext vorbereiten + if (gewählteMenge == 0) + { + //Minimalmenge erreicht -> Ausgabe Sprachtext für zu keine Berechnung + TempSprachText.Enqueue("KeineKosten"); + } + else + { + + //überprüfen, wie viel maximalware im Hafenlager ist + foreach (Ware item in aktuellerHafen.EXPORTWARE) + { + if (item.BEZEICHNUNG == gewählteHandelsWare.BEZEICHNUNG) + { + if (item.MENGE < gewählteMenge) + { + // Wenn im Hafen verfügbare Menge kleiner der errechneten max budget Menge dann nur soviel verkaufen als auch im Hafen ist + gewählteMenge = item.MENGE; + //setzen Indikator, dass Mengengrenze erreicht ist + WareLeer = true; + } + } + } + + // Wenn gewählte Menge größer als maximale Menge ist muss wieder zurückreduziert werden und budget reicht nicht text eingeblendet werden + if (TempMaxMenge < gewählteMenge) + { + gewählteMenge--; + //Maximalmenge erreicht -> Ausgabe Sprachtext für zu viel Menge + GeldLeer = true; + } + } + + + } + else + { + // Logik bei gewähltem Schiff + // Überprüfen, ob mindestens 1 Lademittel gekauft werden kann + int TempMaxMenge = TempGeldQuellenSchiff.SCHIFFSBUDGET / (gewählteHandelsWare.LAGERPREIS); + + // Erhöhen der Menge(Wenn Warenmenge > im Hafen vorhandener Menge wird erhöhung nicht erlaubt + Sprachtext als hinweis) + gewählteMenge++; + + if (TempMaxMenge == 0) + { + gewählteMenge = 0; + } + + //Sprachtext vorbereiten + if (gewählteMenge == 0) + { + //Minimalmenge erreicht -> Ausgabe Sprachtext für zu keine Berechnung + TempSprachText.Enqueue("KeineKosten"); + } + else + { + //überprüfen, wie viel maximalware im Hafenlager ist + foreach (Ware item in aktuellerHafen.EXPORTWARE) + { + if (item.BEZEICHNUNG == gewählteHandelsWare.BEZEICHNUNG) + { + if (item.MENGE < gewählteMenge) + { + // Wenn im Hafen verfügbare Menge kleiner der errechneten max budget Menge dann nur soviel verkaufen als auch im Hafen ist + gewählteMenge = item.MENGE; + //setzen Indikator, dass Mengengrenze erreicht ist + WareLeer = true; + } + } + } + + // Wenn gewählte Menge größer als maximale Menge ist muss wieder zurückreduziert werden und budget reicht nicht text eingeblendet werden + if (TempMaxMenge < gewählteMenge) + { + gewählteMenge--; + GeldLeer = true; + + } + + + } + } + + } + else + { + if (auswahlMouseButton == "MausRechts") + { + // Logik fürs vermindern der Menge + // Fallunterscheidung für Filiale oder Schiff nicht nötig da beide untergrenze 0 haben + if (gewählteMenge <= 0) + { + //Minimalmenge erreicht -> Ausgabe Sprachtext für zu keine Berechnung + gewählteMenge = 0; + TempSprachText.Enqueue("KeineKosten"); + + } + else + { + // Wenn nicht erreicht -> Vermindere um 1 ( Im Original waren es hier Mengenabschnitte -> Ich finde einzelschritte Sinnvoller) + gewählteMenge--; + } + } + } + + // Neu berechnen des Preises je nach neuer Menge + gewählterPreis = gewählteMenge * gewählteHandelsWare.LAGERPREIS; + + // Aufbau der Auswahlliste, je nach dem was vorhanden ist (Keine Absicherung, da mindestens 1 Eintrag da sein muss sonst wäre man nicht in diesem Menü) + // Wenn aber nur 1 Eintrag vorhanden ist, direkt diesen auswählen (Shortcut Funktion) + + // 1. Param ist errechnete max Menge im Bezug auf vorhandenem Budget sein + TempQueue.Enqueue(gewählteMenge.ToString()); + letzteÜbergebeneListe.Add(gewählteMenge.ToString()); + + // 2. Param ist Lademittel der Ware + if (gewählteMenge > 1) + { + TempQueue.Enqueue(gewählteHandelsWare.LADEMITTEL + "N"); + } + else + { + TempQueue.Enqueue(gewählteHandelsWare.LADEMITTEL); + } + + letzteÜbergebeneListe.Add(gewählteHandelsWare.LADEMITTEL); + + // 3. Param ist der Name der Ware + TempQueue.Enqueue(gewählteHandelsWare.BEZEICHNUNG); + letzteÜbergebeneListe.Add(gewählteHandelsWare.BEZEICHNUNG); + + // 4. Param ist der Zielort + if (gewähltesZiel == "LAGER") + { + TempQueue.Enqueue("INS " + gewähltesZiel); + } + else + { + TempQueue.Enqueue("AUF DIE " + gewähltesZiel); + } + + // 5. Param ist der GeldQuelle + if (gewählteGeldQuelle == "LAGER") + { + TempQueue.Enqueue("IM " + gewählteGeldQuelle + " VERFÜGE ICH"); + } + else + { + TempQueue.Enqueue("DIE " + gewählteGeldQuelle + " VERFÜGT"); + } + letzteÜbergebeneListe.Add(gewählteGeldQuelle); + + // 6. Param Budget des Ziels in EURO + if (gewählteGeldQuelle == "LAGER") + { + TempQueue.Enqueue((TempGeldQuellenFiliale.BUDGET / 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenFiliale.BUDGET / 100).ToString()); + } + else + { + TempQueue.Enqueue((TempGeldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); + } + + // 7. Param Budget des Ziels in CENT + if (TempGeldQuellenFiliale != null) + { + TempQueue.Enqueue((TempGeldQuellenFiliale.BUDGET % 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenFiliale.BUDGET % 100).ToString()); + } + else + { + TempQueue.Enqueue((TempGeldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); + } + + // Veranlassen eines Sprachtextes mit Erläuterung zum neuen Preis + // & Füllen der Sprachparameter + // Besonderheit: Geldmangel > Warenmangel | D.h. Wenn Spieler sowohl zu wenig Geld hat sowie der Hafen nicht mehr Ware hat wird nur + // angezeigt, dass das Geld fehlt + if (GeldLeer) + { + TempSprachText.Enqueue("BudgetReichtNicht"); + TempSprachText.Enqueue("Kosten"); + TempSprachParams.Enqueue((gewählterPreis / 100).ToString()); + TempSprachParams.Enqueue((gewählterPreis % 100).ToString()); + GeldLeer = false; + } + else + { + if (WareLeer) + { + TempSprachText.Enqueue("Restposten1"); + TempSprachText.Enqueue("Restposten2"); + // Params Restposten 1 + TempSprachParams.Enqueue(gewählteMenge.ToString()); + if (gewählteMenge > 1) + { + TempSprachParams.Enqueue(gewählteHandelsWare.LADEMITTEL + "N"); + } + else + { + TempSprachParams.Enqueue(gewählteHandelsWare.LADEMITTEL); + } + TempSprachParams.Enqueue(gewählteHandelsWare.BEZEICHNUNG); + // Params Restposten 2 + TempSprachParams.Enqueue(gewählteMenge.ToString()); + if (gewählteMenge > 1) + { + TempSprachParams.Enqueue(gewählteHandelsWare.LADEMITTEL + "N"); + } + else + { + TempSprachParams.Enqueue(gewählteHandelsWare.LADEMITTEL); + } + TempSprachParams.Enqueue((gewählterPreis / 100).ToString()); + TempSprachParams.Enqueue((gewählterPreis % 100).ToString()); + WareLeer = false; + } + else + { + if (gewählteMenge != 0) + { + TempSprachText.Enqueue("Kosten"); + TempSprachParams.Enqueue((gewählterPreis / 100).ToString()); + TempSprachParams.Enqueue((gewählterPreis % 100).ToString()); + } + } + } + + TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + + TextLieferant.wechsleAuswahlText("1.1.1", TempQueue, false); + + break; + case 2: + // Auswahl 2: Abschluss Handel + // Übergeben der gekauften Ware an den Ziellagerort + // Nur Logik erlauben wenn links geklickt wurde nicht rechts + if (auswahlMouseButton == "MausLinks") + { + if (gewähltesZiel == "LAGER") + { + //Einlagern der Ware in die vorhandene Filiale im Hafen + foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) + { + if (f.BESITZER == Globals.AktuellerSpieler) + { + f.einlagernWare(new Ware(gewählteHandelsWare.BEZEICHNUNG, 0, gewählteMenge, 0, gewählteHandelsWare.LADEMITTEL)); + break; + } + } + + } + else + { + //Einlagern der Ware in das angedockte Schiff + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.NAME == gewähltesSpielerSchiff.NAME) + { + s.einlagernLadung(new Ware(gewählteHandelsWare.BEZEICHNUNG, 0, gewählteMenge, 0, gewählteHandelsWare.LADEMITTEL)); + break; + } + } + + } + + // Abziehen des Budgets der Geldquelle + if (gewählteGeldQuelle == "LAGER") + { + + foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) + { + if (f == TempGeldQuellenFiliale) + { + f.verringereBudget(gewählterPreis); + break; + } + } + } + else + { + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s == TempGeldQuellenSchiff) + { + s.vermindernBudget(gewählterPreis); + break; + } + } + + } + + // Abziehen der Ware vom Hafenlager + foreach (Ware item in aktuellerHafen.EXPORTWARE) + { + if (item.BEZEICHNUNG == gewählteHandelsWare.BEZEICHNUNG) + { + // reduzieren der Ware vom Bestand + item.MENGE -= gewählteMenge; + + } + + } + // Wenn Ware durch reduzierung leer wurde -> Löschen aus dem Bestand + for (int index = 0; index < aktuellerHafen.EXPORTWARE.Count(); index++) + { + if (aktuellerHafen.EXPORTWARE[index].MENGE == 0) + { + aktuellerHafen.EXPORTWARE.RemoveAt(index); + // wenn ein Eintrag gefunden -> reset der Schleife da sich Count geändert hat (Notwendig wenn mehrere Waren je Prozess auf 0 gefallen sind) + index = 0; + } + } + + // Zurück zu Root + letzteÜbergebeneListe.Clear(); + gewählteHandelsWare = null; + gewählteSpielerFiliale = null; + gewähltesSpielerSchiff = null; + gewähltesZiel = ""; + + // Wenn abbruch erfolgen soll -> zurück zu Root (Wenn zurück zu Root haben sich evtl Tafeltexte verändert(weil leergekauft)-> neu zeichnen + + List TempWarenListeExport = new List(); + List TempWarenListeImport = new List(); + + //Füllen aller vorhanden Waren in eine Liste für die TafelTexte(Export zuerst) + foreach (Ware item in aktuellerHafen.EXPORTWARE) + { + TempWarenListeExport.Add(item); + } + + foreach (Ware item in aktuellerHafen.IMPORTWARE) + { + TempWarenListeImport.Add(item); + } + TextLieferant.erzeugeTafelText(TempWarenListeExport, TempWarenListeImport); + + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + } + break; + case 3: + // Auswahl 3: Auswahl Bezahlungsquelle + + // Untersuchen, ob es noch andere Bezahlungsquellen gibt(angedockte Schiffe oder einer Filiale) + if (möglicheGeldQuellen.Count() > 1) + { + if (auswahlMouseButton == "MausRechts") + { + geldQuellenIndex--; + } + else + { + geldQuellenIndex++; + } + + if (geldQuellenIndex == möglicheGeldQuellen.Count()) + { + geldQuellenIndex = 0; + } + + if (geldQuellenIndex < 0) + { + geldQuellenIndex = möglicheGeldQuellen.Count() - 1; + } + + gewählteGeldQuelle = möglicheGeldQuellen[geldQuellenIndex]; + TempGeldQuellenFiliale = null; + TempGeldQuellenSchiff = null; + + if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") + { + foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) + { + if (f.BESITZER == Globals.AktuellerSpieler) + { + TempGeldQuellenFiliale = f; + break; + } + + + } + } + else + { + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.NAME == möglicheGeldQuellen[geldQuellenIndex]) + { + TempGeldQuellenSchiff = s; + break; + } + + + } + } + + // Zuerst überprüfen ob neue Geldquelle genug Geld für mindestens 1 Lademittel hat + int TempMaxMenge = 0; + if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") + { + TempMaxMenge = TempGeldQuellenFiliale.BUDGET / (gewählteHandelsWare.LAGERPREIS); + + } + else + { + TempMaxMenge = TempGeldQuellenSchiff.SCHIFFSBUDGET / (gewählteHandelsWare.LAGERPREIS); + } + + // neue gewählte Menge ist immer die Maximalmenge der neuen Geldquelle + //Überprüfen ob Hafenlager großgenug ist für Budget der neuen Quelle + foreach (Ware item in aktuellerHafen.EXPORTWARE) + { + if (item == gewählteHandelsWare) + { + if (item.MENGE >= TempMaxMenge) + { + gewählteMenge = TempMaxMenge; + } + else + { + gewählteMenge = item.MENGE; + } + break; + } + } + + gewählterPreis = gewählteMenge * gewählteHandelsWare.LAGERPREIS; + + // Da Geldquelle geändert wurde -> neu Zeichnen und berechnen der des Auswahltextes + // Aufbau der Auswahlliste, je nach dem was vorhanden ist (Keine Absicherung, da mindestens 1 Eintrag da sein muss sonst wäre man nicht in diesem Menü) + // Wenn aber nur 1 Eintrag vorhanden ist, direkt diesen auswählen (Shortcut Funktion) + + // 1. Param ist errechnete max Menge im Bezug auf vorhandenem Budget sein + TempQueue.Enqueue(gewählteMenge.ToString()); + letzteÜbergebeneListe.Add(gewählteMenge.ToString()); + + // 2. Param ist Lademittel der Ware + if (gewählteMenge > 1) + { + TempQueue.Enqueue(gewählteHandelsWare.LADEMITTEL + "N"); + } + else + { + TempQueue.Enqueue(gewählteHandelsWare.LADEMITTEL); + } + letzteÜbergebeneListe.Add(gewählteHandelsWare.LADEMITTEL); + + // 3. Param ist der Name der Ware + TempQueue.Enqueue(gewählteHandelsWare.BEZEICHNUNG); + letzteÜbergebeneListe.Add(gewählteHandelsWare.BEZEICHNUNG); + + // 4. Param ist der Zielort + if (gewähltesZiel == "LAGER") + { + TempQueue.Enqueue("INS " + gewähltesZiel); + } + else + { + TempQueue.Enqueue("AUF DIE " + gewähltesZiel); + } + + // 5. Param ist der GeldQuelle -> Übernahme der geänderten Geldquelle + if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") + { + + TempQueue.Enqueue("IM " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGE ICH"); + letzteÜbergebeneListe.Add(möglicheGeldQuellen[geldQuellenIndex]); + + } + else + { + + TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); + letzteÜbergebeneListe.Add(möglicheGeldQuellen[geldQuellenIndex]); + } + + // 6. Param Budget der Geldquelle in EURO + if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") + { + TempQueue.Enqueue((TempGeldQuellenFiliale.BUDGET / 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenFiliale.BUDGET / 100).ToString()); + } + else + { + TempQueue.Enqueue((TempGeldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); + } + + // 7. Param Budget der Geldquelle in CENT + if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") + { + TempQueue.Enqueue((TempGeldQuellenFiliale.BUDGET % 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenFiliale.BUDGET % 100).ToString()); + } + else + { + TempQueue.Enqueue((TempGeldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); + } + + // Veranlassen eines Sprachtextes mit Erläuterung zum neuen Preis + // & Füllen der Sprachparameter + + // Wenn neue gewählte Menge 0 ist, wird ein spezieller Text angezeigt + if (gewählteMenge != 0) + { + TempSprachText.Enqueue("Kosten"); + TempSprachParams.Enqueue((gewählterPreis / 100).ToString()); + TempSprachParams.Enqueue((gewählterPreis % 100).ToString()); + } + else + { + //Minimalmenge erreicht -> Ausgabe Sprachtext für zu keine Berechnung + TempSprachText.Enqueue("KeineKosten"); + } + + TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + + TextLieferant.wechsleAuswahlText("1.1.1", TempQueue, false, false); + } + // wenn nicht mehr als 1 Geldquellen vorhanden sind soll einfach nichts passieren + + break; + case 4: + // Auswahl 4: Abbruch Handel + letzteÜbergebeneListe.Clear(); + gewählteHandelsWare = null; + gewählteSpielerFiliale = null; + gewähltesSpielerSchiff = null; + gewähltesZiel = ""; + + // Wenn abbruch erfolgen soll -> zurück zu Root + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + break; + } + break; + #endregion + + + case "1.2A": + //Auswahlmöglichkeiten Verkauf (Hier wird der Quelllagerort gewählt) + #region VerkaufsLogik - Auswahl Quelle + + switch (tempAuswahl) + { + case 0: + //Noch keine Auswahl getroffen + break; + case 999: + // 999 bei variablen Listen ist immer Abbruch + + // Wenn abbruch erfolgen soll -> zurück zu Root + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + break; + + default: + // Bei allen anderen Werten + // Übernahme der letzen Auswahl (Überprüfen ob letzte Auswahl eine Filiale oder Schiff war) + gewähltesSpielerSchiff = null; + gewählteSpielerFiliale = null; + TempGeldQuellenFiliale = null; + TempGeldQuellenSchiff = null; + + // Übernahme des gewählten Ortes als default Warenquelle + if (letzteÜbergebeneListe[tempAuswahl - 1] == "LAGER") + { + gewählteSpielerFiliale = aktuellerHafen.überprüfeAktuelleFilialeVorhanden(Globals.AktuellerSpieler); + gewähltesZiel = "LAGER"; + + foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) + { + if (f.BESITZER == Globals.AktuellerSpieler) + { + TempGeldQuellenFiliale = f; + geldQuellenIndex = tempAuswahl - 1; + break; + } + + } + + } + else + { + // Wenn nicht die Filiale gewählt wurde sondern ein bestimmtes Schiff -> Finden des Schiffs + List TempListe = aktuellerHafen.überprüfeEigeneSchiffeVorhanden(Globals.AktuellerSpieler); + + // Wenn mehrere eigene Schiffe im Hafen sind -> Suchen des gewählten Schiffes + foreach (Schiff s in TempListe) + { + if (s.NAME == letzteÜbergebeneListe[tempAuswahl - 1]) + { + gewähltesSpielerSchiff = s; + gewähltesZiel = s.NAME; + TempGeldQuellenSchiff = s; + geldQuellenIndex = tempAuswahl - 1; + } + + } + } + + TempQueue = new Queue(); + // Alte Übergabeliste wird nicht mehr benötigt und verworfen + letzteÜbergebeneListe.Clear(); + + // Wenn Warenquelle vorhanden ist muss aus den vorhandenen Waren gewählt werden + if (gewählteSpielerFiliale != null) + { + foreach (Ware item in gewählteSpielerFiliale.LAGER) + { + TempQueue.Enqueue(item.BEZEICHNUNG); + letzteÜbergebeneListe.Add(item.BEZEICHNUNG); + } + + } + else + { + foreach (Ware item in gewähltesSpielerSchiff.LADUNG) + { + TempQueue.Enqueue(item.BEZEICHNUNG); + letzteÜbergebeneListe.Add(item.BEZEICHNUNG); + } + } + + // Veranlassen eines Initialsprachtextes mit Erläuterung zum Preis -> Preisbildung wird zuerst erläutert + TempSprachText = new Queue(); + TempSprachParams = new Queue(); + + if (TempQueue.Count() == 1) + { + TextLieferant.setAuswahl(1); + } + + //TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + + TextLieferant.wechsleAuswahlText("1.2B", TempQueue, true); + break; + + } + #endregion + break; + + case "1.2B": + //Auswahlmöglichkeiten Verkauf (Hier wird Ware des Quelllagerorts gewählt) + #region VerkaufsLogik - Auswahl Quelle + + switch (tempAuswahl) + { + case 0: + //Noch keine Auswahl getroffen + break; + case 999: + // 999 bei variablen Listen ist immer Abbruch + + //Wenn abbruch erfolgen soll -> zurück zu Vorherigen Menü + //Vorheriges Menü neu Aufbauen (Auswahl Warenbezugsquelle) + //Wenn Filiale vorhanden -> Lager ist mögliche Quelle + letzteÜbergebeneListe.Clear(); + TempQueue = new Queue(); + if (aktuellerHafen.filialeVorhanden) + { + foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) + { + if (f.BESITZER == Globals.AktuellerSpieler && f.LAGER.IsNotEmpty()) + { + TempQueue.Enqueue("Verkauf aus Lager"); + letzteÜbergebeneListe.Add("LAGER"); + } + } + + } + + //Wenn Schiffe vorhanden -> Schiff ist mögliche Quelle + foreach (Schiff Boot in aktuellerHafen.angedockteSchiffe) + { + if (Boot.COMMANDEUR == Globals.AktuellerSpieler && Boot.LADUNG.IsNotEmpty()) + { + TempQueue.Enqueue(Boot.NAME); + letzteÜbergebeneListe.Add(Boot.NAME); + } + } + + TempSprachText = new Queue(); + TempSprachParams = new Queue(); + + TempSprachText.Enqueue("HANDEL_VERKAUFSQUELLE"); + TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + + TextLieferant.wechsleAuswahlText("1.2A", TempQueue, true); + break; + + default: + // Bei allen anderen Werten + // Übernahme der letzen Auswahl (Verkaufte Ware) + Voreinstellen der MaximalMenge + + if (gewähltesZiel == "LAGER") + { + foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) + { + if (f.BESITZER == Globals.AktuellerSpieler) + { + foreach (Ware item in f.LAGER) + { + if (item.BEZEICHNUNG == letzteÜbergebeneListe[tempAuswahl - 1]) + { + //Kopieren der Ware für später bearbeitung + gewählteHandelsWare = new Ware(item); + // Menge ist immer die im Lager maximal vorhandene Menge + gewählteMenge = gewählteHandelsWare.MENGE; + //Wenn die Ware gefunden wurde ist die Bearbeitung abgeschlossen + break; + } + } + //Wenn die Filiale gefunden wurde ist Bearbeitung abgeschlossen + break; + } + } + + } + else + { + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.NAME == gewähltesZiel) + { + foreach (Ware item in s.LADUNG) + { + if (item.BEZEICHNUNG == letzteÜbergebeneListe[tempAuswahl - 1]) + { + //Kopieren der Ware für spätere Bearbeitung + gewählteHandelsWare = new Ware(item); + //Menge ist immer die in der Ladung vorhandenen maximal Menge + gewählteMenge = gewählteHandelsWare.MENGE; + //Wenn Ware gefunden wurde ist Bearbeitung abgeschlossen + break; + } + } + //Wenn Zielschiff gefunden wurde ist Bearbeitung abgeschlossen + break; + } + + } + } + + // Wenn Ware übernommen ist muss Preis errechnet werden -> Als Referenz wird die ImportwarenListe (Und der Preis dazu genommen) + // Sollte die Importwarenliste des Hafens diese Ware nicht benötigen wird die Hälfte des Durchschnittspreises genommen (ist vordefiniert) + // Sonderregel: Wenn die Menge der erwünschten Ware unter eine bestimmte Menge fällt wird nur noch ein Teil des Importpreises gezahlt + + //PreisReduziert status: + //0 = keine Reduktion -> Vollpreis + //1 = etwas Reduktion -> Teilpreis + //2 = nicht erwünscht -> mindestpreis + int PreisReduziert = 2; + gewählterPreis = 0; + foreach (Ware item in aktuellerHafen.IMPORTWARE) + { + if (item.BEZEICHNUNG == gewählteHandelsWare.BEZEICHNUNG) + { + // Wenn die Ware pauschal unter 25 benötigt wird, wird nur noch 3/4 des Import preises gezahlt + anderer Sprachtext als sonst + if (item.MENGE <= 25) + { + PreisReduziert = 1; + gewählterPreis = gewählteMenge * (item.LAGERPREIS * 75 / 100); + } + else + { + PreisReduziert = 0; + gewählterPreis = gewählteMenge * item.LAGERPREIS; + } + } + } + + // Wenn Ware nicht importiert wird, wird der Preis aus der globalen reduzierten Preisliste genommen + if (PreisReduziert == 2) + { + gewählterPreis = Globals.PreisListe_UnerwünschteWare[gewählteHandelsWare.BEZEICHNUNG]; + } + + //Aufbau der Parameter für die Auswahltexte + // 1. Param ist errechnete max Menge im Bezug auf vorhandenem Budget sein + TempQueue.Enqueue(gewählteMenge.ToString()); + letzteÜbergebeneListe.Add(gewählteMenge.ToString()); + + // 2. Param ist Lademittel der Ware + if (gewählteMenge > 1) + { + TempQueue.Enqueue(gewählteHandelsWare.LADEMITTEL + "N"); + } + else + { + TempQueue.Enqueue(gewählteHandelsWare.LADEMITTEL); + } + letzteÜbergebeneListe.Add(gewählteHandelsWare.LADEMITTEL); + + // 3. Param ist der Name der Ware + TempQueue.Enqueue(gewählteHandelsWare.BEZEICHNUNG); + letzteÜbergebeneListe.Add(gewählteHandelsWare.BEZEICHNUNG); + + // 4. Param ist der GeldQuelle + if (gewähltesZiel == "LAGER") + { + TempQueue.Enqueue("IM " + gewähltesZiel + " verfüge ich "); + } + else + { + TempQueue.Enqueue("AUF DER " + gewähltesZiel + " verfüge ich "); + } + letzteÜbergebeneListe.Add(gewähltesZiel); + + // 5. Param Budget des Ziels in EURO + if (TempGeldQuellenFiliale != null) + { + TempQueue.Enqueue((TempGeldQuellenFiliale.BUDGET / 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenFiliale.BUDGET / 100).ToString()); + } + else + { + TempQueue.Enqueue((TempGeldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); + } + + // 6. Param Budget des Ziels in CENT + if (TempGeldQuellenFiliale != null) + { + TempQueue.Enqueue((TempGeldQuellenFiliale.BUDGET % 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenFiliale.BUDGET % 100).ToString()); + } + else + { + TempQueue.Enqueue((TempGeldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); + } + + // Je nachdem wie viel reduziert wurde, wird anderer Sprachtext erstellt + TempSprachText = new Queue(); + TempSprachParams = new Queue(); + switch (PreisReduziert) + { + case 0: + break; + case 1: + break; + case 2: + break; + + } + + //TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + + TextLieferant.wechsleAuswahlText("1.2.1", TempQueue, false); + break; + } + #endregion + break; + case "1.2.1": + + #region Verkaufsbestätigung + //TODO: Preisspannen Logik untersuchen und implementieren beim Verkauf + //Biserhige Erkentnis: Wenn Ware hohen Import hat gibts Sonderpreise, wenn Ware keinen Import hat gibts Standartisierten Minimalstpreis + // Eventuell gilt: 3 Preis zonen (Hoher Import, regulärer Import, Kein Import) + // Herauszufinden gilt auch die Geldbeträge im Hohen import bereich -> Sind nicht standardisiert (Z.B Früchte in Triest kosten 1$ mehr, in Sydney aber 1.50$ | evtl Prozentual?) + switch (tempAuswahl) + { + case 0: + //Noch keine Auswahl getroffen + break; + case 1: + //Auswahl 1 = Auswahl Menge + + // Indikator resetten + WareLeer = false; + + // Linksklick Erhöhung der Menge, Rechtsklick Verminderung der Menge + if (auswahlMouseButton == "MausLinks") + { + // Logik fürs erhöhen der Menge -> Erhöhen ist nur erlaubt wenn nicht maximum der Ware erreicht ist + if (gewählteSpielerFiliale != null) + { + foreach (Ware item in gewählteSpielerFiliale.LAGER) + { + if (item.BEZEICHNUNG == gewählteHandelsWare.BEZEICHNUNG) + { + if (gewählteMenge < item.MENGE) + { + gewählteMenge++; + } + else + { + // Wenn nicht erhöht werden konnte hat man nicht mehr im Lager -> Erzeugt besonderen Hinweis Sprachtext + WareLeer = true; + } + break; + } + + } + + } + else + { + foreach (Ware item in gewähltesSpielerSchiff.LADUNG) + { + if (item.BEZEICHNUNG == gewählteHandelsWare.BEZEICHNUNG) + { + if (gewählteMenge < item.MENGE) + { + gewählteMenge++; + } + else + { + // Wenn nicht erhöht werden konnte hat man nicht mehr in Ladung -> Erzeugt besonderen Hinweis Sprachtext + WareLeer = true; + } + break; + } + + } + } + + } + else + { + if (auswahlMouseButton == "MausRechts") + { + // Logik fürs vermindern der Menge -> Vermindern ist nur erlaubt wenn nicht 0 erreicht ist + if (gewählteMenge > 0) + { + gewählteMenge--; + } + + } + + } + + // Neu berechnen des Preises je nach neuer Menge + int PreisReduziert = 2; + gewählterPreis = 0; + foreach (Ware item in aktuellerHafen.IMPORTWARE) + { + if (item.BEZEICHNUNG == gewählteHandelsWare.BEZEICHNUNG) + { + // Wenn die Ware pauschal unter 25 benötigt wird, wird nur noch 3/4 des Import preises gezahlt + anderer Sprachtext als sonst + if (item.MENGE <= 25) + { + PreisReduziert = 1; + gewählterPreis = gewählteMenge * (item.LAGERPREIS * 75 / 100); + } + else + { + PreisReduziert = 0; + gewählterPreis = gewählteMenge * item.LAGERPREIS; + } + } + } + + // Wenn Ware nicht importiert wird, wird der Preis aus der globalen reduzierten Preisliste genommen + if (PreisReduziert == 2) + { + gewählterPreis = Globals.PreisListe_UnerwünschteWare[gewählteHandelsWare.BEZEICHNUNG] * gewählteMenge; + } + + //Aufbau der Parameter für die Auswahltexte + // 1. Param ist errechnete max Menge im Bezug auf vorhandenem Budget sein + TempQueue.Enqueue(gewählteMenge.ToString()); + letzteÜbergebeneListe.Add(gewählteMenge.ToString()); + + // 2. Param ist Lademittel der Ware + if (gewählteMenge > 1) + { + TempQueue.Enqueue(gewählteHandelsWare.LADEMITTEL + "N"); + } + else + { + TempQueue.Enqueue(gewählteHandelsWare.LADEMITTEL); + } + letzteÜbergebeneListe.Add(gewählteHandelsWare.LADEMITTEL); + + // 3. Param ist der Name der Ware + TempQueue.Enqueue(gewählteHandelsWare.BEZEICHNUNG); + letzteÜbergebeneListe.Add(gewählteHandelsWare.BEZEICHNUNG); + + // 4. Param ist der GeldQuelle + if (gewählteGeldQuelle == "LAGER") + { + TempQueue.Enqueue("IM " + gewählteGeldQuelle); + } + else + { + TempQueue.Enqueue("AUF DER " + gewählteGeldQuelle); + } + letzteÜbergebeneListe.Add(gewählteGeldQuelle); + + // 5. Param Budget des Ziels in EURO + if (TempGeldQuellenFiliale != null) + { + TempQueue.Enqueue((TempGeldQuellenFiliale.BUDGET / 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenFiliale.BUDGET / 100).ToString()); + } + else + { + TempQueue.Enqueue((TempGeldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); + } + + // 6. Param Budget des Ziels in CENT + if (TempGeldQuellenFiliale != null) + { + TempQueue.Enqueue((TempGeldQuellenFiliale.BUDGET % 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenFiliale.BUDGET % 100).ToString()); + } + else + { + TempQueue.Enqueue((TempGeldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); + } + + // Je nachdem wie viel reduziert wurde, wird anderer Sprachtext erstellt + TempSprachText = new Queue(); + TempSprachParams = new Queue(); + switch (PreisReduziert) + { + case 0: + break; + case 1: + break; + case 2: + break; + + } + + //TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + + TextLieferant.wechsleAuswahlText("1.2.1", TempQueue, false); + + break; + case 2: + //Auswahl 2 = Bestätigen Verkauf + // Übergeben der Verkauften Ware an den Hafen (Abziehen vom Import) + // Nur Logik erlauben wenn links geklickt wurde nicht rechts + + // jedes Spieler Schiff und Filiale sollten gewählt werden können -> überarbeiten der Geldziel logik im Verkauf + if (auswahlMouseButton == "MausLinks") + { + // Zuerst vermindern des Bestandes im Ursprungslager + if (gewähltesZiel == "LAGER") + { + //Auslagern der Ware von der vorhandene Filiale im Hafen + foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) + { + if (f.BESITZER == Globals.AktuellerSpieler) + { + f.AuslagernnWare(gewählteHandelsWare.BEZEICHNUNG, gewählteMenge); + break; + } + } + + } + else + { + //Auslagern der Ware in das angedockte Schiff + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.NAME == gewähltesSpielerSchiff.NAME) + { + s.löscheLadung(gewählteHandelsWare.BEZEICHNUNG, gewählteMenge); + break; + } + } + + } + + // Erhöhen des Geldes im Zielbudget + if (gewählteGeldQuelle == "LAGER") + { + + foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) + { + if (f == TempGeldQuellenFiliale) + { + f.erhöheBudget(gewählterPreis); + break; + } + } + } + else + { + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s == TempGeldQuellenSchiff) + { + s.erhöhenBudget(gewählterPreis); + break; + } + } + + } + + // Abziehen der Ware von der Importliste des Hafenlagers + // Besonderheit: Wenn der Hafen hier mehr ankauft als es eigentlich Importieren will wird trotzdem zum genannten Preis verkauft + // außer die gewünschte Importmenge ist schon von beginn der Verhandlungen unter 25 dann wird nur der reduzierte Preis angeboten + // und trotz reduziertem Preis nimmt Hafen die Ware immer an! + foreach (Ware item in aktuellerHafen.IMPORTWARE) + { + if (item.BEZEICHNUNG == gewählteHandelsWare.BEZEICHNUNG) + { + // reduzieren der Ware vom Bestand + item.MENGE -= gewählteMenge; + if (item.MENGE <= 0) + { + item.MENGE = 0; + } + break; + + + } + + } + // Wenn Ware durch reduzierung leer wurde -> Löschen aus dem Bestand + for (int index = 0; index < aktuellerHafen.IMPORTWARE.Count(); index++) + { + if (aktuellerHafen.IMPORTWARE[index].MENGE == 0) + { + aktuellerHafen.IMPORTWARE.RemoveAt(index); + // wenn ein Eintrag gefunden -> reset der Schleife da sich Count geändert hat (Notwendig wenn mehrere Waren je Prozess auf 0 gefallen sind) + index = 0; + } + } + + // Zurück zu Root + letzteÜbergebeneListe.Clear(); + gewählteHandelsWare = null; + gewählteSpielerFiliale = null; + gewähltesSpielerSchiff = null; + gewähltesZiel = ""; + + // Wenn zurück zu Root haben sich evtl Tafeltexte verändert(weil leergekauft)-> neu zeichnen + + List TempWarenListeExport = new List(); + List TempWarenListeImport = new List(); + + //Füllen aller vorhanden Waren in eine Liste für die TafelTexte(Export zuerst) + foreach (Ware item in aktuellerHafen.EXPORTWARE) + { + TempWarenListeExport.Add(item); + } + + foreach (Ware item in aktuellerHafen.IMPORTWARE) + { + TempWarenListeImport.Add(item); + } + TextLieferant.erzeugeTafelText(TempWarenListeExport, TempWarenListeImport); + + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + } + break; + case 3: + // Auswahl 3 = Wechsel des Geldziels + + // Untersuchen, ob es noch andere Bezahlungsquellen gibt(angedockte Schiffe oder einer Filiale) + if (möglicheGeldQuellen.Count() > 1) + { + if (auswahlMouseButton == "MausRechts") + { + geldQuellenIndex--; + } + else + { + geldQuellenIndex++; + } + + if (geldQuellenIndex == möglicheGeldQuellen.Count()) + { + geldQuellenIndex = 0; + } + + if (geldQuellenIndex < 0) + { + geldQuellenIndex = möglicheGeldQuellen.Count() - 1; + } + + gewählteGeldQuelle = möglicheGeldQuellen[geldQuellenIndex]; + TempGeldQuellenFiliale = null; + TempGeldQuellenSchiff = null; + + if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") + { + foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) + { + if (f.BESITZER == Globals.AktuellerSpieler) + { + TempGeldQuellenFiliale = f; + break; + } + } + } + else + { + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.NAME == möglicheGeldQuellen[geldQuellenIndex]) + { + TempGeldQuellenSchiff = s; + break; + } + } + } + + + // Da Geldquelle geändert wurde -> neu Zeichnen und berechnen der des Auswahltextes + // Aufbau der Auswahlliste, je nach dem was vorhanden ist (Keine Absicherung, da mindestens 1 Eintrag da sein muss sonst wäre man nicht in diesem Menü) + // Wenn aber nur 1 Eintrag vorhanden ist, direkt diesen auswählen (Shortcut Funktion) + + //Aufbau der Parameter für die Auswahltexte + // 1. Param ist errechnete max Menge im Bezug auf vorhandenem Budget sein + TempQueue.Enqueue(gewählteMenge.ToString()); + letzteÜbergebeneListe.Add(gewählteMenge.ToString()); + + // 2. Param ist Lademittel der Ware + if (gewählteMenge > 1) + { + TempQueue.Enqueue(gewählteHandelsWare.LADEMITTEL + "N"); + } + else + { + TempQueue.Enqueue(gewählteHandelsWare.LADEMITTEL); + } + + letzteÜbergebeneListe.Add(gewählteHandelsWare.LADEMITTEL); + + // 3. Param ist der Name der Ware + TempQueue.Enqueue(gewählteHandelsWare.BEZEICHNUNG); + letzteÜbergebeneListe.Add(gewählteHandelsWare.BEZEICHNUNG); + + // 4. Param ist der Geldziel + if (TempGeldQuellenFiliale != null) + { + TempQueue.Enqueue("IM LAGER"); + } + else + { + TempQueue.Enqueue("AUF DER " + möglicheGeldQuellen[geldQuellenIndex]); + } + letzteÜbergebeneListe.Add(möglicheGeldQuellen[geldQuellenIndex]); + + // 5. Param Budget des Ziels in EURO + if (TempGeldQuellenFiliale != null) + { + TempQueue.Enqueue((TempGeldQuellenFiliale.BUDGET / 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenFiliale.BUDGET / 100).ToString()); + } + else + { + TempQueue.Enqueue((TempGeldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenSchiff.SCHIFFSBUDGET / 100).ToString()); + } + + // 6. Param Budget des Ziels in CENT + if (TempGeldQuellenFiliale != null) + { + TempQueue.Enqueue((TempGeldQuellenFiliale.BUDGET % 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenFiliale.BUDGET % 100).ToString()); + } + else + { + TempQueue.Enqueue((TempGeldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); + letzteÜbergebeneListe.Add((TempGeldQuellenSchiff.SCHIFFSBUDGET % 100).ToString()); + } + + TextLieferant.wechsleAuswahlText("1.2.1", TempQueue, false, false); + } + break; + case 4: + // Auswahl 4 = Abbruch + letzteÜbergebeneListe.Clear(); + gewählteHandelsWare = null; + gewählteSpielerFiliale = null; + gewähltesSpielerSchiff = null; + + // Wenn abbruch erfolgen soll -> zurück zu Root + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + break; + } + #endregion + break; + } + + + } + + private void importierePresetInListe(string Preset) + { + + switch (Preset) + { //Immer Hintergrund zu Vordergrund Hinzufügen + // ToDo: Alle Häfen implementieren und deren Elemente aus den Vorlage Screens extrahieren und hier einpflegen + case "LIVERPOOL": + AnzeigeListe.Add(BG["HOLZ"]); + AnzeigeListe.Add(Fenster_Tür["1"]); + AnzeigeListe.Add(Tür_FeldL["1"]); + AnzeigeListe.Add(Tisch["2"]); + AnzeigeListe.Add(Verkäufer_Gesicht["1"]); + AnzeigeListe.Add(Verkäufer_OKörper["1"]); + AnzeigeListe.Add(Verkäufer_Hände["1"]); + AnzeigeListe.Add(Tafel_BG["HOLZ"]); + AnzeigeListe.Add(Tafel["BASIC"]); + AnzeigeListe.Add(Tafel_VG["FASS_SCHWAMM"]); + break; + case "LONDON": + + break; + } + + + } + + + public void ladePresets() + { + //Achtung Logik für Kontrolle der Renderreihenfolge muss nochh ausgearbeitet werden + foreach (Image aktuellesBild in AnzeigeListe) + { + + aktuellesBild.Alpha = 0; + Tween(aktuellesBild, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + AddGraphic(aktuellesBild); + } + + + } + + + private void setzePresets() + { + //Sammelt und fügt alle Sprite-Bausteine des Spiels in die Listen + + //TempImage für mitgeben der Image parameter wie Position + Image tempImage; + + //Hier werden alle möglichen Sprites für den Handelsscreen bereit gelegt und in die Dictionarys geschrieben + //Hintergründe + tempImage = vorbereitenImage(Assets.HANDEL_RAUM_HOLZ, 0, 0); + BG.Add("HOLZ", tempImage); + + //Fenster Tür + tempImage = vorbereitenImage(Assets.HANDEL_TÜR_1, 99, 145); + Fenster_Tür.Add("1", tempImage); + + //Deko + tempImage = vorbereitenImage(Assets.HANDEL_DEKOTÜR_LINKS_1, 0, 145); + Tür_FeldL.Add("1", tempImage); + + //Tische + tempImage = vorbereitenImage(Assets.HANDEL_TISCH_2, 0, 290); + Tisch.Add("2", tempImage); + + //Gesicht + tempImage = vorbereitenImage(Assets.HANDEL_GESICHT_1, 234, 120); + Verkäufer_Gesicht.Add("1", tempImage); + + //Oberkörper + tempImage = vorbereitenImage(Assets.HANDEL_OKÖRPER_1, 234, 175); + Verkäufer_OKörper.Add("1", tempImage); + + //Hände + tempImage = vorbereitenImage(Assets.HANDEL_ARME_1, 234, 258); + Verkäufer_Hände.Add("1", tempImage); + + //Tafel_BG + tempImage = vorbereitenImage(Assets.HANDEL_TAFEL_HINTERGRUND_HOLZ, 444, 19); + Tafel_BG.Add("HOLZ", tempImage); + + //Tafel + tempImage = vorbereitenImage(Assets.HANDEL_TAFEL_BASIC, 444, 62); + Tafel.Add("BASIC", tempImage); + + //Tafel_VG + tempImage = vorbereitenImage(Assets.HANDEL_TAFEL_VORDERGRUND_1, 444, 333); + Tafel_VG.Add("FASS_SCHWAMM", tempImage); + + + } + private Image vorbereitenImage(string Asset, int xPos, int yPos) + { + Image tempImage = new Image(Asset); + tempImage.X = xPos; + tempImage.Y = yPos; + + return tempImage; + } + + //Errechnen der darzustellenden Maximalmenge des Zielschiffes (Schiff noch durchdenken weil da auch ein Mengen Cap vorhanden ist) + private int errechneMaxMenge(string Ware, Schiff ZielLagerOrt) + { + + return 0; + } + + //Errechnen der darzustellenden Maximalmenge der Zielfiliale + private int errechneMaxMenge(string Ware, Filiale ZielLagerOrt) + { + + return 0; + } + } +} diff --git a/1869_Remake/Scenes/Intro.cs b/1869_Remake/Scenes/Intro.cs new file mode 100644 index 0000000..bc1c4e8 --- /dev/null +++ b/1869_Remake/Scenes/Intro.cs @@ -0,0 +1,222 @@ +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; + + } + + } + + + } +} diff --git a/1869_Remake/Scenes/OptionenScene.cs b/1869_Remake/Scenes/OptionenScene.cs new file mode 100644 index 0000000..63a333e --- /dev/null +++ b/1869_Remake/Scenes/OptionenScene.cs @@ -0,0 +1,240 @@ +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 +{ + public class OptionenScene : Scene + { + public Image BlackScreen = new Image(Assets.BLACKSCREEN); + public Image OptionScreen = new Image(Assets.OPTIONSCREEN); + + //AnzeigeTimer aktuell nur für warten vor dem 1. Text (später direkt nach tween) + public const float TIMER_GRENZE = 90f; + public float szenenTimer = 0f; + public bool wahlFertig = true; + public bool anzeigeFertig = false; + public bool beendenGame = false; + + //aktuelle Seite der Statistik + public int OptionSeite = 0; + public bool ersterAufbau = true; + + public Text[] anzeigeTexte = new Text[10]; + + public Text WeiterText = Globals.TEXT_WEITER; + public Text BeendenText = Globals.TEXT_BEENDEN; + + public OptionenScene() + { + //Initialisieren des Hauptbildschirms und einblenden + Globals.aktuelleSzene = "Optionen"; + + OptionScreen.CenterOrigin(); + OptionScreen.X = Globals.Remake.HalfWidth; + OptionScreen.Y = Globals.Remake.HalfHeight; + + OptionScreen.Alpha = 0f; + + AddGraphic(OptionScreen); + Tween(OptionScreen, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + //Weiter Text zum herausgehen aus der Szene + WeiterText.X = 520; + WeiterText.Y = 450; + //Farbe => Options dunkel Grau + WeiterText.Color = Globals.OptionGrau; + WeiterText.Alpha = 0f; + + + AddGraphic(WeiterText); + Tween(WeiterText, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + //Beenden Text zum beenden der Applikation + BeendenText.X = 230; + BeendenText.Y = 450; + //Farbe => Options dunkel Grau + BeendenText.Color = Globals.OptionGrau; + BeendenText.Alpha = 0f; + + + AddGraphic(BeendenText); + Tween(BeendenText, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + //Vorbereiten des Blackscreens + BlackScreen.CenterOrigin(); + BlackScreen.X = Globals.Remake.HalfWidth; + BlackScreen.Y = Globals.Remake.HalfHeight; + BlackScreen.Alpha = 0f; + } + + public override void Update() + { + base.Update(); + + //hochzählendes Zeitelement um Aktionen in der Szene zu Takten + szenenTimer++; + + //BlackScreen Durchsichtigkeit 1 ist wurde die nächste Szene getriggert -> wechsel zum Hauptbildschirm + if (BlackScreen.Alpha >= 0.999f) + { + if ( !beendenGame) + { + Globals.LetzteSzene = "Optionen"; + Globals.Remake.SwitchScene(new worldMap()); + } + else + { + Globals.Remake.Close(); + } + + } + + //Erst nach Timer sind aktionen möglich + if (szenenTimer >= TIMER_GRENZE) + { + // Nach dem timer alle unsichtbaren Texte einblenden um Zeit zwischen Texten zu simulieren => Kein flackern durch schnell eingeblendete Texte + // Nur neu erstellen wenn notwendig für bessere Performance + if (!anzeigeFertig) + { + foreach (Text t in anzeigeTexte) + { + if (t != null) + { + t.Alpha = 1f; + t.Color = Globals.OptionGrau; ; + + } + } + + anzeigeFertig = true; + } + + if (wahlFertig) + { + //Initialisieren der Grafiken erst ab 2. Durchgang (Nurentfernen der Texte nicht des Hintergrundbildes) + if (!ersterAufbau) + { + foreach (Text t in anzeigeTexte) + { + RemoveGraphic(t); + } + + } + else + { + ersterAufbau = false; + } + + + //Initialisieren des Arrays + int counter = 0; + foreach (var t in anzeigeTexte) + { + if (t != null) + { + counter++; + } + } + + for (int i = 0; i < counter; i++) + { + anzeigeTexte[i] = null; + + } + + + + //Anzeige des aktuellen Textes + switch (OptionSeite) + { + //Jede Seite einzeln + case 0: + + break; + + case 1: + + + + break; + case 2: + + break; + } + + + + //Wechsel des Textes fertig und timer neu reseten; Nach wechsel muss erst Eingabe des Users erfolgen für nächsten Wechsel + wahlFertig = false; + + + } + + //Überprüfen der Buttons + + //Weiter + if (Util.InRect(this.MouseX, this.MouseY, 520, 450, 50, 15)) + { + + WeiterText.Color = Globals.HighLightMagenta; + + + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + wahlFertig = true; + } + + if (wahlFertig) + { + AddGraphic(BlackScreen); + Tween(BlackScreen, new { Alpha = 1f }, 64f, 0f).Ease(Ease.BackInOut); + + anzeigeFertig = false; + + szenenTimer = 0; + } + } + + else + { + WeiterText.Color = Globals.OptionGrau; + } + + //Beenden + if (Util.InRect(this.MouseX, this.MouseY, 230, 450, 50, 15)) + { + + BeendenText.Color = Globals.HighLightMagenta; + + + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + wahlFertig = true; + } + + if (wahlFertig) + { + AddGraphic(BlackScreen); + Tween(BlackScreen, new { Alpha = 1f }, 64f, 0f).Ease(Ease.BackInOut); + + anzeigeFertig = false; + beendenGame = true; + + szenenTimer = 0; + } + } + + else + { + BeendenText.Color = Globals.OptionGrau; + } + } + + } + } +} diff --git a/1869_Remake/Scenes/StatistikScene.cs b/1869_Remake/Scenes/StatistikScene.cs new file mode 100644 index 0000000..cf875c7 --- /dev/null +++ b/1869_Remake/Scenes/StatistikScene.cs @@ -0,0 +1,188 @@ +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 +{ + public class StatistikScene : Scene + { + public Image BlackScreen = new Image(Assets.BLACKSCREEN); + public Image StatScreen = new Image(Assets.STATISTIKSCREEN); + + //AnzeigeTimer aktuell nur für warten vor dem 1. Text (später direkt nach tween) + public const float TIMER_GRENZE = 90f; + public float szenenTimer = 0f; + public bool wahlFertig = true; + public bool anzeigeFertig = false; + + //aktuelle Seite der Statistik + public int StatSeite = 0; + public bool ersterAufbau = true; + + public Text[] anzeigeTexte = new Text[10]; + + public Text EndeText = Globals.TEXT_ENDE; + public StatistikScene() + { + //Initialisieren des Hauptbildschirms und einblenden + Globals.aktuelleSzene = "Statistik"; + + StatScreen.CenterOrigin(); + StatScreen.X = Globals.Remake.HalfWidth; + StatScreen.Y = Globals.Remake.HalfHeight; + + StatScreen.Alpha = 0f; + + AddGraphic(StatScreen); + Tween(StatScreen, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + //Ende Text zum herausgehen aus der Szene + EndeText.X = 395; + EndeText.Y = 445; + //Farbe => Statistik dunkel grün + EndeText.Color = Globals.StatGrün; + EndeText.Alpha = 0f; + + + AddGraphic(EndeText); + Tween(EndeText, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + //Vorbereiten des Blackscreens + BlackScreen.CenterOrigin(); + BlackScreen.X = Globals.Remake.HalfWidth; + BlackScreen.Y = Globals.Remake.HalfHeight; + BlackScreen.Alpha = 0f; + } + + public override void Update() + { + base.Update(); + + //hochzählendes Zeitelement um Aktionen in der Szene zu Takten + szenenTimer++; + + //BlackScreen Durchsichtigkeit 1 ist wurde die nächste Szene getriggert -> wechsel zum Hauptbildschirm + if (BlackScreen.Alpha >= 0.999f) + { + Globals.LetzteSzene = "Hall of Fame"; + Globals.Remake.SwitchScene(new worldMap()); + } + + //Erst nach Timer sind aktionen möglich + if (szenenTimer >= TIMER_GRENZE) + { + // Nach dem timer alle unsichtbaren Texte einblenden um Zeit zwischen Texten zu simulieren => Kein flackern durch schnell eingeblendete Texte + // Nur neu erstellen wenn notwendig für bessere Performance + if (!anzeigeFertig) + { + foreach (Text t in anzeigeTexte) + { + if (t != null) + { + t.Alpha = 1f; + t.Color = Globals.StatGrün; ; + + } + } + + anzeigeFertig = true; + } + + if (wahlFertig) + { + //Initialisieren der Grafiken erst ab 2. Durchgang (Nurentfernen der Texte nicht des Hintergrundbildes) + if (!ersterAufbau) + { + foreach (Text t in anzeigeTexte) + { + RemoveGraphic(t); + } + + } + else + { + ersterAufbau = false; + } + + + //Initialisieren des Arrays + int counter = 0; + foreach (var t in anzeigeTexte) + { + if (t != null) + { + counter++; + } + } + + for (int i = 0; i < counter; i++) + { + anzeigeTexte[i] = null; + + } + + + + //Anzeige des aktuellen Textes + switch (StatSeite) + { + //Jede Seite einzeln + case 0: + + break; + + case 1: + + + + break; + case 2: + + break; + } + + + + //Wechsel des Textes fertig und timer neu reseten; Nach wechsel muss erst Eingabe des Users erfolgen für nächsten Wechsel + wahlFertig = false; + + + } + + //Überprüfen der Buttons + + //Ende + if (Util.InRect(this.MouseX, this.MouseY, 395, 445, 50, 15)) + { + + EndeText.Color = Globals.HighLightMagenta; + + + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + wahlFertig = true; + } + + if (wahlFertig) + { + AddGraphic(BlackScreen); + Tween(BlackScreen, new { Alpha = 1f }, 64f, 0f).Ease(Ease.BackInOut); + + anzeigeFertig = false; + + szenenTimer = 0; + } + } + + else + { + EndeText.Color = Globals.StatGrün; + } + } + } + } +} diff --git a/1869_Remake/Scenes/WerftScene.cs b/1869_Remake/Scenes/WerftScene.cs new file mode 100644 index 0000000..be51627 --- /dev/null +++ b/1869_Remake/Scenes/WerftScene.cs @@ -0,0 +1,3567 @@ +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 WerftScene : Scene + { + + TextBuilder TextLieferant; + + public Image WerftScreen_Büro = new Image(Assets.WERFTBÜROSCREEN); + public Image WerftScreen_Reparatur = new Image(Assets.WERFTREPERATURSCREEN); + public Image WerftScreen_SchiffsAuswahl = new Image(Assets.WERFTSCHIFFSAUSWAHLSCREEN); + public Image FadeInBlackScreen = new Image(Assets.BLACKSCREEN); + public Image FadeOutBlackScreen = new Image(Assets.BLACKSCREEN); + + //Schiffsscreens + public Image Schiffsauswahl_Schoner = new Image(Assets.WERFT_SCHIFF_SCHONER); + public Image Schiffsauswahl_Bark = new Image(Assets.WERFT_SCHIFF_BARK); + public Image Schiffsauswahl_Fregatte = new Image(Assets.WERFT_SCHIFF_FREGATTE); + public Image Schiffsauswahl_Brigg = new Image(Assets.WERFT_SCHIFF_BRIGG); + public Image Schiffsauswahl_Holzdampfschiff = new Image(Assets.WERFT_SCHIFF_HOLZDAMPFSCHIFF); + public Image Schiffsauswahl_Eisendampfschiff = new Image(Assets.WERFT_SCHIFF_EISENDAMPFSCHIFF); + public Image Schiffsauswahl_Klipper = new Image(Assets.WERFT_SCHIFF_KLIPPER); + public Image Schiffsauswahl_Name = new Image(Assets.WERFT_SCHIFF_BAU_NAME); + private List SchiffsSchemaListe = new List(); + private List gebrauchteSchiffe = new List(); + private int SchiffsIndex = 0; + //AnzeigeTimer + public const float TIMER_GRENZE = 90f; + public float szenenTimer = 0f; + public bool wahlFertig = true; + public bool anzeigeFertig = false; + + //TempTextVariablen + Queue TempSprachText = new Queue(); + Queue TempSprachParams = new Queue(); + Queue TempQueue = new Queue(); + + //Letzte dem Textbuilder übergebene Liste an Paramtern (Wird nur für Shortcut funktionalität verwender) + private List letzteÜbergebeneListe = new List(); + + public Hafen aktuellerHafen; + private Image aktuellerBG; + private string aktuellGewählterSchiffstyp = "SCHONER"; + //Standard Aufbereitungszeit für gebrauchte Schiffe ist 4 Tage + private TimeSpan StandardLieferZeit = new TimeSpan(4, 0, 0, 0); + + //Temporäre Liste der möglichen Geldquellen + public List möglicheGeldQuellen = new List(); + public int geldQuellenIndex = 0; + public int betragAbbezahlen = 0; + private int GebrauchtWert; + private int WunschRestBetrag; + bool kannBezahlen; + + //Textbox zum Eingeben der Schiffsnamen + public TextBox textFeld; + + + public WerftScene(string Preset) + { + //Initialisieren des Hauptbildschirms und einblenden + Globals.aktuelleSzene = "Werft"; + + //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(); + + //Einleitungssprachtexte + Queue WillkommensText = new Queue(); + WillkommensText.Enqueue("Helfen"); + TextLieferant.erzeugeSprachText(WillkommensText, new Queue(), Globals.Remake.HalfWidth, 100); + + //Auswahltexte + TextLieferant.erzeugeAuswahlText(new Queue(), 25, 410); + + //Vorbeireiten des Hintergrundes Büro und der NebenScreens + //Büro + WerftScreen_Büro.CenterOrigin(); + WerftScreen_Büro.X = Globals.Remake.HalfWidth; + WerftScreen_Büro.Y = Globals.Remake.HalfHeight; + WerftScreen_Büro.Alpha = 1f; + //bei Start der Szene wird der aktuelle BG weg gespeichert um diesen Später aus/einzublenden + aktuellerBG = WerftScreen_Büro; + AddGraphic(aktuellerBG); + + //Reperatur Screen + WerftScreen_Reparatur.CenterOrigin(); + WerftScreen_Reparatur.X = Globals.Remake.HalfWidth; + WerftScreen_Reparatur.Y = Globals.Remake.HalfHeight; + WerftScreen_Reparatur.Alpha = 0f; + + //Schiffsauswahl Screen + WerftScreen_SchiffsAuswahl.CenterOrigin(); + WerftScreen_SchiffsAuswahl.X = Globals.Remake.HalfWidth; + WerftScreen_SchiffsAuswahl.Y = Globals.Remake.HalfHeight; + WerftScreen_SchiffsAuswahl.Alpha = 0f; + + //SchiffsScreens + Schiffsauswahl_Schoner.CenterOrigin(); + Schiffsauswahl_Schoner.X = Globals.Remake.HalfWidth; + Schiffsauswahl_Schoner.Y = Globals.Remake.HalfHeight; + Schiffsauswahl_Schoner.Alpha = 0f; + + Schiffsauswahl_Bark.CenterOrigin(); + Schiffsauswahl_Bark.X = Globals.Remake.HalfWidth; + Schiffsauswahl_Bark.Y = Globals.Remake.HalfHeight; + Schiffsauswahl_Bark.Alpha = 0f; + + Schiffsauswahl_Holzdampfschiff.CenterOrigin(); + Schiffsauswahl_Holzdampfschiff.X = Globals.Remake.HalfWidth; + Schiffsauswahl_Holzdampfschiff.Y = Globals.Remake.HalfHeight; + Schiffsauswahl_Holzdampfschiff.Alpha = 0f; + + Schiffsauswahl_Eisendampfschiff.CenterOrigin(); + Schiffsauswahl_Eisendampfschiff.X = Globals.Remake.HalfWidth; + Schiffsauswahl_Eisendampfschiff.Y = Globals.Remake.HalfHeight; + Schiffsauswahl_Eisendampfschiff.Alpha = 0f; + + Schiffsauswahl_Brigg.CenterOrigin(); + Schiffsauswahl_Brigg.X = Globals.Remake.HalfWidth; + Schiffsauswahl_Brigg.Y = Globals.Remake.HalfHeight; + Schiffsauswahl_Brigg.Alpha = 0f; + + Schiffsauswahl_Fregatte.CenterOrigin(); + Schiffsauswahl_Fregatte.X = Globals.Remake.HalfWidth; + Schiffsauswahl_Fregatte.Y = Globals.Remake.HalfHeight; + Schiffsauswahl_Fregatte.Alpha = 0f; + + + Schiffsauswahl_Klipper.CenterOrigin(); + Schiffsauswahl_Klipper.X = Globals.Remake.HalfWidth; + Schiffsauswahl_Klipper.Y = Globals.Remake.HalfHeight; + Schiffsauswahl_Klipper.Alpha = 0f; + + Schiffsauswahl_Name.CenterOrigin(); + Schiffsauswahl_Name.X = Globals.Remake.HalfWidth; + Schiffsauswahl_Name.Y = Globals.Remake.HalfHeight; + Schiffsauswahl_Name.Alpha = 0f; + + //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 = "Werft"; + 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(); + Text TempText; + List anzeigeTextListe = new List(); + Schiff SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + string gewählterSchiffsName = " "; + switch (TextLieferant.aktuelleEbene) + { + // Textbaum - Root + case "1": + #region RootLogik (Demo Ready) + + 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 werdenkd + case 1: + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + letzteÜbergebeneListe.Clear(); + //Auswahl Reparatur + WechsleBG("Reparatur"); + + TextLieferant.wechsleAuswahlText("1.1", new Queue()); + + break; + case 2: + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + aktuellGewählterSchiffstyp = Globals.AlleSchiffsTypen[SchiffsIndex].SCHIFFSTYP; + //Auswahl Schiff bauen + + int tempSchiffeInBau = 0; + //Vorabüberprüfen ob bereits 2 zu bauende Schiffe im Hafen sind + //Jede Werft baut maximal 2 Schiffe (spielerübergreifend) + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.inBau) + { + tempSchiffeInBau++; + } + } + if (tempSchiffeInBau >= 2) + { + TempSprachText.Clear(); + TempSprachText.Enqueue("BAU_KEINPLATZ1"); + TempSprachText.Enqueue("BAU_KEINPLATZ2"); + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + break; + } + else + { + // Es könenn pro Werft maximal 2 Schiffe gebaut werden unabhängig von welchem Spieler + switch (SchiffsIndex) + { + #region SchiffsParams + //Erzeugen der jeweiligen Anzeigen Texte je nach Schiffstyp + case 0: + WechsleBG("Schiffsauswahl_Schoner"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 50; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 70; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 90; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 110; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 130; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 150; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 170; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case 1: + WechsleBG("Schiffsauswahl_Bark"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 160; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 180; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 200; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case 2: + WechsleBG("Schiffsauswahl_Holzdampfschiff"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp.Substring(4), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 160; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 180; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case 3: + WechsleBG("Schiffsauswahl_Eisendampfschiff"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("KABINEN FÜR " + SchablonenSchiff.KABINEN + " PASSAGIERE.", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp.Substring(5), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case 4: + WechsleBG("Schiffsauswahl_Brigg"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 280; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 300; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case 5: + WechsleBG("Schiffsauswahl_Fregatte"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("KABINEN FÜR " + SchablonenSchiff.KABINEN + " PASSAGIERE.", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 300; + TempText.Y = 30; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 200; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 220; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case 6: + WechsleBG("Schiffsauswahl_Klipper"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("KABINEN FÜR " + SchablonenSchiff.KABINEN + " PASSAGIERE.", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 300; + TempText.Y = 30; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 50; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 70; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 90; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 340; + TempText.Y = 110; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 130; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 150; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 170; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + #endregion + } + + TextLieferant.erzeugeAnzeigeTexte(anzeigeTextListe); + 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: + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + letzteÜbergebeneListe.Clear(); + //Auswahl Gebrauchtes Schiff + + //Zusammensuchen der Liste aller gebrauchten Schiffe + // Gebrauchtes Schiff = Schiff ohne Commandeur angedockt im aktuellen Hafen + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.COMMANDEUR == null) + { + gebrauchteSchiffe.Add(s); + } + } + if (gebrauchteSchiffe.IsEmpty()) + { + TempSprachText.Clear(); + TempSprachText.Enqueue("Gebraucht_KEINESCHIFFE"); + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + } + else + { + SchiffsIndex = 0; + aktuellGewählterSchiffstyp = gebrauchteSchiffe[SchiffsIndex].SCHIFFSTYP; + + GebrauchtWert = gebrauchteSchiffe[SchiffsIndex].NEUWERT; + //Verlaufswert muss berechnet werden + //-> Normalerweise wird prozentual zur Abnutzung die Differenz aus Neuwert-(Grad der Abnutzung in %) gerechnet + //-> Da Reparatur noch nich einbaut ist wird Altersabhängig bestimmt ((1/2)* Alter in jahren) + for (int Alter = 0; Alter < gebrauchteSchiffe[SchiffsIndex].ALTER; Alter++) + {//halbiere den NeuWert pro jahr + GebrauchtWert /= 2; + } + switch (aktuellGewählterSchiffstyp) + { + #region SchiffsParams + //Erzeugen der jeweiligen Anzeigen Texte je nach Schiffstyp + + case "SCHONER": + WechsleBG("Schiffsauswahl_Schoner"); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 30; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 50; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 70; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 90; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 110; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 130; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 150; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 170; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "BARK": + WechsleBG("Schiffsauswahl_Bark"); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 50; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 160; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 180; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 200; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "HOLZDAMPFSCHIFF": + WechsleBG("Schiffsauswahl_Holzdampfschiff"); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp.Substring(4), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 160; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 180; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "EISENDAMPFSCHIFF": + WechsleBG("Schiffsauswahl_Eisendampfschiff"); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("KABINEN FÜR " + gebrauchteSchiffe[SchiffsIndex].KABINEN + " PASSAGIERE.", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp.Substring(5), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "BRIGG": + WechsleBG("Schiffsauswahl_Brigg"); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 280; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 300; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 320; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "FREGATTE": + WechsleBG("Schiffsauswahl_Fregatte"); + TempText = new Text("KABINEN FÜR " + gebrauchteSchiffe[SchiffsIndex].KABINEN + " PASSAGIERE.", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 300; + TempText.Y = 30; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 200; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 220; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 240; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "KLIPPER": + WechsleBG("Schiffsauswahl_Klipper"); + TempText = new Text("KABINEN FÜR " + gebrauchteSchiffe[SchiffsIndex].KABINEN + " PASSAGIERE.", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 300; + TempText.Y = 30; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 50; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 70; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 90; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 340; + TempText.Y = 110; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 130; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 150; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 170; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 190; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + #endregion + } + + //Geldquellen paramter + TempQueue.Clear(); + 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()); + } + } + + } + else + { + TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.COMMANDEUR == Globals.AktuellerSpieler && s.NAME == möglicheGeldQuellen[geldQuellenIndex]) + { + TempQueue.Enqueue((s.SCHIFFSBUDGET / 100).ToString()); + TempQueue.Enqueue((s.SCHIFFSBUDGET % 100).ToString()); + } + } + } + TextLieferant.erzeugeAnzeigeTexte(anzeigeTextListe); + TextLieferant.wechsleAuswahlText("1.4", TempQueue, false); + } + + break; + case 5: + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + letzteÜbergebeneListe.Clear(); + //Auswahl Schiff verkaufen + + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + //Alle Schiffe des aktuellen Spielers anbieten (außer die noch in Bau befindlichen oder präpariert werden) + if (s.COMMANDEUR == Globals.AktuellerSpieler && s.inBau != true && s.inBereitstellung != true) + { + TempQueue.Enqueue(s.NAME); + letzteÜbergebeneListe.Add(s.NAME); + } + + } + + TempSprachText = new Queue(); + if (TempQueue.Count() > 0) + { + if (TempQueue.Count() == 1) + { + //Shortcut zu Mengenbestimmungsscreen setzen + TextLieferant.setAuswahl(1); + } + else + { + TempSprachText.Enqueue("Verkauf_WelchesSchiff"); + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + + } + + TextLieferant.wechsleAuswahlText("1.5A", TempQueue, true); + } + else + { + + //Spieler hat keine angedockten Schiffe in diesem Hafen + TempSprachText.Enqueue("Verkauf_KeinSchiff1"); + TempSprachText.Enqueue("Verkauf_KeinSchiff2"); + + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + } + + break; + case 6: + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + letzteÜbergebeneListe.Clear(); + //Auswahl Schiff bezahlen wenn bestellt wurde + bool hatSchiffeInBau = false; + string bezahlterSchiffsName = ""; + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + //Alle Schiffe des aktuellen Spielers anbieten (außer die noch in Bau befindlichen) + if (s.COMMANDEUR == Globals.AktuellerSpieler && s.inBau) + { + hatSchiffeInBau = true; + //Spieler hat Schiff welches + if (bezahlterSchiffsName == "") + { + bezahlterSchiffsName = s.NAME; + } + else + { + bezahlterSchiffsName = "ALLE"; + } + + //Nur in die Liste nehmen wenn Schiff noch nicht bezahlt ist + if(!s.bezahlt) + { + TempQueue.Enqueue(s.NAME); + letzteÜbergebeneListe.Add(s.NAME); + } + + + } + + } + + TempSprachText = new Queue(); + TempSprachParams = new Queue(); + if (TempQueue.Count() > 0) + { + if (TempQueue.Count() == 1) + { + //Shortcut zu Mengenbestimmungsscreen setzen + TextLieferant.setAuswahl(1); + } + else + { + TempSprachText.Enqueue("Verkauf_WelchesSchiff"); + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + + } + + TextLieferant.wechsleAuswahlText("1.6A", TempQueue, true); + } + else + { + if(hatSchiffeInBau) + { + if(bezahlterSchiffsName=="ALLE") + { + TempSprachText.Enqueue("Bezahlen_AlleBezahlt"); + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + } + else + { + TempSprachParams.Enqueue(bezahlterSchiffsName); + TempSprachText.Enqueue("Bezahlen_XBezahlt"); + TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + } + + } + else + { + TempSprachText.Enqueue("Bezahlen_KeineSchiffe"); + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + } + + } + break; + + } + #endregion + break; + case "1.1": + #region Reparatur Logik (Demo ready) + // In der Demo deaktiviert (überall die selbe Nachricht) + switch (tempAuswahl) + { + case 0: + //Noch keine Auswahl getroffen + break; + case 3: + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + WechsleBG("Büro"); + break; + default: + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + TempSprachText.Enqueue("Demo_KeineReparatur"); + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + break; + } + #endregion + break; + case "1.2": + #region Bauen Logik (Demo ready) + // Bauen eines neuen Schiffes - Typauswahl + switch (tempAuswahl) + { + case 0: + //Noch keine Auswahl getroffen + break; + case 1: + // Nächstes Model zeigen + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + SchiffsIndex++; + + if (SchiffsIndex > 6) + SchiffsIndex = 6; + aktuellGewählterSchiffstyp = Globals.AlleSchiffsTypen[SchiffsIndex].SCHIFFSTYP; + switch (SchiffsIndex) + { + #region Schiffsparams + case 0: + WechsleBG("Schiffsauswahl_Schoner"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 50; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 70; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 90; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 110; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 130; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 150; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 170; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case 1: + WechsleBG("Schiffsauswahl_Bark"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 160; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 180; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 200; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case 2: + WechsleBG("Schiffsauswahl_Holzdampfschiff"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp.Substring(4), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 160; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 180; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case 3: + WechsleBG("Schiffsauswahl_Eisendampfschiff"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("KABINEN FÜR " + SchablonenSchiff.KABINEN + " PASSAGIERE.", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp.Substring(5), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case 4: + WechsleBG("Schiffsauswahl_Brigg"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 280; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 300; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case 5: + WechsleBG("Schiffsauswahl_Fregatte"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("KABINEN FÜR " + SchablonenSchiff.KABINEN + " PASSAGIERE.", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 300; + TempText.Y = 30; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 200; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 220; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case 6: + WechsleBG("Schiffsauswahl_Klipper"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("KABINEN FÜR " + SchablonenSchiff.KABINEN + " PASSAGIERE.", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 300; + TempText.Y = 30; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 50; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 70; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 90; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 340; + TempText.Y = 110; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 130; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 150; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 170; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + #endregion + } + TextLieferant.erzeugeAnzeigeTexte(anzeigeTextListe); + break; + case 2: + // Letztes Model zeigen + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + SchiffsIndex--; + if (SchiffsIndex < 0) + SchiffsIndex = 0; + aktuellGewählterSchiffstyp = Globals.AlleSchiffsTypen[SchiffsIndex].SCHIFFSTYP; + switch (SchiffsIndex) + { + #region Schiffsparams + case 0: + WechsleBG("Schiffsauswahl_Schoner"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 50; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 70; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 90; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 110; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 130; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 150; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 170; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + + break; + case 1: + WechsleBG("Schiffsauswahl_Bark"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 160; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 180; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 200; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + + break; + case 2: + WechsleBG("Schiffsauswahl_Holzdampfschiff"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp.Substring(4), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 160; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 180; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + + break; + case 3: + WechsleBG("Schiffsauswahl_Eisendampfschiff"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("KABINEN FÜR " + SchablonenSchiff.KABINEN + " PASSAGIERE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp.Substring(5), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case 4: + WechsleBG("Schiffsauswahl_Brigg"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 280; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 300; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case 5: + WechsleBG("Schiffsauswahl_Fregatte"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("KABINEN FÜR " + SchablonenSchiff.KABINEN + " PASSAGIERE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 300; + TempText.Y = 30; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 200; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 220; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case 6: + WechsleBG("Schiffsauswahl_Klipper"); + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempText = new Text("KABINEN FÜR " + SchablonenSchiff.KABINEN + " PASSAGIERE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 300; + TempText.Y = 30; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + SchablonenSchiff.MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 50; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + SchablonenSchiff.LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 70; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + SchablonenSchiff.LIEFERZEIT + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 90; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + SchablonenSchiff.BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 340; + TempText.Y = 110; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (SchablonenSchiff.NEUWERT / 100).ToString() + "," + (SchablonenSchiff.NEUWERT % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 130; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ANZAHLUNG: $" + (SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString() + "," + (SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 150; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 170; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + #endregion + } + TextLieferant.erzeugeAnzeigeTexte(anzeigeTextListe); + break; + case 3: + // Bestätigung - Schiff bauen + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + + //Anzeigetext muss gelöscht werden + TextLieferant.erzeugeAnzeigeTexte(new List()); + + //Je nachdem welcher Index aktuell gewählt ist wird ein Bau-Event erzeugt mit dem jeweiligen Schiffstyp und Spieler + switch (SchiffsIndex) + { + case 0: + aktuellGewählterSchiffstyp = "SCHONER"; + break; + case 1: + aktuellGewählterSchiffstyp = "BARK"; + break; + case 2: + aktuellGewählterSchiffstyp = "HOLZDAMPFSCHIFF"; + break; + case 3: + aktuellGewählterSchiffstyp = "EISENDAMPFSCHIFF"; + break; + case 4: + aktuellGewählterSchiffstyp = "BRIGG"; + break; + case 5: + aktuellGewählterSchiffstyp = "FREGATTE"; + break; + + case 6: + aktuellGewählterSchiffstyp = "KLIPPER"; + break; + } + Console.WriteLine("Schiffstyp gewählt: " + aktuellGewählterSchiffstyp); + + //Eingabefeld für Texteingabe + textFeld = new TextBox(Globals.Remake.HalfWidth - 65, Globals.Remake.HalfHeight - 60, 150, 20, 15, false); + this.Add(textFeld); + textFeld.Focus(); + + TextLieferant.wechsleAuswahlText("1.2.3A", TempQueue, false); + WechsleBG("Schiffsauswahl_Name"); + + break; + case 4: + // Abbruch + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + WechsleBG("Büro"); + break; + } + #endregion + break; + case "1.2.3A": + #region Bauen_Namenswahl (Demo ready) + if (Globals.PlayerSession.Controller.Button("Enter").Pressed) + { + TempSprachText.Clear(); + gewählterSchiffsName = textFeld.getInput(); + + //TODO namens einzigartigkeit einabauen + + if (textFeld.Text.ToString().IsEmpty()) + { + TempSprachText.Enqueue("Bau_KeinName"); + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + } + //Wenn Eingabe erfolgt, Textfeld nicht leer und Eingabe kein Duplikater Schiffsname ist -> zu Bestätigung Szene + bool nameIstDuplikat = false; + foreach (Schiff s in Globals.AktuellerSpieler.SCHIFFE) + { + if (s.NAME == textFeld.Text.ToString()) + { + nameIstDuplikat = true; + } + } + + if (!nameIstDuplikat) + { + letzteÜbergebeneListe.Clear(); + letzteÜbergebeneListe.Add(gewählterSchiffsName); + + //Variable Texte füllen + TempQueue = new Queue(); + + 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()); + } + } + + } + else + { + TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.COMMANDEUR == Globals.AktuellerSpieler && s.NAME == möglicheGeldQuellen[geldQuellenIndex]) + { + TempQueue.Enqueue((s.SCHIFFSBUDGET / 100).ToString()); + TempQueue.Enqueue((s.SCHIFFSBUDGET % 100).ToString()); + } + } + } + + //Sprachtexte erzeugen + TempSprachText.Clear(); + TempSprachParams.Clear(); + + TempSprachText.Enqueue("Bezahlen_ANZAHLUNG1"); + TempSprachText.Enqueue("Bezahlen_ANZAHLUNG2"); + + //Parameter 1 & 2: $ Betrag der Anzahlung + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempSprachParams.Enqueue((SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString()); + TempSprachParams.Enqueue((SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString()); + TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + + //Texteingabe muss gelöscht werden sonst verbleibt die eingabe auf dem screen + Remove(textFeld); + + TextLieferant.wechsleAuswahlText("1.2.3B", TempQueue, false); + WechsleBG("Büro"); + } + else + { + if (TempSprachText.IsEmpty()) + { + TempSprachText.Enqueue("Bau_NameDuplikat"); + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + } + } + } + #endregion + break; + case "1.2.3B": + #region Bauen_Bezahlen (Demo ready) + switch (tempAuswahl) + { + case 0: + break; + case 1: + //Wiederholung des Anzahlungsbetrages + //Sprachtexte erzeugen + TempSprachText.Clear(); + TempSprachParams.Clear(); + + TempSprachText.Enqueue("Bezahlen_ANZAHLUNG1"); + TempSprachText.Enqueue("Bezahlen_ANZAHLUNG2"); + + //Parameter 1 & 2: $ Betrag der Anzahlung + SchablonenSchiff = suchenSchablone(aktuellGewählterSchiffstyp); + TempSprachParams.Enqueue((SchablonenSchiff.ANZAHLUNGSPREIS / 100).ToString()); + TempSprachParams.Enqueue((SchablonenSchiff.ANZAHLUNGSPREIS % 100).ToString()); + TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + break; + case 2: + //Anzahlung muss vorab bezahlt werden + //WEnn nicht genug geld -> Fehlermeldung + Filiale GeldQuelleLager = null; + Schiff GeldQuelleSchiff = null; + kannBezahlen = true; + + if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") + { + foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) + { + if (Globals.AktuellerSpieler == f.BESITZER) + { + GeldQuelleLager = f; + } + } + } + else + { + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.NAME == möglicheGeldQuellen[geldQuellenIndex]) + { + GeldQuelleSchiff = s; + } + } + } + + if (GeldQuelleLager != null) + { + //Geldquelle ist Lager -> Geld hier abziehen + if (GeldQuelleLager.BUDGET < SchablonenSchiff.ANZAHLUNGSPREIS) + { + kannBezahlen = false; + } + } + else + { + //Geldquelle ist Schiff -> geld hier abziehen + if (GeldQuelleSchiff.SCHIFFSBUDGET < SchablonenSchiff.ANZAHLUNGSPREIS) + { + kannBezahlen = false; + } + } + + if (kannBezahlen) + { + //Vorraussichtliches Fertigstellungsdatum + DateTime TempDatum = Globals.AktuellesDatum.Add(new TimeSpan(SchablonenSchiff.LIEFERZEIT, 0, 0)); + + //Erstellen des Schiffs als reales Objekt und anmelden im aktuellen Hafen + Schiff TempSchiff = new Schiff(letzteÜbergebeneListe[0], aktuellGewählterSchiffstyp, 0, Globals.AktuellerSpieler); + TempSchiff.initiereBau(TempDatum); + TempSchiff.fahreInHafenEin(aktuellerHafen.NAME); + aktuellerHafen.schiffsAktivität("Einfahren", TempSchiff); + Globals.AktuellerSpieler.erhalteSchiff(TempSchiff); + //Geld muss beigeldquelle abgezogen werden und mögliche Geldquellen müssen eventuell upgedated werden + if (GeldQuelleLager != null) + {//Geldquelle ist Filiale + GeldQuelleLager.verringereBudget(TempSchiff.ANZAHLUNGSPREIS); + } + else + {//Geldquelle ist Schiff + GeldQuelleSchiff.vermindernBudget(TempSchiff.ANZAHLUNGSPREIS); + } + überprüfeGeldquellen(); + + //Hinzufügen des SchiffsAktivierungsEvent + //Hinweis: Wenn dieses Event nicht mit dem bool bezahlt = true versehen ist wird es am gegebenen Datum dem Hafen übergeben + Globals.EventListe.Add(new WeltEvent(TempDatum, "SCHIFFBAU-FERTIGSTELLUNG", Globals.AktuellerSpieler, null, TempSchiff, aktuellerHafen, 0, null, null)); + Globals.EventListe.Sort(new EventSorter()); + + //Sprachtext erzeugen + TempSprachText.Clear(); + TempSprachParams.Clear(); + + //1. Text Param Anzahl Bau 2.Param Zeitfaktor(Monate/Tage) + TempSprachParams.Enqueue((TempSchiff.LIEFERZEIT / 30).ToString()); + TempSprachParams.Enqueue("MONATE"); + TempSprachText.Enqueue("Bezahlen_Abschluss1"); + TempSprachText.Enqueue("Bezahlen_Abschluss2"); + TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + + //Wechsel zu root Menü + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + WechsleBG("Büro"); + } + else + { + //Wenn nicht genug geld dann kurze Warnmeldung + TempSprachText.Enqueue("Bezahlen_KEINGELD"); + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + } + break; + case 3: + //Wechsle die Geldquelle + geldQuellenIndex++; + 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()); + } + } + + } + else + { + TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.COMMANDEUR == Globals.AktuellerSpieler && s.NAME == möglicheGeldQuellen[geldQuellenIndex]) + { + TempQueue.Enqueue((s.SCHIFFSBUDGET / 100).ToString()); + TempQueue.Enqueue((s.SCHIFFSBUDGET % 100).ToString()); + } + } + } + TextLieferant.wechsleAuswahlText("1.2.3B", TempQueue, false); + break; + case 4: + // Abbruch + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + WechsleBG("Büro"); + break; + } + #endregion + break; + case "1.4": + #region Gebraucht kaufen Logik + //TODO: Multi-Kauf des gleichen Schiffs ist möglich + // Kaufen eines gebrauchten Schiffes - Typauswahl + switch (tempAuswahl) + { + case 0: + //Noch keine Auswahl getroffen + break; + case 1: + // Nächstes Model zeigen + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + + SchiffsIndex++; + + if (SchiffsIndex >= gebrauchteSchiffe.Count()) + SchiffsIndex = gebrauchteSchiffe.Count() - 1; + + aktuellGewählterSchiffstyp = gebrauchteSchiffe[SchiffsIndex].SCHIFFSTYP; + + GebrauchtWert = gebrauchteSchiffe[SchiffsIndex].NEUWERT; + //Verlaufswert muss berechnet werden + //-> Normalerweise wird prozentual zur Abnutzung die Differenz aus Neuwert-(Grad der Abnutzung in %) gerechnet + //-> Da Reparatur noch nich einbaut ist wird Altersabhängig bestimmt ((1/2)* Alter in jahren) + for (int Alter = 0; Alter < gebrauchteSchiffe[SchiffsIndex].ALTER; Alter++) + {//halbiere den NeuWert pro jahr + GebrauchtWert /= 2; + } + switch (aktuellGewählterSchiffstyp) + { + #region SchiffsParams + //Erzeugen der jeweiligen Anzeigen Texte je nach Schiffstyp + + case "SCHONER": + WechsleBG("Schiffsauswahl_Schoner"); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 30; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 50; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 70; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 90; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 110; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 130; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 150; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 170; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "BARK": + WechsleBG("Schiffsauswahl_Bark"); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 50; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 160; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 180; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 200; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "HOLZDAMPFSCHIFF": + WechsleBG("Schiffsauswahl_Holzdampfschiff"); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp.Substring(4), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 160; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 180; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "EISENDAMPFSCHIFF": + WechsleBG("Schiffsauswahl_Eisendampfschiff"); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("KABINEN FÜR " + gebrauchteSchiffe[SchiffsIndex].KABINEN + " PASSAGIERE.", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp.Substring(5), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "BRIGG": + WechsleBG("Schiffsauswahl_Brigg"); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 280; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 300; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 320; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "FREGATTE": + WechsleBG("Schiffsauswahl_Fregatte"); + TempText = new Text("KABINEN FÜR " + gebrauchteSchiffe[SchiffsIndex].KABINEN + " PASSAGIERE.", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 300; + TempText.Y = 30; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 200; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 220; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 240; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "KLIPPER": + WechsleBG("Schiffsauswahl_Klipper"); + TempText = new Text("KABINEN FÜR " + gebrauchteSchiffe[SchiffsIndex].KABINEN + " PASSAGIERE.", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 300; + TempText.Y = 30; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 50; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 70; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 90; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 340; + TempText.Y = 110; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 130; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 150; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 170; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 190; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + #endregion + } + + TextLieferant.erzeugeAnzeigeTexte(anzeigeTextListe); + + break; + case 2: + // Letztes Model zeigen + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + SchiffsIndex--; + + if (SchiffsIndex < 0) + SchiffsIndex = 0; + + aktuellGewählterSchiffstyp = gebrauchteSchiffe[SchiffsIndex].SCHIFFSTYP; + + GebrauchtWert = gebrauchteSchiffe[SchiffsIndex].NEUWERT; + //Verlaufswert muss berechnet werden + //-> Normalerweise wird prozentual zur Abnutzung die Differenz aus Neuwert-(Grad der Abnutzung in %) gerechnet + //-> Da Reparatur noch nich einbaut ist wird Altersabhängig bestimmt ((1/2)* Alter in jahren) + for (int Alter = 0; Alter < gebrauchteSchiffe[SchiffsIndex].ALTER; Alter++) + {//halbiere den NeuWert pro jahr + GebrauchtWert /= 2; + } + switch (aktuellGewählterSchiffstyp) + { + #region SchiffsParams + //Erzeugen der jeweiligen Anzeigen Texte je nach Schiffstyp + + case "SCHONER": + WechsleBG("Schiffsauswahl_Schoner"); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 30; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 50; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 70; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 90; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 110; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 130; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 150; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 170; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "BARK": + WechsleBG("Schiffsauswahl_Bark"); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 50; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 160; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 180; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 200; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "HOLZDAMPFSCHIFF": + WechsleBG("Schiffsauswahl_Holzdampfschiff"); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp.Substring(4), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 160; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 180; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "EISENDAMPFSCHIFF": + WechsleBG("Schiffsauswahl_Eisendampfschiff"); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("KABINEN FÜR " + gebrauchteSchiffe[SchiffsIndex].KABINEN + " PASSAGIERE.", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 80; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp.Substring(5), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "BRIGG": + WechsleBG("Schiffsauswahl_Brigg"); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 40; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 280; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 300; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 320; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "FREGATTE": + WechsleBG("Schiffsauswahl_Fregatte"); + TempText = new Text("KABINEN FÜR " + gebrauchteSchiffe[SchiffsIndex].KABINEN + " PASSAGIERE.", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 300; + TempText.Y = 30; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 60; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 80; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 100; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 350; + TempText.Y = 120; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 140; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 200; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 220; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 240; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + case "KLIPPER": + WechsleBG("Schiffsauswahl_Klipper"); + TempText = new Text("KABINEN FÜR " + gebrauchteSchiffe[SchiffsIndex].KABINEN + " PASSAGIERE.", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 300; + TempText.Y = 30; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("BESATZUNG: " + gebrauchteSchiffe[SchiffsIndex].MANNSCHAFT_MAXGRÖßE + " MANN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 50; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LADERAUM: " + gebrauchteSchiffe[SchiffsIndex].LADERAUM + " TONNEN", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 70; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("LIEFERZEIT: " + StandardLieferZeit.TotalDays + " TAGE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 320; + TempText.Y = 90; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("RUMPF: " + gebrauchteSchiffe[SchiffsIndex].BAUMATERIAL, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 340; + TempText.Y = 110; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("PREIS: $" + (GebrauchtWert / 100).ToString() + "," + (GebrauchtWert % 100).ToString(), Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 130; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("ALTER: " + gebrauchteSchiffe[SchiffsIndex].ALTER.ToString() + " JAHRE", Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 360; + TempText.Y = 150; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("TYPE: " + aktuellGewählterSchiffstyp, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 170; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + TempText = new Text("NAME: " + gebrauchteSchiffe[SchiffsIndex].NAME, Assets.FONT_AMIGA4EVER2, 12); + TempText.X = 380; + TempText.Y = 190; + TempText.Color = Globals.AnzeigeBraun; + anzeigeTextListe.Add(TempText); + break; + #endregion + } + + TextLieferant.erzeugeAnzeigeTexte(anzeigeTextListe); + break; + case 3: + // Nächste Geldquelle + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + //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) + { + TempQueue.Enqueue((f.BUDGET / 100).ToString()); + TempQueue.Enqueue((f.BUDGET % 100).ToString()); + } + } + + } + else + { + TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.COMMANDEUR == Globals.AktuellerSpieler && s.NAME == möglicheGeldQuellen[geldQuellenIndex]) + { + TempQueue.Enqueue((s.SCHIFFSBUDGET / 100).ToString()); + TempQueue.Enqueue((s.SCHIFFSBUDGET % 100).ToString()); + } + } + } + TextLieferant.wechsleAuswahlText("1.4", TempQueue, false); + break; + case 4: + // Bestätigung - Schiff kaufen + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + + Filiale GeldQuelleLager = null; + Schiff GeldQuelleSchiff = null; + kannBezahlen = true; + + if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") + { + foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) + { + if (Globals.AktuellerSpieler == f.BESITZER) + { + GeldQuelleLager = f; + } + } + } + else + { + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.NAME == möglicheGeldQuellen[geldQuellenIndex]) + { + GeldQuelleSchiff = s; + } + } + } + + if (GeldQuelleLager != null) + { + //Geldquelle ist Lager -> Geld hier abziehen + if (GeldQuelleLager.BUDGET < GebrauchtWert) + { + kannBezahlen = false; + } + else + { + //Geld muss bei Geldquelle abgezogen werden + GeldQuelleLager.verringereBudget(GebrauchtWert); + überprüfeGeldquellen(); + } + } + else + { + //Geldquelle ist Schiff -> geld hier abziehen + if (GeldQuelleSchiff.SCHIFFSBUDGET < GebrauchtWert) + { + kannBezahlen = false; + } + else + { + //Geld muss bei Geldquelle abgezogen werden + GeldQuelleSchiff.vermindernBudget(GebrauchtWert); + überprüfeGeldquellen(); + } + } + + if (kannBezahlen) + { + //Vorraussichtliches Fertigstellungsdatum + //Bereitstellungsevent ist immer direkt am nächsten tag (Wenn Schiff noch gebaut wird wird dessen Datum übernommen ansonsten standard 4 Tage) + DateTime TempDatum = Globals.AktuellesDatum.Add(new TimeSpan(1, 0, 0, 0)); + + //Erstellen des Schiffs als reales Objekt und anmelden im aktuellen Hafen + Schiff TempSchiff = gebrauchteSchiffe[SchiffsIndex]; + + //Hinzufügen des SchiffsAktivierungsEvent + //Hinweis: Wenn dieses Event nicht mit dem bool bezahlt = true versehen ist wird es am gegebenen Datum dem Hafen übergeben + TempSchiff.initiereBereitstellung(Globals.AktuellesDatum + StandardLieferZeit); + TempSchiff.COMMANDEUR = Globals.AktuellerSpieler; + gebrauchteSchiffe.Remove(TempSchiff); + + Globals.EventAktion(new WeltEvent(TempDatum, "SCHIFFBAU-BEREITSTELLUNG", null, null, TempSchiff, aktuellerHafen, 0, null, null), "EINFÜGEN"); + Globals.EventAktion(new WeltEvent(TempDatum.AddDays(3), "SCHIFFBAU-FERTIGSTELLUNG", null, null, TempSchiff, aktuellerHafen, 0, null, null), "EINFÜGEN"); + Globals.EventListe.Sort(new EventSorter()); + + //Kaufender Spieler erhält schiff + Globals.AktuellerSpieler.erhalteSchiff(TempSchiff); + + //Sprachtext erzeugen + TempSprachText.Clear(); + TempSprachParams.Clear(); + + //1. Text Param Anzahl Bau 2.Param Zeitfaktor(Monate/Tage) + TempSprachParams.Enqueue(StandardLieferZeit.TotalDays.ToString()); + TempSprachParams.Enqueue("TAGE"); + TempSprachText.Enqueue("Bezahlen_Abschluss1"); + TempSprachText.Enqueue("Bezahlen_Abschluss2"); + TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + + //Anzeigetext muss gelöscht werden + TextLieferant.erzeugeAnzeigeTexte(new List()); + + //Wechsel zu root Menü + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + WechsleBG("Büro"); + } + else + { + //Wenn nicht genug geld dann kurze Warnmeldung + TempSprachText.Enqueue("Bezahlen_KEINGELD"); + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + } + + + break; + case 5: + // Abbruch + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + WechsleBG("Büro"); + + //Anzeigetext muss gelöscht werden + TextLieferant.erzeugeAnzeigeTexte(new List()); + break; + } + #endregion + break; + case "1.5A": + #region Schiff verkaufen Logik - Schiffwahl (Demo ready) + // Verkaufen eines Schiffes - Model + switch (tempAuswahl) + { + case 0: + //Noch keine Auswahl getroffen + break; + case 999: + // Abbruch + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + WechsleBG("Büro"); + break; + default: + // Jeweilige Auswahl ist die Bootsauswahl + //Zunächst muss der Preis für das angebotene Schiff berechnet werden + //Im original wird prozentual berechnet -> aktuell jedoch noch ein 1/4. des Orignialpreises im bezug auf alter + + Schiff TempSchiff = null; + GebrauchtWert = 0; + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.NAME == letzteÜbergebeneListe[tempAuswahl - 1]) + { + TempSchiff = s; + GebrauchtWert = TempSchiff.NEUWERT; + break; + } + } + + letzteÜbergebeneListe.Clear(); + letzteÜbergebeneListe.Add(TempSchiff.NAME); + + // Runterrechnen des Gebrauchtwertes + for (int Alter = 0; Alter <= TempSchiff.ALTER; Alter++) + {//halbiere den NeuWert pro jahr (+ einmal mehr halbieren um zu vierteln) + GebrauchtWert /= 2; + } + + TempSprachText = new Queue(); + TempSprachText.Enqueue("Verkauf_Angebot"); + + TempSprachParams = new Queue(); + //1. Parameter Schiffsname + TempSprachParams.Enqueue(TempSchiff.NAME); + //2 & 3. Parameter Angebotspreis + TempSprachParams.Enqueue((GebrauchtWert / 100).ToString()); + TempSprachParams.Enqueue((GebrauchtWert % 100).ToString()); + TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + + TextLieferant.wechsleAuswahlText("1.5B", new Queue(), false); + + break; + + } + #endregion + break; + case "1.5B": + #region Schiff Verkaufen Bestätigung (Demo ready) + // Auswahl, ob schiff verkauft wird zum Angebotenen Preis + switch (tempAuswahl) + { + case 0: + //Noch keine auswahl getroffen + break; + case 1: + //Wiederholen Angebot + TempSprachText = new Queue(); + TempSprachText.Enqueue("Verkauf_Angebot"); + + TempSprachParams = new Queue(); + //1. Parameter Schiffsname + TempSprachParams.Enqueue(letzteÜbergebeneListe[0]); + //2 & 3. Parameter Angebotspreis + TempSprachParams.Enqueue((GebrauchtWert / 100).ToString()); + TempSprachParams.Enqueue((GebrauchtWert % 100).ToString()); + TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + break; + case 2: + //Bestätigen Verkauf + TempSprachText = new Queue(); + TempSprachText.Enqueue("Verkauf_Abschluss"); + + TempSprachParams = new Queue(); + //1 & 2. Parameter Angebotspreis + TempSprachParams.Enqueue((GebrauchtWert / 100).ToString()); + TempSprachParams.Enqueue((GebrauchtWert % 100).ToString()); + + //3. Parameter Zielort der Einzahlung -> hier wird erster eintrag in der möglichen Geldquellenliste genommen(meist das Lager) + if (möglicheGeldQuellen[0] == "LAGER") + { + TempSprachParams.Enqueue("LAGERKASSE"); + foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) + { + // Wenn Verkauf bestätigt wird der Betrag ins Lager gegeben + if (f.BESITZER == Globals.AktuellerSpieler) + { + f.erhöheBudget(GebrauchtWert); + break; + } + } + } + else + { + TempSprachParams.Enqueue("SCHIFFSKASSE DER " + möglicheGeldQuellen[0]); + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + //Wenn Verkauf bestätigt wird Betrag auf erstes angedocktes Schiff gegeben + if (s.NAME == möglicheGeldQuellen[0]) + { + s.erhöhenBudget(GebrauchtWert); + break; + } + } + } + + // Schiff muss an Hafen übergehen + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.NAME == letzteÜbergebeneListe[0]) + { + Globals.AktuellerSpieler.schiffLoswerden(s, true); + s.COMMANDEUR = null; + break; + } + } + + TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + + break; + case 3: + //Abbruch + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + WechsleBG("Büro"); + break; + } + #endregion + break; + case "1.6A": + #region Schiff bezahlen Logik-Auswahl welches zu bauende Schiff bezahlt wird (Demo ready) + // Auswahl welches Schiff noch abzubezahlen ist + switch (tempAuswahl) + { + case 0: + //Noch keine Auswahl getroffen + break; + case 999: + // Abbruch + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + TextLieferant.wechsleAuswahlText("1.6B", new Queue(), false); + WechsleBG("Büro"); + break; + default: + // Jeweilige Auswahl ist die Bootsauswahl + Schiff TempSchiff = null; + betragAbbezahlen = 0; + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.NAME == letzteÜbergebeneListe[tempAuswahl - 1]) + { + TempSchiff = s; + betragAbbezahlen = TempSchiff.RESTBETRAGKAUFPREIS; + break; + } + } + + if (betragAbbezahlen <= 0) + { + //Schiff ist bereits abbezahlt -> kein verzeigen in die nächste Seite + TempSprachText = new Queue(); + TempSprachText.Enqueue("Bezahlen_KeinRestbetrag"); + + TempSprachParams = new Queue(); + //1 & 2. Parameter Angebotspreis + TempSprachParams.Enqueue(letzteÜbergebeneListe[tempAuswahl - 1]); + TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + } + else + { + letzteÜbergebeneListe.Clear(); + letzteÜbergebeneListe.Add(TempSchiff.NAME); + + TempSprachText = new Queue(); + TempSprachText.Enqueue("Bezahlen_Restbetrag"); + + TempSprachParams = new Queue(); + //1 & 2. Parameter Angebotspreis + TempSprachParams.Enqueue((betragAbbezahlen / 100).ToString()); + TempSprachParams.Enqueue((betragAbbezahlen % 100).ToString()); + TextLieferant.erzeugeSprachText(TempSprachText, TempSprachParams, Globals.Remake.HalfWidth, 100); + + //Variable Auswahl Texte füllen + TempQueue = new Queue(); + + 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()); + WunschRestBetrag = f.BUDGET; + } + } + + } + else + { + TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.COMMANDEUR == Globals.AktuellerSpieler && s.NAME == möglicheGeldQuellen[geldQuellenIndex]) + { + TempQueue.Enqueue((s.SCHIFFSBUDGET / 100).ToString()); + TempQueue.Enqueue((s.SCHIFFSBUDGET % 100).ToString()); + WunschRestBetrag = s.SCHIFFSBUDGET; + } + } + } + + //2. Paramtext -> gewünschter Zahlbetrag (Std immer voller Preis oder was 1. Geldquelle hergibt) + if (betragAbbezahlen <= WunschRestBetrag) + { + //Wenn möglicher Betrag der geldquelle > abzubezahlender Betrag -> abzubezahlender Betrag = max + WunschRestBetrag = betragAbbezahlen; + } + + TempQueue.Enqueue((WunschRestBetrag / 100).ToString()); + TempQueue.Enqueue((WunschRestBetrag % 100).ToString()); + + //3 Paramtertext -> Schiffsname + TempQueue.Enqueue(TempSchiff.NAME); + + TextLieferant.wechsleAuswahlText("1.6B", TempQueue, false); + + } + break; + } + #endregion + break; + case "1.6B": + #region Schiff bezahlen Logik-Auswahl der finanziellen Aspekte des zu bezahlenden Schiff (Demo ready) + // Bezahlen des Restbetrages eines beauftragten Schiffsbaus + switch (tempAuswahl) + { + case 0: + //Noch keine Auswahl getroffen + break; + case 1: + //Geldquelle + + //Bei Linksklick erhöhen + geldQuellenIndex++; + + + 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()); + WunschRestBetrag = f.BUDGET; + } + } + + } + else + { + TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.COMMANDEUR == Globals.AktuellerSpieler && s.NAME == möglicheGeldQuellen[geldQuellenIndex]) + { + TempQueue.Enqueue((s.SCHIFFSBUDGET / 100).ToString()); + TempQueue.Enqueue((s.SCHIFFSBUDGET % 100).ToString()); + WunschRestBetrag = s.SCHIFFSBUDGET; + } + } + } + + //2. Paramtext -> gewünschter Zahlbetrag (Std immer voller Preis oder was 1. Geldquelle hergibt) + if (betragAbbezahlen <= WunschRestBetrag) + { + //Wenn möglicher Betrag der geldquelle > abzubezahlender Betrag -> abzubezahlender Betrag = max + WunschRestBetrag = betragAbbezahlen; + } + + TempQueue.Enqueue((WunschRestBetrag / 100).ToString()); + TempQueue.Enqueue((WunschRestBetrag % 100).ToString()); + + //3 Paramtertext -> Schiffsname + TempQueue.Enqueue(letzteÜbergebeneListe[0]); + + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + TextLieferant.wechsleAuswahlText("1.6B", TempQueue, false); + + break; + case 2: + //gewünschter Bezahlbetrag + if (TextLieferant.checkButtonAuswahl() == "MausLinks") + { + //Bei Linksklick erhöhen um $100 + betragAbbezahlen += 10000; + int TempMax; + Filiale QuellenFiliale; + Schiff QuellenSchiff = null; + Schiff TempSchiff = null; + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.NAME == letzteÜbergebeneListe[0]) + { + TempSchiff = s; + break; + } + } + + + if (setzeGeldQuelle().GetType() == typeof(Filiale)) + { + //Geldquelle ist Lager + QuellenFiliale = setzeGeldQuelle() as Filiale; + TempMax = QuellenFiliale.BUDGET; + if (betragAbbezahlen >= TempMax) + { + betragAbbezahlen = TempMax; + } + } + else + { + //Geldquelle ist Schiff + QuellenSchiff = setzeGeldQuelle() as Schiff; + TempMax = QuellenSchiff.SCHIFFSBUDGET; + if (betragAbbezahlen >= TempMax) + { + betragAbbezahlen = TempMax; + } + } + //check ob gewählter Betrag maximaler abbezahl betrag überschreitet + if (betragAbbezahlen >= TempSchiff.RESTBETRAGKAUFPREIS) + { + betragAbbezahlen = TempSchiff.RESTBETRAGKAUFPREIS; + } + } + else + { + //bei rechtsklick vermindern um $100 + betragAbbezahlen -= 10000; + + //Min kriterium + if (betragAbbezahlen < 0) + { + betragAbbezahlen = 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()); + + } + } + + } + else + { + TempQueue.Enqueue("DIE " + möglicheGeldQuellen[geldQuellenIndex] + " VERFÜGT"); + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.COMMANDEUR == Globals.AktuellerSpieler && s.NAME == möglicheGeldQuellen[geldQuellenIndex]) + { + TempQueue.Enqueue((s.SCHIFFSBUDGET / 100).ToString()); + TempQueue.Enqueue((s.SCHIFFSBUDGET % 100).ToString()); + WunschRestBetrag = s.SCHIFFSBUDGET; + } + } + } + + //2. Paramtext -> gewünschter Zahlbetrag (Std immer voller Preis oder was 1. Geldquelle hergibt) + TempQueue.Enqueue((betragAbbezahlen / 100).ToString()); + TempQueue.Enqueue((betragAbbezahlen % 100).ToString()); + + //3 Paramtertext -> Schiffsname + TempQueue.Enqueue(letzteÜbergebeneListe[0]); + + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + TextLieferant.wechsleAuswahlText("1.6B", TempQueue, false); + break; + case 3: + //Bestätigen + + //Absicherung, dass User nicht versucht 0 zu bezahlen + if (betragAbbezahlen <= 0) + { + TempSprachText = new Queue(); + TempSprachText.Enqueue("Bezahlen_KeinZahlbetrag"); + + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + } + else + { + //Abziehen des Geldbetrages + Filiale GeldQuelleLager = null; + Schiff GeldQuelleSchiff = null; + kannBezahlen = true; + + if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") + { + foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) + { + if (Globals.AktuellerSpieler == f.BESITZER) + { + GeldQuelleLager = f; + } + } + } + else + { + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.NAME == möglicheGeldQuellen[geldQuellenIndex]) + { + GeldQuelleSchiff = s; + } + } + } + + if (GeldQuelleLager != null) + { + //Geldquelle ist Lager -> Geld hier abziehen + GeldQuelleLager.verringereBudget(GebrauchtWert); + überprüfeGeldquellen(); + + } + else + { + //Geldquelle ist Schiff -> geld hier abziehen + GeldQuelleSchiff.vermindernBudget(GebrauchtWert); + überprüfeGeldquellen(); + + } + + //Vorraussichtliches Fertigstellungsdatum + //Bereitstellungsevent ist immer direkt am nächsten tag (Wenn Schiff noch gebaut wird wird dessen Datum übernommen ansonsten standard 4 Tage) + DateTime TempDatum = Globals.AktuellesDatum.Add(new TimeSpan(1, 0, 0, 0)); + Schiff TempSchiff = null; + //Suchen des Schiffs im aktuellen Hafen + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.NAME == letzteÜbergebeneListe[0]) + { + TempSchiff = s; + break; + } + } + + //Hinzufügen des SchiffsAktivierungsEvent + //Hinweis: Wenn dieses Event nicht mit dem bool bezahlt = true versehen ist wird es am gegebenen Datum dem Hafen übergeben + if (TempSchiff.schiffAbbezahlen(betragAbbezahlen) == "ERFOLG_BEZAHLT") + { + //Wenn schiff fertig abbezahlt dann wird bereitstellungsevent eingefügt + Globals.EventAktion(new WeltEvent(TempDatum, "SCHIFFBAU-BEREITSTELLUNG", null, null, TempSchiff, aktuellerHafen, 0, null, null), "EINFÜGEN"); + Globals.EventListe.Sort(new EventSorter()); + } + + //Erzeugen Sprachtext + TempSprachText = new Queue(); + TempSprachText.Enqueue("Bezahlen_BestenDank"); + TempSprachText.Enqueue("Bezahlen_Zufrieden"); + + TextLieferant.erzeugeSprachText(TempSprachText, new Queue(), Globals.Remake.HalfWidth, 100); + + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + } + + + break; + case 4: + // Abbruch + Console.WriteLine("Auswahl " + tempAuswahl + " der Ebene " + TextLieferant.aktuelleEbene); + TextLieferant.wechsleAuswahlText("1", new Queue(), false); + break; + } + #endregion + break; + + } + } + + public Schiff suchenSchablone(string SchiffsTyp) + { + foreach (Schiff s in Globals.AlleSchiffsTypen) + { + if (s.SCHIFFSTYP == SchiffsTyp) + { return s; } + } + return null; + } + + public void WechsleBG(string Ziel) + { + // Vor wechsel muss erstmal der aktuelle ausgeblendet werden + aktuellerBG.Alpha = 0f; + RemoveGraphic(aktuellerBG); + // Wechseln des Background je nach Zielebene des Auswahlbaums (so muss nicht jeweils neue Szenen für einzelne Baum Strukturen gebaut werden) + switch (Ziel) + { + case "Büro": + WerftScreen_Büro.Alpha = 1f; + aktuellerBG = WerftScreen_Büro; + break; + case "Reparatur": + WerftScreen_Reparatur.Alpha = 1f; + aktuellerBG = WerftScreen_Reparatur; + break; + case "Schiffsauswahl": + WerftScreen_SchiffsAuswahl.Alpha = 1f; + aktuellerBG = WerftScreen_SchiffsAuswahl; + break; + case "Schiffsauswahl_Schoner": + Schiffsauswahl_Schoner.Alpha = 1f; + aktuellerBG = Schiffsauswahl_Schoner; + break; + case "Schiffsauswahl_Bark": + Schiffsauswahl_Bark.Alpha = 1f; + aktuellerBG = Schiffsauswahl_Bark; + break; + case "Schiffsauswahl_Holzdampfschiff": + Schiffsauswahl_Holzdampfschiff.Alpha = 1f; + aktuellerBG = Schiffsauswahl_Holzdampfschiff; + break; + case "Schiffsauswahl_Eisendampfschiff": + Schiffsauswahl_Eisendampfschiff.Alpha = 1f; + aktuellerBG = Schiffsauswahl_Eisendampfschiff; + break; + case "Schiffsauswahl_Brigg": + Schiffsauswahl_Brigg.Alpha = 1f; + aktuellerBG = Schiffsauswahl_Brigg; + break; + case "Schiffsauswahl_Fregatte": + Schiffsauswahl_Fregatte.Alpha = 1f; + aktuellerBG = Schiffsauswahl_Fregatte; + break; + case "Schiffsauswahl_Klipper": + Schiffsauswahl_Klipper.Alpha = 1f; + aktuellerBG = Schiffsauswahl_Klipper; + break; + case "Schiffsauswahl_Name": + Schiffsauswahl_Name.Alpha = 1f; + aktuellerBG = Schiffsauswahl_Name; + break; + } + + // Wenn Änderung aktiv dann neues BG laden + AddGraphic(aktuellerBG); + } + + 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 Entity setzeGeldQuelle() + { + + if (möglicheGeldQuellen[geldQuellenIndex] == "LAGER") + { + foreach (Filiale f in aktuellerHafen.vorhandeneFilialen) + { + if (f.BESITZER == Globals.AktuellerSpieler) + { + return f; + } + } + + } + else + { + foreach (Schiff s in aktuellerHafen.angedockteSchiffe) + { + if (s.NAME == möglicheGeldQuellen[geldQuellenIndex]) + { + return s; + } + } + } + return null; + } + + 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); + } + } + } + +} diff --git a/1869_Remake/Scenes/worldMap.cs b/1869_Remake/Scenes/worldMap.cs new file mode 100644 index 0000000..5790c16 --- /dev/null +++ b/1869_Remake/Scenes/worldMap.cs @@ -0,0 +1,679 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Otter; +using _1869_Remake; +using _1869_Remake.Entities; + +namespace _1869_Remake.Scenes +{ + public class worldMap : Scene + { + // Imageobjekte mit der Weltkarte Bildschirmen + public Image Frame = new Image(Assets.MAINSCREEN_FRAME); + public Image Welt; + public Image FadeInBlackScreen = new Image(Assets.BLACKSCREEN); + public Image FadeOutBlackScreen = new Image(Assets.BLACKSCREEN); + + //Background Animation + AnimatingEntity BackgroundMeer = new AnimatingEntity(0, 0); + + //FadeOutVariablen (Parameter sind für externe FadeOutTrigger + private bool FadeOut; + private string FadeOutZiel; + private string FadeOutZiel_Param1; + + // Icons unten rechts im Bild + public Image Coin = new Image(Assets.ICON_COIN); + public Image Coin_clicked = new Image(Assets.ICON_COIN_CLICKED); + + public Image Anker = new Image(Assets.ICON_ANKER); + public Image Anker_clicked = new Image(Assets.ICON_ANKER_CLICKED); + + public Image Buch = new Image(Assets.ICON_BUCH); + public Image Buch_clicked = new Image(Assets.ICON_BUCH_CLICKED); + + public Image GeldSack = new Image(Assets.ICON_GELDSACK); + public Image GeldSack_clicked = new Image(Assets.ICON_GELDSACK_CLICKED); + + public Image SchiffsController = new Image(Assets.SCHIFFSCONTROLLER); + + public Text SpielerLabel; + + //AnzeigeTimer aktuell nur für warten vor dem 1. Firmenanzeigen (später direkt nach tween aber definiert durch nächsten aktions knoten[Zeitweel]) + public const float TIMER_GRENZE = 90f; + public float szenenTimer = 0f; + + //Indikator für reload der Icons + public bool miniIconsGesetzt = false; + + //Zeitrad + ZeitRad EventRad; + + //Alle aktuell im Screen angezeigten Elemente + List aktiveHäfen = new List(); + List aktiveKnoten = new List(); + List aktiveSeeStraßen = new List(); + + //Schlange aller gewählten Meeresknote => Das ist die Routenauswahl + Queue SeeRoute = new Queue(); + + //Um zu verhindern dass mehrere Subelemente aktiv sind + public bool SubElementAktiv = false; + + public worldMap() + { + Globals.aktuelleSzene = "Main"; + + //Initialisieren des Hauptbildschirms und einblenden + switch (Globals.weltKarte) + { + case "EUROPA": Welt = new Image(Assets.WELT_EUROPA); break; + case "AMERIKA": break; + case "AFRIKA": break; + case "ASIEN": break; + } + //Meereshintergrund + Add(BackgroundMeer); + + Welt.CenterOrigin(); + Welt.X = Globals.Remake.HalfWidth; + Welt.Y = Globals.Remake.HalfHeight; + + AddGraphic(Welt); + + Frame.CenterOrigin(); + Frame.X = Globals.Remake.HalfWidth; + Frame.Y = Globals.Remake.HalfHeight; + + AddGraphic(Frame); + + //Icons vorbereiten + //Position ausgelotet -> nicht Relativ == Keine Änderung der Auflösung Möglich(Falls doch gewünscht muss umgedacht/umgebaut werden) + // -> nochmal durchtesten + + //Münze = Bank/Kredite + Coin.CenterOrigin(); + Coin_clicked.CenterOrigin(); + + Coin.X = 450; + Coin.Y = 442; + Coin_clicked.X = 450; + Coin_clicked.Y = 442; + + //alpha des Clicked Icons auf 0 setzen und bei Click einblenden (auf 1 setzen) + Coin_clicked.Alpha = 0f; + + AddGraphic(Coin); + AddGraphic(Coin_clicked); + + //Anker = Rekordzeiten + Anker.CenterOrigin(); + Anker_clicked.CenterOrigin(); + Anker.X = 504; + Anker.Y = 442; + Anker_clicked.X = 504; + Anker_clicked.Y = 442; + + Anker_clicked.Alpha = 0f; + + AddGraphic(Anker); + AddGraphic(Anker_clicked); + + //Geldsack = statistiken + GeldSack.CenterOrigin(); + GeldSack_clicked.CenterOrigin(); + GeldSack.X = 558; + GeldSack.Y = 442; + GeldSack_clicked.X = 558; + GeldSack_clicked.Y = 442; + + GeldSack_clicked.Alpha = 0f; + + AddGraphic(GeldSack); + AddGraphic(GeldSack_clicked); + + //Buch = Einstellungen/Optionen/SAVE-LOAD + Buch.CenterOrigin(); + Buch_clicked.CenterOrigin(); + Buch.X = 612; + Buch.Y = 442; + Buch_clicked.X = 612; + Buch_clicked.Y = 442; + + Buch_clicked.Alpha = 0f; + + AddGraphic(Buch); + AddGraphic(Buch_clicked); + + //Schiffscontroller + SchiffsController.CenterOrigin(); + SchiffsController.X = 125; + SchiffsController.Y = 275; + + AddGraphic(SchiffsController); + + + //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; + + //ZeitRad Hinzufügen + EventRad = new ZeitRad(true); + //Draw.Rectangle(EventRad.startPosX, EventRad.startPosY, 100, 50); + + + // Nur nächstes Event Vorladen wenn letzte Szene ConfigSzene war (Startsequenz des Spiels) + if (Globals.LetzteSzene == "Config") + { + EventRad.nächstesDatumLaden(); + } + + //Anzeige des Zeitrads aktivieren + EventRad.anzeigeEvent(); + + this.Add(EventRad); + + //Text in der Kopfzeile zu aktuellem Spieler -> Später ergänzt durch breites Holzbrett das schnell durchs bild fliegt, kurz anhält + //name Lesbar ist und wieder weg fliegt kombiniert mit wasser splash effekt zur Hintergrund überblendung + //+ eben label in der kopfzeile (Damit immer klar deutlich ist wer dran ist + hot seat funktion ohne dass der Gegner sehen + //kann was man getan hat und wo man gerade war) + SpielerLabel = new Text(Globals.AktuellerSpieler.FIRMENNAME, Assets.FONT_AMIGA4EVER2, 18); + SpielerLabel.CenterOrigin(); + + //Weil diese Farbe nur für dieses Label genutzt wird wird sie nich globalisiert! + SpielerLabel.Color = new Color("333333"); + SpielerLabel.ShadowColor = new Color("e2e2e2"); + SpielerLabel.ShadowX = 2; + SpielerLabel.ShadowY = 2; + SpielerLabel.X = 325; + SpielerLabel.Y = 12; + //SpielerLabel.Alpha = 0f; + + AddGraphic(SpielerLabel); + + //Laden der Clickboxen der Städte zum aktuellen Weltbereich + LadeStädte(); + + LadeMeeresKnoten(); + LadeSeeStraßen(); + + //Icons laden + setzeMiniIcons(); + + Tween(FadeInBlackScreen, new { Alpha = 0f }, 100f, 0f).Ease(Ease.BackInOut); + AddGraphics(FadeInBlackScreen); + + + + } + + public override void Render() + { + base.Render(); + + //Reguläre Render Reihenfolge ist Scene>>Entities ... Background ist ein Entity aber einige Grafiken in der Scene müssen danach gerendert werden + Draw.Graphic(Welt); + Draw.Graphic(Frame); + Draw.Graphic(SpielerLabel); + Draw.Graphic(Coin); + Draw.Graphic(Coin_clicked); + Draw.Graphic(Anker); + Draw.Graphic(Anker_clicked); + Draw.Graphic(Buch); + Draw.Graphic(Buch_clicked); + Draw.Graphic(GeldSack); + Draw.Graphic(SchiffsController); + ZeichneStädte(); + Draw.Graphic(GeldSack_clicked); + Draw.Graphic(FadeInBlackScreen); + Draw.Graphic(FadeOutBlackScreen); + } + + + public override void Update() + { + base.Update(); + + szenenTimer++; + + + + if (!miniIconsGesetzt) + { + setzeMiniIcons(); + miniIconsGesetzt = true; + } + + if (FadeOut) + { + if (FadeOutBlackScreen.Alpha >= 0.999f) + { + Globals.LetzteSzene = "Main"; + miniIconsGesetzt = false; + //Entitäten sind noch der Scene zugeschrieben. Wenn Szene wechselt, wird diese weggeworfen aber die Entitäten bleiben "zugeschrieben" -> erneutes zuweisen zu einer Szene klappt nicht mehr + this.RemoveAll(); + Scene ZielSzene = null; + switch (FadeOutZiel) + { + case "Handel": + ZielSzene = new HandelScene(FadeOutZiel_Param1); + break; + case "Optionen": + ZielSzene = new OptionenScene(); + break; + case "Bank": + ZielSzene = new BankScene(); + break; + case "Hall of Fame": + ZielSzene = new HallOfFameScene(); + break; + case "Werft": + ZielSzene = new WerftScene(FadeOutZiel_Param1); + break; + case "Filiale": + //Anpassen// + ZielSzene = new StatistikScene(); + break; + case "Bar": + //Anpassen// + ZielSzene = new BarScene(FadeOutZiel_Param1); + break; + case "Statistiken": + ZielSzene = new StatistikScene(); + break; + } + if (ZielSzene != null) + { + FadeOut = false; + this.RemoveAll(); + Globals.Remake.SwitchScene(ZielSzene); + } + + else + Console.WriteLine("Fehler bei Szenenwechsel in WorldMap!"); + } + } + else + { + //bei jedem Tick überprüfen ob einer der Häfen einen FadeOut erwartet + for (int i = 0; i < aktiveHäfen.Count(); i++) + { + string TempZiel; + string TempParam; + aktiveHäfen[i].prüfeExternerFadeOut(out TempZiel, out TempParam); + // Möglichkeit für jeden potentiellen Screen gesonderte Logik für den Übergang in die neue Szene zu füllen + switch (TempZiel) + { + case "Error": + // Mögliches Fehlerhandling; Aktuell keine Handlung wenn kein Fadeout gesetzt wurde + break; + case "Handel": + setzeFadeOut(TempZiel); + FadeOutZiel_Param1 = TempParam; + //wenn FadeOut initiiert -> Lösche FadeOut Marker im Hafen + aktiveHäfen[i].resetFadeOut(); + break; + case "Werft": + setzeFadeOut(TempZiel); + FadeOutZiel_Param1 = TempParam; + //wenn FadeOut initiiert -> Lösche FadeOut Marker im Hafen + aktiveHäfen[i].resetFadeOut(); + break; + case "Bar": + setzeFadeOut(TempZiel); + FadeOutZiel_Param1 = TempParam; + //wenn FadeOut initiiert -> Lösche FadeOut Marker im Hafen + aktiveHäfen[i].resetFadeOut(); + break; + case "Filiale": + setzeFadeOut(TempZiel); + FadeOutZiel_Param1 = TempParam; + //wenn FadeOut initiiert -> Lösche FadeOut Marker im Hafen + aktiveHäfen[i].resetFadeOut(); + break; + + } + + } + + //Click Logging für Städte Hitboxen + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + Console.Clear(); + + Console.WriteLine("Maus X: " + this.MouseX.ToString() + " Maus Y: " + this.MouseY.ToString()); + + } + + if (Globals.PlayerSession.Controller.Button("Z").Released ) + { + Console.Clear(); + EventRad.zeigeNächstesEventVomTyp("REISE-START"); + EventRad.zeigeNächstesEventVomTyp("REISE-ANKUNFT"); + } + + //Wenn timer abgelaufen wird Label Angezeigt -> später gegen aktuellen Spieler austauschen(bestimmt durch ZeitQueue) + if (szenenTimer >= TIMER_GRENZE) + { + //SpielerLabel.Alpha = 1f; + } + + //Click auf das Zeitrad verursacht anzeige des nächsten Datums + if (EventRad.wurdeZeiRadGeklicked()) + { + //Wenn auf Zeitrad geClicked kann der aktuelle Spieler gewechselt haben + //deshalb neu überprüfen, ob Fähnchen oder Schiffsicon an den Häfen gesetzt werden muss + foreach (Hafen h in aktiveHäfen) + { + h.aktiviereFähnchen(Globals.AktuellerSpieler); + //Das gleiche für Schiffe + h.aktiviereSchiffsIcon(Globals.AktuellerSpieler); + } + + //Anzeige des Zeitrads aktivieren + EventRad.anzeigeEvent(); + this.RemoveGraphic(SpielerLabel); + + SpielerLabel = new Text(Globals.AktuellerSpieler.FIRMENNAME, Assets.FONT_AMIGA4EVER2, 18); + SpielerLabel.CenterOrigin(); + + //Weil diese Farbe nur für dieses Label genutzt wird wird sie nich globalisiert! + SpielerLabel.Color = new Color("333333"); + SpielerLabel.ShadowColor = new Color("e2e2e2"); + SpielerLabel.ShadowX = 2; + SpielerLabel.ShadowY = 2; + SpielerLabel.X = 325; + SpielerLabel.Y = 12; + //SpielerLabel.Alpha = 0f; + + setzeMiniIcons(); + AddGraphic(SpielerLabel); + } + + //Click Logik für Schiffscontroller + if (Util.InRect(this.MouseX, this.MouseY, SchiffsController.X - SchiffsController.HalfWidth, SchiffsController.Y - SchiffsController.HalfHeight, 150, 200) && !Globals.DisplaySubElementAktiv) + { + if (Globals.PlayerSession.Controller.Button("MausLinks").Down) + { + + } + else + { + + } + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + //Test Reiselogik + Console.WriteLine("Controller Links Geclicked"); + //Testen warum bei Schiffserstellung der Spieler nicht wind vom neuen Schiff erhält und wenn schiffe registriert werden hier weiter testen!!! + WeltEvent SchiffsReise = new WeltEvent(Globals.AktuellesDatum, "REISE-START", Globals.AktuellerSpieler, null, Globals.AktuellerSpieler.SCHIFFE[0], Globals.AlleHäfen[Globals.AktuellerSpieler.SCHIFFE[0].angedocktAnHafen]); + WeltEvent SchiffsReise2 = new WeltEvent(Globals.AktuellesDatum.AddDays(3), "REISE-ANKUNFT", Globals.AktuellerSpieler, null, Globals.AktuellerSpieler.SCHIFFE[0], Globals.AlleHäfen["HAMBURG"]); + Globals.EventAktion(SchiffsReise,"EINFÜGEN"); + Globals.EventAktion(SchiffsReise2, "EINFÜGEN"); + } + + if (Globals.PlayerSession.Controller.Button("MausRechts").Released) + { + Console.WriteLine("Controller Rechts Geclicked"); + Console.Clear(); + EventRad.zeigeNächstenEventTag(); + } + + + } + else + { + + } + + + //Hovereffecte bei Icons + //Münze + if (Util.InRect(this.MouseX, this.MouseY, Coin.X - Coin.HalfWidth, Coin.Y - Coin.HalfWidth, 44, 55) && !Globals.DisplaySubElementAktiv) + { + if (Globals.PlayerSession.Controller.Button("MausLinks").Down) + { + Coin_clicked.Alpha = 1f; + } + else + { + Coin_clicked.Alpha = 0f; + } + + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + + //FadeOut zu Bank + setzeFadeOut("Bank"); + + } + } + else + { + Coin_clicked.Alpha = 0f; + } + + //Anker + if (Util.InRect(this.MouseX, this.MouseY, Anker.X - Anker.HalfWidth, Anker.Y - Anker.HalfWidth, 44, 55) && !Globals.DisplaySubElementAktiv) + { + if (Globals.PlayerSession.Controller.Button("MausLinks").Down) + { + Anker_clicked.Alpha = 1f; + } + else + { + Anker_clicked.Alpha = 0f; + } + + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + //FadeOut zu Hall Of Fame + setzeFadeOut("Hall of Fame"); + + } + } + else + { + Anker_clicked.Alpha = 0f; + } + + + //GeldSack + if (Util.InRect(this.MouseX, this.MouseY, GeldSack.X - GeldSack.HalfWidth, GeldSack.Y - GeldSack.HalfWidth, 44, 55) && !Globals.DisplaySubElementAktiv) + { + if (Globals.PlayerSession.Controller.Button("MausLinks").Down) + { + GeldSack_clicked.Alpha = 1f; + } + else + { + GeldSack_clicked.Alpha = 0f; + } + + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + //FadeOut zu Statistik Screen + setzeFadeOut("Statistiken"); + + } + } + else + { + GeldSack_clicked.Alpha = 0f; + } + + //Buch + if (Util.InRect(this.MouseX, this.MouseY, Buch.X - Buch.HalfWidth, Buch.Y - Buch.HalfWidth, 44, 55) && !Globals.DisplaySubElementAktiv) + { + if (Globals.PlayerSession.Controller.Button("MausLinks").Down) + { + Buch_clicked.Alpha = 1f; + } + else + { + Buch_clicked.Alpha = 0f; + } + + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + //FadeOut zu Optionsscreen + setzeFadeOut("Optionen"); + } + } + else + { + Buch_clicked.Alpha = 0f; + } + + } + + } + + + public void LadeStädte() + { + //Es sind immer die gleichen festen Städte zu laden + switch (Globals.weltKarte) + { + case "EUROPA": + importHafen("ODESSA"); + importHafen("TRIEST"); + importHafen("BARCELONA"); + importHafen("LISSABON"); + importHafen("LE HAVRE"); + importHafen("AMSTERDAM"); + importHafen("HAMBURG"); + importHafen("LONDON"); + importHafen("LIVERPOOL"); + importHafen("TUNIS"); + importHafen("PORT SAID"); + + break; + case "AMERIKA": break; + case "ASIEN": break; + case "AFRIKA": break; + } + //Wenn Häfen geladen sind einmal alle Icons richtig setzen + setzeMiniIcons(); + miniIconsGesetzt = true; + } + + public void ZeichneStädte() + { + switch (Globals.weltKarte) + { + case "EUROPA": + Draw.Entity(Globals.AlleHäfen["ODESSA"]); + Draw.Entity(Globals.AlleHäfen["TRIEST"]); + Draw.Entity(Globals.AlleHäfen["BARCELONA"]); + Draw.Entity(Globals.AlleHäfen["LISSABON"]); + Draw.Entity(Globals.AlleHäfen["LE HAVRE"]); + Draw.Entity(Globals.AlleHäfen["AMSTERDAM"]); + Draw.Entity(Globals.AlleHäfen["HAMBURG"]); + Draw.Entity(Globals.AlleHäfen["LONDON"]); + Draw.Entity(Globals.AlleHäfen["LIVERPOOL"]); + Draw.Entity(Globals.AlleHäfen["TUNIS"]); + Draw.Entity(Globals.AlleHäfen["PORT SAID"]); + + break; + case "AMERIKA": break; + case "ASIEN": break; + case "AFRIKA": break; + } + //Wenn Häfen geladen sind einmal alle Icons richtig setzen + setzeMiniIcons(); + miniIconsGesetzt = true; + } + public void LadeMeeresKnoten() + { + //Es sind immer die gleichen festen MeeeresKnoten zu laden + switch (Globals.weltKarte) + { + case "EUROPA": + importMeeresKnoten("Test GB", 50, 50); + importMeeresKnoten("Test Spanien", 150, 150); + break; + case "AMERIKA": break; + case "ASIEN": break; + case "AFRIKA": break; + } + //Wenn Häfen geladen sind einmal alle Icons richtig setzen + setzeMiniIcons(); + miniIconsGesetzt = true; + } + + public void LadeSeeStraßen() + { + //Es sind immer die gleichen festen MeeeresKnoten zu laden + switch (Globals.weltKarte) + { + case "EUROPA": + importSeeStraße("GB - Spanien"); + importSeeStraße("Spanien - GB"); + + + break; + case "AMERIKA": break; + case "ASIEN": break; + case "AFRIKA": break; + } + //Wenn Häfen geladen sind einmal alle Icons richtig setzen + setzeMiniIcons(); + miniIconsGesetzt = true; + } + + private void importHafen(string Name) + { + + Add(Globals.AlleHäfen[Name]); + aktiveHäfen.Add(Globals.AlleHäfen[Name]); + + } + + private void importMeeresKnoten(string Name, int xPos, int yPos) + { + Globals.AlleMeeresKnoten[Name].setzeNeueScreenPos(xPos, yPos); + Add(Globals.AlleMeeresKnoten[Name]); + aktiveKnoten.Add(Globals.AlleMeeresKnoten[Name]); + + } + + private void importSeeStraße(string Name) + { + Add(Globals.AlleSeeStraßen[Name]); + aktiveSeeStraßen.Add(Globals.AlleSeeStraßen[Name]); + + } + + private void setzeMiniIcons() + { + foreach (Hafen h in aktiveHäfen) + { + h.aktiviereFähnchen(Globals.AktuellerSpieler); + h.aktiviereSchiffsIcon(Globals.AktuellerSpieler); + } + } + + public void setzeFadeOut(string Ziel) + { + //FadeOut + AddGraphic(FadeOutBlackScreen); + Tween(FadeOutBlackScreen, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); + + EventRad.setzeFadeOut(); + + FadeOut = true; + FadeOutZiel = Ziel; + } + } +} diff --git a/1869_Remake/ToolKlassen/TextBox.cs b/1869_Remake/ToolKlassen/TextBox.cs new file mode 100644 index 0000000..532faaa --- /dev/null +++ b/1869_Remake/ToolKlassen/TextBox.cs @@ -0,0 +1,188 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Otter; + +namespace _1869_Remake.ToolKlassen +{ + public class TextBox : Entity + { + // Textbox liefert Text eingabe + + + // Anzeigetext. + public Text Text = new Text("", Assets.FONT_AMIGA4EVER2, 10); + + // Hat die Textbox den Fokus der Applikation? + public bool HasFocus; + + // Die Breite und Höhe des Rechtecks wird als Referenz für den Text genommen + public int entetyWidth = 0; + public int entetyHeight = 0; + + // Maximale Characteranzahl + public int CharacterLimit; + + // Text der in den Anzeigetext geschoben wird + public string InputString = ""; + + + + + public TextBox(float x, float y, int width, int height, int limit, bool FadeIn) + : base(x, y) + { + + this.entetyWidth = width; + this.entetyHeight = height; + + CharacterLimit = limit; + + // Schriftfarbe Rot wie auf dem Titelbildschirm (eventuell zu Grau wie im Original) + Text.Color = new Otter.Color("a01010"); + + //Schriftposition im Hintergrund (Y Offset damit nicht press am oberen Rand) + + Text.Y = Text.Y + 2; + if (FadeIn) + { + Text.Alpha = 0f; + + + Tween(Text, new { Alpha = 1f }, 90f, 0f).Ease(Ease.BackInOut); + + } + // Hinzufügen der Grafiken zur Entity (damit Dargestellt wird muss Entität zur Szene hinzugefügt werden). + AddGraphic(this.Text); + + + + } + + public override void Render() + { + base.Render(); + //Draw.Rectangle(this.X, this.Y, entetyWidth, entetyHeight, null, Color.Red, 2f); + } + + public override void Update() + { + base.Update(); + + Text.X = (entetyWidth / 2) - (5 * InputString.Length); + if (Text.String.IsNotEmpty()) + Text.String = Text.String.ToUpper(); + if (InputString.IsNotEmpty()) + InputString = InputString.ToUpper(); + + // Wenn die Textbox Fokus hat: Eingabetext wird um gedrückte Taste ergänzt (Keystring würde endloswachsen wenn nicht gecleared!) + if (HasFocus) + { + InputString = InputString + Input.KeyString; + if (InputString.IsNotEmpty()) + InputString = InputString.ToUpper(); + Input.ClearKeystring(); + // Wenn Zeichenlimit erreicht => kein weiteres hinzufügen + if (InputString.Length > CharacterLimit) + { + //nur die Zeichen unter dem Limit bleiben + InputString = InputString.Substring(0, CharacterLimit); + + // Tastenlog wird um alle Zeichen nach dem Limit erweitert + if (InputString.IsNotEmpty()) + InputString = InputString.ToUpper(); + Input.KeyString = InputString; + } + + // wenn Zeichenlimit nicht erreicht ist => Anzeige des Cursors + if (InputString.Length < CharacterLimit) + { + //Hinzufügen des Cursors wie im Original + Text.String = InputString + "-"; + Text.String = Text.String.ToUpper(); + + } + else + { + // Wenn das Limit genau erreicht ist dann nur den Text anzeigen ohne Cursor + Text.String = InputString; + if (Text.String.IsNotEmpty()) + Text.String = Text.String.ToUpper(); + } + + // Wenn der Fokus da ist, wird bei Backspace gelöscht + if (Input.KeyPressed(Key.Back) && InputString.Length > 0) + { + InputString = InputString.Substring(0, InputString.Length - 1); + if (InputString.IsNotEmpty()) + InputString = InputString.ToUpper(); + Input.ClearKeystring(); + } + } + else + { + // Wenn Textbox keinen Fokus hat dann nur den Eingabetext anzeigen + Text.String = InputString; + if (Text.String.IsNotEmpty()) + Text.String = Text.String.ToUpper(); + + } + + // bei Linker Maustaste => check ob auf oder nicht auf Textbox geklickt wurde + if (Input.MouseButtonPressed(MouseButton.Left)) + { + if (Util.InRect(Scene.MouseX, Scene.MouseY, X, Y, entetyWidth, entetyHeight)) + { + + + if (!HasFocus) + { + // Wenn geklickt wurde und kein Fokus dann Fokus setzen + Focus(); + } + } + else + { + if (HasFocus) + { + // Wenn nicht geklickt und Fokus vorhanden dann Fokus wegnehmen + Unfocus(); + } + } + } + + + + + } + + public String getInput() + { + Unfocus(); + return InputString; + } + + public void Focus() + { + // Fokus wird aktiviert + HasFocus = true; + + Input.ClearKeystring(); + + } + + public void Unfocus() + { + //Fokus wird deaktiviert. + HasFocus = false; + // string wird getrimmt (falls escape charactere wie\n beim Button druck mit gelesen wurden) + InputString = InputString.Trim(); + if (InputString.IsNotEmpty()) + InputString = InputString.ToUpper(); + + } + + } +} diff --git a/1869_Remake/ToolKlassen/TextBuilder.cs b/1869_Remake/ToolKlassen/TextBuilder.cs new file mode 100644 index 0000000..2fc6ef7 --- /dev/null +++ b/1869_Remake/ToolKlassen/TextBuilder.cs @@ -0,0 +1,2189 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using _1869_Remake; +using _1869_Remake.Entities; +using Otter; + +namespace _1869_Remake.ToolKlassen +{ + public class TextBuilder : Entity + { + //Textbuilder Klasse wird in Scenen eingebunden und Verwaltet alle Texte in dieser Szene und gibt indikatoren nach außen auf abfrage + // geladene Texte und Textbäume/Listen werden über das preset und den Modus definiert + string preset; + + public const float TIMER_GRENZE = 200f; + public float textTimer = 0f; + public bool resetTextTimer = false; + public bool textSprachAktiv = false; + public bool textAktiv = false; + public bool textBaumAktiv = false; + public bool tafelTextAktiv = false; + public bool textAnzeigeAktiv = false; + public bool anzeigeTextAktiv = false; + + //TextBaustein identifiziert durch ID-String -> Texte können über ihre Liste und über die Text ID abgerufen werden + //User implementiert Textbuilder und kann einen Text über IDs erstellen lassen + Dictionary MöglicheTexte = new Dictionary(); + + //Hier werden alle Textlisten gespeichert und über einen Zweckstring gespeichert und abgerufen. + // es wird eine Liste statt texte direkt gespeichert damit wir immer die möglichkeit auf Sequenzen haben(Text folgen) + //Textpool speichert immer nur Texte der jeweiligen Szene (nicht alle vorhandenen) -> Es kann sein dass gewisse Texte in mehreren Szenen vorkommen + Dictionary> TextPool = new Dictionary>(); + + //Hier werden alle Textverzweigungen für die einzelnen Ebenen gespeichert (nur für Auswahltexte) + //Speichert hierarchische Abfolge von Texten -> Wenn Text A geklickt, dann Liste B an Texten anzeigen etc) + Dictionary> TextBaum = new Dictionary>(); + + //Tafeltexte werden als gemeinsame Liste gespeichert -> In jedem text steht seine genaue Position selbstständig drin + //Bei Listen verändernden Ereignissen (Einkauf/Verkauf) wird Funktion zum update der Listen aufgerufen + public List TafelTextListe = new List(); + //AnzeigeText Liste + public List AnzeigeTextListe = new List(); + //Mappen der zugehörigkeit einzelner Textstrings zu verschiedenen Modi: + // wenn string hier nicht vorhanden dann kein Sonderhandling + // Mode "Slider" -> Bei Linksklick wird Param erhöht um einen Betrag; Bei Rechtsklick vermindert + // Mode "LocationMapper" -> Bei Linksklick wird Herkunftsort gewechselt (Paramwechsler) + public Dictionary ModeMapping = new Dictionary(); + + //AuswahlText Variablen + #region AuswahlVars + + public List AuswahlTextListe = new List(); + public List AuswahlParamter = new List(); + //Position der Darstellung der Liste auf dem Bildschirm + public int AuswahlXPos; + public int AuswahlYPos; + // Indikator, ob AuswahlText-Darstellung erneut gebaut werden muss + public bool auswahlAnzeigeFertig = true; + // Inhalt der 3 darzustellenden Texte + private Text aktuellerAuswahlTextOben; + private Text aktuellerAuswahlTextMitte; + private Text aktuellerAuswahlTextUnten; + // Indikator, ob einer der darzustellenden Texte farbgewechselt ist + private bool farbeObenGewechselt = false; + private bool farbeMitteGewechselt = false; + private bool farbeUntenGewechselt = false; + // Gibt an welches Element, der Liste an möglichen Auswahlen gewählt wurde + public int clickedAuswahl = 0; + // Gibt an welcher Button für die Auswahl betätigt wurde (Linke Maus oder Rechte Maus) + public string clickedButton = ""; + // aktuelle Ebene im TextBaum dieser Szene + public string aktuelleEbene; + // Indikator des ersten darzustellenden Elementes aus der Liste möglicher Auswahlen + private int aktuellerTextIndex = 0; + // Indikator, ob darzustellnde Liste variabler Länge ist -> Wird bei der Anzeige aus der mitgegebenen Paramterliste zusammengebaut und mit einem abbruch text abgeschlossen + private bool VariableListe; + // PfeileIcons um darzustellenden Index zu verändern + public Image PfeilRunter = new Image(Assets.PFEILRUNTER); + public Image PfeilHoch = new Image(Assets.PFEILHOCH); + public Image PfeilRunterRot = new Image(Assets.PFEILRUNTERMARKIERT); + public Image PfeilHochRot = new Image(Assets.PFEILHOCHMARKIERT); + public bool PfeileAktiv = false; + public bool farbePfeilObenGewechselt = false; + public bool farbePfeilUntenGewechselt = false; + #endregion + + //TafelText variablen + #region TafelVars + // Position der Tafel + public int TafelXPos; + public int TafelYPos; + // Indikator, ob Tafel neu zu zeichnen + public bool tafelAnzeigeFertig = true; + #endregion + + //AnzeigeText Vars + #region AnzeigeTextVars + public bool textAnzeigeFertig = true; + #endregion + //SprachText Variablen + #region SprachVars + private Text aktuellerSprachText; + private bool ersterSprachFade = true; + public Queue SprachText = new Queue(); + public Queue SprachParameter = new Queue(); + public bool sprachTextZwangsEnde = false; + public bool endeEingeleitet = false; + // Indikator, ob eine Sequenz läuft + private bool sequenzEingeleitet = false; + // Geben an wie viele weitere Sprachtexte noch erzeugt werden + private int aktuellerSequenzCounter = 0; + private int anstehenderSequenzCounter = 0; + private int aktuellerParamSequenzCounter = 0; + private int anstehenderParamSequenzCounter = 0; + #endregion + + + private bool paramLeer = false; + + public Image FadeInBlackScreen = new Image(Assets.BLACKSCREEN); + public Image FadeOutBlackScreen = new Image(Assets.BLACKSCREEN); + + // Nur beim ersten FadeIn sollen die Texte gefadet werden + private bool ersterFade = true; + private bool ersterTafelFade = true; + private bool ersterAnzeigeFade = true; + + + public TextBuilder(string Preset) + { + + this.preset = Preset; + + //Setzen der Texte für jedes Preset -> Hier wird die gesamte Baumstruktur des Presets geladen + SetzeTexte(); + + // Pfeil Images vorab hinzufügen + PfeilHoch.Alpha = 0f; + PfeilRunter.Alpha = 0f; + PfeilHochRot.Alpha = 0f; + PfeilRunterRot.Alpha = 0f; + AddGraphic(PfeilHoch); + AddGraphic(PfeilRunter); + AddGraphic(PfeilHochRot); + AddGraphic(PfeilRunterRot); + + //Vorbereiten des Blackscreens -> Entitäten brauchen auch Blackscreen Tween sonst bleibeb diese Sichtbar + FadeInBlackScreen.Alpha = 1f; + FadeInBlackScreen.X = 0; + FadeInBlackScreen.Y = 0; + + FadeOutBlackScreen.Alpha = 0f; + FadeOutBlackScreen.X = 0; + FadeOutBlackScreen.Y = 0; + + Tween(FadeInBlackScreen, new { Alpha = 0f }, 64f, 0f).Ease(Ease.BackInOut); + AddGraphics(FadeInBlackScreen); + } + + public override void Update() + { + base.Update(); + + //Sprachtext Handling + #region SprachTextLogik + + if (textSprachAktiv) + { + //Sprachtext Handling + // Überprüfen, ob aktuell ein Text aktiv ist, wenn nein wird auch ein getriggertes zwangsende gelöscht + if (textAktiv) + { + textTimer++; + } + else + { + //Wenn kein Sprachtext mehr aktiv und trotzdem auswahl getätigt wurde muss Zwangsende gelöscht werden -> Sonst Buffer gefahr + if (sprachTextZwangsEnde) + sprachTextZwangsEnde = false; + } + + // Überprüfen, ob die Liste an gebufferten Sprachtexten noch gefüllt ist und aktuell kein Text aktiv-> Wenn wahr: neuer Text aus den gebufferten Texten wird geladen + // Wenn zwangsende verlangt werden keine weiteren texte geladen und die Liste wird vorgespult + if (SprachText.IsNotEmpty() && !textAktiv && !sprachTextZwangsEnde) + { + //Neuer Text wird geladen -> Timer neu starten und überprüfen ob zu ladender Text Parameter beherbergt und diese ersetzen durch nächsten Parameter + //(Achtung Paramter müssen immer in der richtigen Reihenfolge und vollständig sein!!!) + Text tempText = SprachText.Dequeue(); + + // Wenn vorher noch keine Sequenz aktiv war ist jetzt eine neue aktiv + if (!sequenzEingeleitet) + { + sequenzEingeleitet = true; + aktuellerSequenzCounter = anstehenderSequenzCounter; + aktuellerParamSequenzCounter = anstehenderParamSequenzCounter; + anstehenderSequenzCounter = 0; + anstehenderParamSequenzCounter = 0; + + } + + aktuellerSequenzCounter--; + + //Resetten des gelieferten Textes + aktuellerSprachText = new Text("", Assets.FONT_AMIGA4EVER2, 12); + + //Übernahme des anzeigeTextes Zeichen für Zeichen -> Paramterzeichen werden ersetzt durch die Texte in der Paramterqueue + for (int index = 0; index < tempText.String.Length; index++) + { + char zeichen = tempText.String[index]; + + if (zeichen == '#') + { + aktuellerSprachText.String += SprachParameter.Dequeue(); + aktuellerParamSequenzCounter--; + } + else + { + aktuellerSprachText.String += zeichen; + } + } + + //Eigenschaften des Textes übernehmen + aktuellerSprachText.Color = tempText.Color; + aktuellerSprachText.CenterTextOriginX(); + + aktuellerSprachText.X = tempText.X; + aktuellerSprachText.Y = tempText.Y; + aktuellerSprachText.OutlineColor = tempText.OutlineColor; + aktuellerSprachText.OutlineThickness = tempText.OutlineThickness; + + if (ersterSprachFade) + { + ersterSprachFade = false; + //Erster Fade etwas länger da sonst früher da als der Scenen Fader -> sieht blöd aus + Tween(aktuellerSprachText, new { Alpha = 1f }, 160f, 0f).Ease(Ease.BackInOut); + + } + else + { + + Tween(aktuellerSprachText, new { Alpha = 1f }, 64f, 0f).Ease(Ease.BackInOut); + + } + + AddGraphic(aktuellerSprachText); + + textAktiv = true; + + //Timer nur resettet wenn neuer text vorhanden ist + textTimer = 0; + + } + else + { + + //Überprüfen, ob Ende des Sprachtextes erzwungen wurde, Wenn erzwungen wurde wird Timer nicht mehr gewertet + if (sprachTextZwangsEnde) + { + if (!endeEingeleitet) + { + if (aktuellerSprachText != null) + Tween(aktuellerSprachText, new { Alpha = 0f }, 16, 0).Ease(Ease.BackInOut); + endeEingeleitet = true; + + + } + + if (aktuellerSprachText.Alpha <= 0.001f) + { + sequenzEingeleitet = false; + sprachTextZwangsEnde = false; + endeEingeleitet = false; + Graphics.Remove(aktuellerSprachText); + aktuellerSprachText = null; + textAktiv = false; + resetTextTimer = true; + } + + // Wenn ende eingeleitet ist muss die aktuell begonnene Sequenz durchgespult werden ( Alle einträge dieser Sequenz werden aus der Liste geworfen) + while (aktuellerSequenzCounter > 0) + { + SprachText.Dequeue(); + aktuellerSequenzCounter--; + + } + while (aktuellerParamSequenzCounter > 0) + { + SprachParameter.Dequeue(); + aktuellerParamSequenzCounter--; + } + } + else + { + if (textTimer >= TIMER_GRENZE) + {// Text wird hier wenn die Zeitabgelaufen ist aus der Liste genommen und der nächste Text wird geladen + + if (!endeEingeleitet) + { + if (aktuellerSprachText != null) + Tween(aktuellerSprachText, new { Alpha = 0f }, 32, 0).Ease(Ease.BackInOut); + endeEingeleitet = true; + //Absicherung für zu schnell durch geklickte Sprachtexte + if (aktuellerSprachText == null) + { + endeEingeleitet = false; + textAktiv = false; + textTimer = 0; + + } + } + + + if (aktuellerSprachText != null && aktuellerSprachText.Alpha <= 0.001f) + { + endeEingeleitet = false; + Graphics.Remove(aktuellerSprachText); + aktuellerSprachText = null; + textAktiv = false; + //Timer resettet + textTimer = 0; + + // Wenn das der letzte text der sequenzwar dann auch sequenz deaktiv schalten + if (aktuellerSequenzCounter == 0) + { + sequenzEingeleitet = false; + } + } + } + } + + + + + } + } + #endregion + + //Auswahltext Handling + #region AuswahlTextLogik + //Nur Auswahltextlogik verwenden wenn Auswahltext aktiv ist + if (textBaumAktiv) + { + //Hier wird der aktuelle Baumzweig gelesen ab dem aktuellen index (scrollbarkeit)-> wenn mehr als 3 Einträge in der Liste sind werden Scrollpfeile eingeblendet mit denen der index verändert wird + // Bei jeder veränderung im Baum wird die aktuelle liste an angezeigten Auswahltexten entfernt und durch eine neue Anzeige ab dem richtigen Baumzweig im richtigen index gezeigt + if (!auswahlAnzeigeFertig) + { + //Egal welche art von AuswahlText bei neu zeichnen wird aktueller Inhalt gelöscht + Graphics.Remove(aktuellerAuswahlTextOben); + aktuellerAuswahlTextOben = null; + Graphics.Remove(aktuellerAuswahlTextMitte); + aktuellerAuswahlTextMitte = null; + Graphics.Remove(aktuellerAuswahlTextUnten); + aktuellerAuswahlTextUnten = null; + + PfeileAktiv = false; + + AuswahlTextListe.Clear(); + // Indikator, ob es weniger als 3 Texte oder mehr als 3 gibt (Beides hat andere effekte auf die Anzeige und Komposition der Texte) + int TextZähler = 0; + List tempAuswahlListe = new List(TextBaum[aktuelleEbene]); + + //Unterscheidung von regulärem Auswahlzweig oder variabler Auswahlliste + if (VariableListe) + { + //Füllen einer temporären Liste zum Bauen der finalen Auswahlliste + + //Zusammenbauen der AuswahlListe + //Bei variabler Liste immer zuerst die Paramter + foreach (string item in AuswahlParamter) + { + Text TempText = new Text(item, Assets.FONT_AMIGA4EVER2, 12); + AuswahlTextListe.Add(TempText); + TextZähler++; + } + //gefolgt von Abbruchtext bauen (bei diesem Typ gibt es immer nur noch den Abbruchtext in der regulären Baumstruktur) + AuswahlTextListe.Add(new Text(tempAuswahlListe.Last().String, Assets.FONT_AMIGA4EVER2, 12)); + TextZähler++; + + //Wenn Paramleer gesetzt wird muss ein Abschlusstext erfolgen (Ende der Liste wurde vor unterer Position erreicht) + paramLeer = false; + + //Indexer welcher Text als letztes gefüllt wurde + // 1 = Oben + // 2 = Mitte + // 3 = unten + int TexteEingebaut; + + //Füllen der darzustellenden 3 Elemente mit den Texten aus der AuswahlListe + for (TexteEingebaut = 1; TexteEingebaut < 4 && TexteEingebaut + aktuellerTextIndex < TextZähler; TexteEingebaut++) + { + switch (TexteEingebaut) + { + case 1: + aktuellerAuswahlTextOben = new Text(AuswahlTextListe[aktuellerTextIndex].String, Assets.FONT_AMIGA4EVER2, 12); + aktuellerAuswahlTextOben.X = AuswahlXPos + 35; + aktuellerAuswahlTextOben.Y = AuswahlYPos + 0; + aktuellerAuswahlTextOben.Color = Globals.StdGrün; + break; + case 2: + aktuellerAuswahlTextMitte = new Text(AuswahlTextListe[aktuellerTextIndex + 1].String, Assets.FONT_AMIGA4EVER2, 12); + aktuellerAuswahlTextMitte.X = AuswahlXPos + 35; + aktuellerAuswahlTextMitte.Y = AuswahlYPos + 24; + aktuellerAuswahlTextMitte.Color = Globals.StdGrün; + break; + case 3: + aktuellerAuswahlTextUnten = new Text(AuswahlTextListe[aktuellerTextIndex + 2].String, Assets.FONT_AMIGA4EVER2, 12); + aktuellerAuswahlTextUnten.X = AuswahlXPos + 35; + aktuellerAuswahlTextUnten.Y = AuswahlYPos + 48; + aktuellerAuswahlTextUnten.Color = Globals.StdGrün; + break; + } + + // Überprüfen ob Ende der Paramterliste erreicht ist, Wenn ja dann muss an die aktuelle TextEingebaut position der Schlusstext angehängt werden + if (TexteEingebaut + aktuellerTextIndex == TextZähler - 1) + { + paramLeer = true; + } + } + + //Wenn frühzeitiges ListenEnde -> TextEingebaut sagt uns welcher Text den Abschlusstext erhält + if (paramLeer) + { + switch (TexteEingebaut) + { + case 2: + aktuellerAuswahlTextMitte = new Text(AuswahlTextListe[AuswahlTextListe.Count() - 1].String, Assets.FONT_AMIGA4EVER2, 12); + aktuellerAuswahlTextMitte.X = AuswahlXPos + 35; + aktuellerAuswahlTextMitte.Y = AuswahlYPos + 24; + aktuellerAuswahlTextMitte.Color = Globals.StdGrün; + break; + case 3: + aktuellerAuswahlTextUnten = new Text(AuswahlTextListe[AuswahlTextListe.Count() - 1].String, Assets.FONT_AMIGA4EVER2, 12); + aktuellerAuswahlTextUnten.X = AuswahlXPos + 35; + aktuellerAuswahlTextUnten.Y = AuswahlYPos + 48; + aktuellerAuswahlTextUnten.Color = Globals.StdGrün; + break; + } + paramLeer = false; + } + + //Überprüfen: Wenn mehr als 3 Auswahlmöglichkeiten vorhanden ist müssen Pfeile angezeigt werden + if (AuswahlTextListe.Count() > 3) + { + PfeileAktiv = true; + if (aktuellerTextIndex == 0) + { + PfeilHoch.Alpha = 0f; + } + else + { + PfeilHoch.Alpha = 1f; + } + PfeilHoch.X = AuswahlXPos - 20; + PfeilHoch.Y = AuswahlYPos; + + if (aktuellerTextIndex + 3 == AuswahlTextListe.Count()) + { + PfeilRunter.Alpha = 0f; + } + else + { + PfeilRunter.Alpha = 1f; + } + PfeilRunter.X = AuswahlXPos - 20; + PfeilRunter.Y = AuswahlYPos + 35; + + PfeilHochRot.Alpha = 0f; + PfeilHochRot.X = AuswahlXPos - 20; + PfeilHochRot.Y = AuswahlYPos; + + PfeilRunterRot.Alpha = 0f; + PfeilRunterRot.X = AuswahlXPos - 20; + PfeilRunterRot.Y = AuswahlYPos + 35; + + } + else + { + PfeilHoch.Alpha = 0f; + PfeilRunter.Alpha = 0f; + PfeilHochRot.Alpha = 0f; + PfeilRunterRot.Alpha = 0f; + } + + if (ersterFade) + { + aktuellerAuswahlTextOben.Alpha = 0f; + Tween(aktuellerAuswahlTextOben, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + aktuellerAuswahlTextMitte.Alpha = 0f; + Tween(aktuellerAuswahlTextMitte, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + if (aktuellerAuswahlTextUnten != null) + { + aktuellerAuswahlTextUnten.Alpha = 0f; + Tween(aktuellerAuswahlTextUnten, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + } + + if (PfeileAktiv) + { + if (aktuellerTextIndex != 0) + { + PfeilHoch.Alpha = 0f; + Tween(PfeilHoch, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + } + + if (aktuellerTextIndex + 3 != AuswahlTextListe.Count()) + { + PfeilRunter.Alpha = 0f; + Tween(PfeilRunter, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + } + + + } + + ersterFade = false; + } + + AddGraphic(aktuellerAuswahlTextOben); + AddGraphic(aktuellerAuswahlTextMitte); + if (aktuellerAuswahlTextUnten != null) + { + AddGraphic(aktuellerAuswahlTextUnten); + } + + auswahlAnzeigeFertig = true; + + + } + else + { + + int ParamCounter = 0; + + Text tempText; + + //Zusammenbauen der AuswahlListe + //Hier wird jeder Text bereits so eingetragen, dass die Textersetzung durch Parameter abgeschlossen wurde + //Durchlauf aller Texte für diesen Baumstrang + foreach (Text ListenText in tempAuswahlListe) + { + + string tempString = ""; + + //Ersetzen der paramter "#" des aktuellen Text + tempText = new Text(ListenText.String, Assets.FONT_AMIGA4EVER2, 12); + for (int index = 0; index < tempText.String.Length; index++) + { + char zeichen = tempText.String[index]; + + if (zeichen == '#') + { + try + { + tempString += AuswahlParamter[ParamCounter++]; + } + catch + { + //Wenn ersetzen fehlschlägt weil zu wenige Paramter übergeben wurden -> Ersetzen es Paramter mit einem "?" + tempString += "?"; + } + + } + else + { + tempString += zeichen; + } + } + + AuswahlTextListe.Add(new Text(tempString, Assets.FONT_AMIGA4EVER2, 12)); + TextZähler++; + } + + //Indexer welcher Text als letztes gefüllt wurde + // 1 = Oben + // 2 = Mitte + // 3 = unten + int TexteEingebaut; + + //Füllen der darzustellenden 3 Elemente mit den Texten aus der AuswahlListe + for (TexteEingebaut = 1; TexteEingebaut < 4 && TexteEingebaut + aktuellerTextIndex <= TextZähler; TexteEingebaut++) + { + switch (TexteEingebaut) + { + case 1: + aktuellerAuswahlTextOben = new Text(AuswahlTextListe[aktuellerTextIndex].String, Assets.FONT_AMIGA4EVER2, 12); + aktuellerAuswahlTextOben.X = AuswahlXPos + 35; + aktuellerAuswahlTextOben.Y = AuswahlYPos + 0; + aktuellerAuswahlTextOben.Color = Globals.StdGrün; + break; + case 2: + aktuellerAuswahlTextMitte = new Text(AuswahlTextListe[aktuellerTextIndex + 1].String, Assets.FONT_AMIGA4EVER2, 12); + aktuellerAuswahlTextMitte.X = AuswahlXPos + 35; + aktuellerAuswahlTextMitte.Y = AuswahlYPos + 24; + aktuellerAuswahlTextMitte.Color = Globals.StdGrün; + break; + case 3: + aktuellerAuswahlTextUnten = new Text(AuswahlTextListe[aktuellerTextIndex + 2].String, Assets.FONT_AMIGA4EVER2, 12); + aktuellerAuswahlTextUnten.X = AuswahlXPos + 35; + aktuellerAuswahlTextUnten.Y = AuswahlYPos + 48; + aktuellerAuswahlTextUnten.Color = Globals.StdGrün; + break; + } + + } + if (AuswahlTextListe.Count() > 3) + { + PfeileAktiv = true; + if (aktuellerTextIndex == 0) + { + PfeilHoch.Alpha = 0f; + } + else + { + PfeilHoch.Alpha = 1f; + } + PfeilHoch.X = AuswahlXPos - 20; + PfeilHoch.Y = AuswahlYPos; + + if (aktuellerTextIndex + 3 == AuswahlTextListe.Count()) + { + PfeilRunter.Alpha = 0f; + } + else + { + PfeilRunter.Alpha = 1f; + } + PfeilRunter.X = AuswahlXPos - 20; + PfeilRunter.Y = AuswahlYPos + 35; + + PfeilHochRot.Alpha = 0f; + PfeilHochRot.X = AuswahlXPos - 20; + PfeilHochRot.Y = AuswahlYPos; + + PfeilRunterRot.Alpha = 0f; + PfeilRunterRot.X = AuswahlXPos - 20; + PfeilRunterRot.Y = AuswahlYPos + 35; + + } + else + { + PfeilHoch.Alpha = 0f; + PfeilRunter.Alpha = 0f; + PfeilHochRot.Alpha = 0f; + PfeilRunterRot.Alpha = 0f; + + } + + if (ersterFade) + { + aktuellerAuswahlTextOben.Alpha = 0f; + Tween(aktuellerAuswahlTextOben, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + aktuellerAuswahlTextMitte.Alpha = 0f; + Tween(aktuellerAuswahlTextMitte, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + if (aktuellerAuswahlTextUnten != null) + { + aktuellerAuswahlTextUnten.Alpha = 0f; + Tween(aktuellerAuswahlTextUnten, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + } + + if (PfeileAktiv) + { + if (aktuellerTextIndex != 0) + { + PfeilHoch.Alpha = 0f; + Tween(PfeilHoch, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + } + + if (aktuellerTextIndex + 3 != AuswahlTextListe.Count()) + { + PfeilRunter.Alpha = 0f; + Tween(PfeilRunter, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + } + } + + ersterFade = false; + } + + AddGraphic(aktuellerAuswahlTextOben); + AddGraphic(aktuellerAuswahlTextMitte); + if (aktuellerAuswahlTextUnten != null) + { + AddGraphic(aktuellerAuswahlTextUnten); + } + + auswahlAnzeigeFertig = true; + + } + } + + //Auswahl Hover und ClickLogik + //Oberer Text + if (Util.InRect(this.Scene.MouseX, this.Scene.MouseY, 35, 410, 600, 14) && aktuellerAuswahlTextOben != null) + { + + + if (Globals.PlayerSession.Controller.Button("MausLinks").Down || Globals.PlayerSession.Controller.Button("MausRechts").Down) + { + if (!farbeObenGewechselt) + { + aktuellerAuswahlTextOben.Color = Globals.HighLightMagenta; + farbeObenGewechselt = true; + } + + } + + // Absicherung, falls user beide Mausbuttons gleichzeitig drückt -> Links hat priorität + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + int tempPos = 1 + aktuellerTextIndex; + Console.WriteLine("Auswahl " + tempPos + " ist gedrückt!"); + clickedAuswahl = 1 + aktuellerTextIndex; + clickedButton = "MausLinks"; + + sprachTextZwangsEnde = true; + + //zurückwechseln der Farbe zu Grün + if (farbeObenGewechselt) + { + aktuellerAuswahlTextOben.Color = Globals.StdGrün; + farbeObenGewechselt = false; + } + } + else + { + if (Globals.PlayerSession.Controller.Button("MausRechts").Released) + { + int tempPos = 1 + aktuellerTextIndex; + Console.WriteLine("Auswahl " + tempPos + " ist gedrückt!"); + clickedAuswahl = 1 + aktuellerTextIndex; + clickedButton = "MausRechts"; + + sprachTextZwangsEnde = true; + + //zurückwechseln der Farbe zu Grün + if (farbeObenGewechselt) + { + aktuellerAuswahlTextOben.Color = Globals.StdGrün; + farbeObenGewechselt = false; + } + } + } + + } + else + { + //zurückwechseln der Farbe zu Grün wenn Taste Released oder Textfeld verlassen + if (farbeObenGewechselt) + { + aktuellerAuswahlTextOben.Color = Globals.StdGrün; + farbeObenGewechselt = false; + } + + } + + //Mittlerer Text + if (Util.InRect(this.Scene.MouseX, this.Scene.MouseY, 35, 434, 600, 14) && aktuellerAuswahlTextMitte != null) + { + if (Globals.PlayerSession.Controller.Button("MausLinks").Down || Globals.PlayerSession.Controller.Button("MausRechts").Down) + { + if (!farbeMitteGewechselt) + { + aktuellerAuswahlTextMitte.Color = Globals.HighLightMagenta; + farbeMitteGewechselt = true; + } + + } + + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + int tempPos = 2 + aktuellerTextIndex; + Console.WriteLine("Auswahl " + tempPos + " ist gedrückt!"); + clickedAuswahl = 2 + aktuellerTextIndex; + clickedButton = "MausLinks"; + + sprachTextZwangsEnde = true; + + //zurückwechseln der Farbe zu Grün + if (farbeMitteGewechselt) + { + aktuellerAuswahlTextMitte.Color = Globals.StdGrün; + farbeMitteGewechselt = false; + } + } + else + { + if (Globals.PlayerSession.Controller.Button("MausRechts").Released) + { + int tempPos = 2 + aktuellerTextIndex; + Console.WriteLine("Auswahl " + tempPos + " ist gedrückt!"); + clickedAuswahl = 2 + aktuellerTextIndex; + clickedButton = "MausRechts"; + + sprachTextZwangsEnde = true; + + //zurückwechseln der Farbe zu Grün + if (farbeMitteGewechselt) + { + aktuellerAuswahlTextMitte.Color = Globals.StdGrün; + farbeMitteGewechselt = false; + } + } + } + + } + + else + { + //zurückwechseln der Farbe zu Grün wenn Taste Released oder Textfeld verlassen + if (farbeMitteGewechselt) + { + aktuellerAuswahlTextMitte.Color = Globals.StdGrün; + farbeMitteGewechselt = false; + } + + } + + //unterer Text + if (Util.InRect(this.Scene.MouseX, this.Scene.MouseY, 35, 458, 600, 14) && aktuellerAuswahlTextUnten != null) + { + if (Globals.PlayerSession.Controller.Button("MausLinks").Down || Globals.PlayerSession.Controller.Button("MausRechts").Down) + { + if (!farbeUntenGewechselt) + { + aktuellerAuswahlTextUnten.Color = Globals.HighLightMagenta; + farbeUntenGewechselt = true; + } + + } + + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + int tempPos = 3 + aktuellerTextIndex; + Console.WriteLine("Auswahl " + tempPos + " ist gedrückt!"); + clickedAuswahl = 3 + aktuellerTextIndex; + clickedButton = "MausLinks"; + + sprachTextZwangsEnde = true; + + //zurückwechseln der Farbe zu Grün + if (farbeUntenGewechselt) + { + aktuellerAuswahlTextUnten.Color = Globals.StdGrün; + farbeUntenGewechselt = false; + } + } + else + { + if (Globals.PlayerSession.Controller.Button("MausRechts").Released) + { + int tempPos = 3 + aktuellerTextIndex; + Console.WriteLine("Auswahl " + tempPos + " ist gedrückt!"); + clickedAuswahl = 3 + aktuellerTextIndex; + clickedButton = "MausRechts"; + + sprachTextZwangsEnde = true; + + //zurückwechseln der Farbe zu Grün + if (farbeUntenGewechselt) + { + aktuellerAuswahlTextUnten.Color = Globals.StdGrün; + farbeUntenGewechselt = false; + } + } + } + + } + + else + { + //zurückwechseln der Farbe zu Grün wenn Taste Released oder Textfeld verlassen + if (farbeUntenGewechselt) + { + aktuellerAuswahlTextUnten.Color = Globals.StdGrün; + farbeUntenGewechselt = false; + } + + } + } + + // Pfeil Oben + if (Util.InRect(this.Scene.MouseX, this.Scene.MouseY, 5, 410, 30, 30) && PfeileAktiv && aktuellerTextIndex != 0) + { + if (Globals.PlayerSession.Controller.Button("MausLinks").Down) + { + if (!farbePfeilObenGewechselt) + { + //Pfeil gewechselt Icon (Rot) + PfeilHoch.Alpha = 0f; + PfeilHochRot.Alpha = 1f; + farbePfeilObenGewechselt = true; + } + } + + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + // wenn Index bereits am Anfang der Liste kein Pfeil nach oben möglich + if (aktuellerTextIndex != 0) + { + aktuellerTextIndex--; + auswahlAnzeigeFertig = false; + } + + Console.WriteLine("Pfeil Oben ist gedrückt!"); + //zurückwechseln der Farbe zu Grün + if (farbePfeilObenGewechselt) + { + PfeilHoch.Alpha = 1f; + PfeilHochRot.Alpha = 0f; + farbePfeilObenGewechselt = false; + } + + + } + + + } + + else + { + //zurückwechseln der Farbe zu Grün wenn Taste Released oder Textfeld verlassen + if (farbePfeilObenGewechselt) + { + PfeilHoch.Alpha = 1f; + PfeilHochRot.Alpha = 0f; + farbePfeilObenGewechselt = false; + } + + + } + + // Pfeil Unten + if (Util.InRect(this.Scene.MouseX, this.Scene.MouseY, 5, 445, 30, 30) && PfeileAktiv && aktuellerTextIndex + 3 != AuswahlTextListe.Count()) + { + if (Globals.PlayerSession.Controller.Button("MausLinks").Down) + { + if (!farbePfeilUntenGewechselt) + { + //Pfeil gewechselt Icon (Rot) + PfeilRunter.Alpha = 0f; + PfeilRunterRot.Alpha = 1f; + farbePfeilUntenGewechselt = true; + + } + } + + if (Globals.PlayerSession.Controller.Button("MausLinks").Released) + { + // wenn Index bereits am Anfang der Liste kein Pfeil nach oben möglich + if (aktuellerTextIndex + 2 < AuswahlTextListe.Count() - 1) + { + aktuellerTextIndex++; + auswahlAnzeigeFertig = false; + } + + + Console.WriteLine("Pfeil Unten ist gedrückt!"); + //zurückwechseln der Farbe zu Grün + if (farbePfeilUntenGewechselt) + { + PfeilRunter.Alpha = 1f; + PfeilRunterRot.Alpha = 0f; + farbePfeilUntenGewechselt = false; + } + } + + + + } + + else + { + //zurückwechseln der Farbe zu Grün wenn Taste Released oder Textfeld verlassen + if (farbePfeilUntenGewechselt) + { + PfeilRunter.Alpha = 1f; + PfeilRunterRot.Alpha = 0f; + farbePfeilUntenGewechselt = false; + } + + + } + #endregion + + //Tafeltext Handling + #region TafelTextLogik + if (tafelTextAktiv) + { + + //Wenn tafelAnzeige false ist muss die Tafel neu gezeichnet werden + if (!tafelAnzeigeFertig) + { + foreach (Text ListenText in TafelTextListe) + { + if (ersterTafelFade) + { + ListenText.Alpha = 0f; + Tween(ListenText, new { Alpha = 1f }, 180f, 0f).Ease(Ease.BackInOut); + + } + else + { + ListenText.Alpha = 1f; + } + + AddGraphics(ListenText); + } + + ersterTafelFade = false; + tafelAnzeigeFertig = true; + } + + } + #endregion + + #region AnzeigeText Logik + // Wenn AnzeigeTexte aktiv ist müssen alle Zeilen mit ihren eigenen Positionen neu gezeichnet werden + if (anzeigeTextAktiv) + { + if (!textAnzeigeFertig) + { + foreach (Text ListenText in AnzeigeTextListe) + { + + ListenText.Alpha = 1f; + + + AddGraphics(ListenText); + + } + textAnzeigeFertig = true; + } + } + #endregion + } + + + private void SetzeTexte() + { + //Je nach Preset werden andere Texte geladen + Text TempText; + + // Hinzufügen der Texte zum Pool sowie einer Liste bei Auswahltexten oder Sequenziellen Texten + List TempListe = new List(); + + switch (preset) + { + //Hier werden alle Texte geladen und vorbereitet + //Notiz # im Text ist ein Hinweis dass hier ein Paramter hingehört + //ToDo Baumäste komplettieren + + case "Handel": + //Alle Texte eines TextTyps sammeln + #region Handel-Sprachtexte + //Sprachtexte + TempText = new Text(Globals.HANDEL_BEGRÜßUNG_LIVERPOOL.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_BEGRÜßUNG_LIVERPOOL.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Begrüßung LIVERPOOL", TempText); + + TempText = new Text(Globals.HANDEL_BEGRÜßUNG_LONDON.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_BEGRÜßUNG_LONDON.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Begrüßung LONDON", TempText); + + TempText = new Text(Globals.HANDEL_WÄHLEN.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_WÄHLEN.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Wählen_EINKAUF", TempText); + + TempText = new Text(Globals.HANDEL_WÄHLEN_ZIEL.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_WÄHLEN_ZIEL.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Wählen_ZIEL", TempText); + + TempText = new Text(Globals.HANDEL_HELFEN.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_HELFEN.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Helfen", TempText); + + TempText = new Text(Globals.HANDEL_AUSVERKAUFT.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_AUSVERKAUFT.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Ausverkauft", TempText); + + TempText = new Text(Globals.HANDEL_WARENLOS.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_WARENLOS.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Warenlos", TempText); + + TempText = new Text(Globals.HANDEL_GELDLOS.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_GELDLOS.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Geldlos", TempText); + + TempText = new Text(Globals.HANDEL_GELDLOS2.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_GELDLOS2.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Geldlos2", TempText); + + TempText = new Text(Globals.HANDEL_GELDLOS3.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_GELDLOS3.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Geldlos3", TempText); + + TempText = new Text(Globals.HANDEL_VERKAUFSQUELLE.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_VERKAUFSQUELLE.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("HANDEL_VERKAUFSQUELLE", TempText); + + TempText = new Text(Globals.BUDGETREICHTNICHT.String, Assets.FONT_AMIGA4EVER2, Globals.BUDGETREICHTNICHT.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("BudgetReichtNicht", TempText); + + TempText = new Text(Globals.KOSTEN.String, Assets.FONT_AMIGA4EVER2, Globals.KOSTEN.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Kosten", TempText); + + TempText = new Text(Globals.HANDEL_ERLÄUTERUNG1.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_ERLÄUTERUNG1.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Erläuterung1", TempText); + + TempText = new Text(Globals.HANDEL_ERLÄUTERUNG2.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_ERLÄUTERUNG2.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Erläuterung2", TempText); + + TempText = new Text(Globals.KEINEKOSTEN.String, Assets.FONT_AMIGA4EVER2, Globals.KEINEKOSTEN.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("KeineKosten", TempText); + + TempText = new Text(Globals.HANDEL_RESTPOSTEN.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_RESTPOSTEN.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Restposten1", TempText); + + TempText = new Text(Globals.HANDEL_RESTPOSTEN2.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_RESTPOSTEN2.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Restposten2", TempText); + + TempText = new Text(Globals.HANDEL_WARENWAHL.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_WARENWAHL.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Warenwahl_QuellLager", TempText); + + //Nach Sammeln als Überbegriff speichern sodass wir nach z.B. Begrüßungstext 1 in Sprachtexten suchen und ausgeben können + TextPool.Add("SprachTexte", new Dictionary(MöglicheTexte)); + MöglicheTexte.Clear(); + + #endregion + + #region Handel-Tafeltexte + //TafelTexte + TempText = new Text(Globals.HANDEL_ANGEBOT.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_ANGEBOT.FontSize); + TempText.Color = Globals.TafelGrau; + MöglicheTexte.Add("AngebotTafel", TempText); + + TempText = new Text(Globals.HANDEL_NACHFRAGE.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_NACHFRAGE.FontSize); + TempText.Color = Globals.TafelGrau; + MöglicheTexte.Add("NachfrageTafel", TempText); + + TextPool.Add("TafelTexte", new Dictionary(MöglicheTexte)); + MöglicheTexte.Clear(); + #endregion + + #region Handel-Auswahltexte + + //Auswahltexte + //Seite 1 + TempText = new Text(Globals.HANDEL_KAUFEN.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_KAUFEN.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Kaufen", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.HANDEL_VERKAUFEN.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_VERKAUFEN.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Verkaufen", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.TEXT_ABSCHIED.String, Assets.FONT_AMIGA4EVER2, Globals.TEXT_ABSCHIED.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Abschied", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1", new List(TempListe)); + TempListe.Clear(); + + + //Seite 1.1A (Vorauswahl Bäume -> A = Auswahl Exportware) + TempText = new Text(Globals.TEXT_ABBRUCH.String, Assets.FONT_AMIGA4EVER2, Globals.TEXT_ABBRUCH.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Abbruch_Ware", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.1A", new List(TempListe)); + TempListe.Clear(); + + + //Seite 1.1B (Vorauswahl Bäume -> B = Auswahl ZielLagerort) + TempText = new Text(Globals.TEXT_ABBRUCH.String, Assets.FONT_AMIGA4EVER2, Globals.TEXT_ABBRUCH.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Abbruch_Ziel", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.1B", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.1.1 (Auswahl von Menge & Bezahlung -> B = Auswahl ZielLagerort) + TempText = new Text(Globals.HANDEL_PREIS_PRO_MENGE_EINKAUF.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_PREIS_PRO_MENGE_EINKAUF.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("PreisProMenge_EINKAUF", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.HANDEL_ABSCHLUSS_EINKAUF.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_ABSCHLUSS_EINKAUF.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Abschluss_EINKAUF", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BUDGETTEXT.String, Assets.FONT_AMIGA4EVER2, Globals.BUDGETTEXT.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Budget_EINKAUF", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.TEXT_ABBRUCH.String, Assets.FONT_AMIGA4EVER2, Globals.TEXT_ABBRUCH.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Abbruch_Handel_EINKAUF", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.1.1", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.2A (Auswahl von Quellagerort Bezahlung -> A = Auswahl QuellLagerort) + TempText = new Text(Globals.TEXT_ABBRUCH.String, Assets.FONT_AMIGA4EVER2, Globals.TEXT_ABBRUCH.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Abbruch_QuellLager", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.2A", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.2B (Vorauswahl Bäume -> B = Auswahl Ware aus dem QuellLagerort) + TempText = new Text(Globals.HANDEL_WARENQUELLE_WECHSEL.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_WARENQUELLE_WECHSEL.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Wechsel WarenQuelle", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.2B", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.2.1 (Auswahl von Menge & Bezahlung) + TempText = new Text(Globals.HANDEL_PREIS_PRO_MENGE_VERKAUF.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_PREIS_PRO_MENGE_VERKAUF.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("PreisProMenge_VERKAUF", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.HANDEL_ABSCHLUSS_VERKAUF.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_ABSCHLUSS_VERKAUF.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Abschluss_VERKAUF", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BUDGETTEXT.String, Assets.FONT_AMIGA4EVER2, Globals.BUDGETTEXT.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Budget_VERKAUF", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.TEXT_ABBRUCH.String, Assets.FONT_AMIGA4EVER2, Globals.TEXT_ABBRUCH.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Abbruch_Handel_VERKAUF", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.2.1", new List(TempListe)); + TempListe.Clear(); + + TextPool.Add("AuswahlTexte", new Dictionary(MöglicheTexte)); + + + MöglicheTexte.Clear(); + #endregion + break; + + + case "Bank": + #region Bank-Sprachtexte + //Sprachtexte + TempText = new Text(Globals.BEGRÜßUNG_DECOY.String, Assets.FONT_AMIGA4EVER2, Globals.BEGRÜßUNG_DECOY.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Begrüßung_Decoy", TempText); + + TempText = new Text(Globals.HANDEL_HELFEN.String, Assets.FONT_AMIGA4EVER2, Globals.HANDEL_HELFEN.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Helfen", TempText); + + TextPool.Add("SprachTexte", new Dictionary(MöglicheTexte)); + MöglicheTexte.Clear(); + #endregion + + #region Bank-Auswahltexte + //Auswahltexte + //Seite 1 + TempText = new Text(Globals.BANKTEXT1_A.String, Assets.FONT_AMIGA4EVER2, Globals.BANKTEXT1_A.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("KreditKaufen", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BANKTEXT1_B.String, Assets.FONT_AMIGA4EVER2, Globals.BANKTEXT1_B.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("KreditBezahlen", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.TEXT_ABSCHIED.String, Assets.FONT_AMIGA4EVER2, Globals.TEXT_ABSCHIED.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Abschied", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.1 -> Wenn Kaufen aktiviert wurde + TempText = new Text(Globals.BANKTEXT11_A.String, Assets.FONT_AMIGA4EVER2, Globals.BANKTEXT11_A.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("KreditBenötigt", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + ModeMapping.Add("KreditBenötigt", "Slider"); + + TempText = new Text(Globals.BANKTEXT11_B.String, Assets.FONT_AMIGA4EVER2, Globals.BANKTEXT11_B.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("KreditKaufenAnnehmen", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BUDGETTEXT.String, Assets.FONT_AMIGA4EVER2, Globals.BUDGETTEXT.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("KreditKaufenBudget", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + ModeMapping.Add("KreditKaufenBudget", "LocationMapper"); + + TempText = new Text(Globals.BANKTEXT11_D.String, Assets.FONT_AMIGA4EVER2, Globals.BANKTEXT11_D.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("KreditKaufenAbbruch", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.1", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.2 -> Wenn zurück Zahlen aktiviert wurde + TempText = new Text(Globals.BANKTEXT12_A.String, Assets.FONT_AMIGA4EVER2, Globals.BANKTEXT12_A.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("KreditRückzahlen", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + ModeMapping.Add("KreditRückzahlen", "Slider"); + + TempText = new Text(Globals.BANKTEXT12_B.String, Assets.FONT_AMIGA4EVER2, Globals.BANKTEXT12_B.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("KreditBezahlenAnnehmen", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BUDGETTEXT.String, Assets.FONT_AMIGA4EVER2, Globals.BUDGETTEXT.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("KreditBezahlenBudget", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + ModeMapping.Add("KreditBezahlenudget", "LocationMapper"); + + TempText = new Text(Globals.BANKTEXT12_D.String, Assets.FONT_AMIGA4EVER2, Globals.BANKTEXT12_D.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("KreditBezahlenAbbruch", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.2", new List(TempListe)); + TempListe.Clear(); + + TextPool.Add("AuswahlTexte", new Dictionary(MöglicheTexte)); + MöglicheTexte.Clear(); + #endregion + break; + + case "Werft": + #region Werft-Sprachtexte + //Sprachtexte + TempText = new Text(Globals.BEGRÜßUNG_DECOY.String, Assets.FONT_AMIGA4EVER2, Globals.BEGRÜßUNG_DECOY.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Begrüßung_Decoy", TempText); + + TempText = new Text(Globals.WERFT_HELFEN.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_HELFEN.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Helfen", TempText); + + TempText = new Text(Globals.DEMOTEXT_KEINEREPARATUR.String, Assets.FONT_AMIGA4EVER2, Globals.DEMOTEXT_KEINEREPARATUR.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Demo_KeineReparatur", TempText); + + TempText = new Text(Globals.WELCHESSCHIFF.String, Assets.FONT_AMIGA4EVER2, Globals.WELCHESSCHIFF.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bezahlen_Welches", TempText); + + TempText = new Text(Globals.WERFT_BAUEN_ABSCHLUSS1.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_ABSCHLUSS1.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bezahlen_Abschluss1", TempText); + + TempText = new Text(Globals.WERFT_BAUEN_ABSCHLUSS2.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_ABSCHLUSS2.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bezahlen_Abschluss2", TempText); + + TempText = new Text(Globals.WERFT_BAUEN_GELDMANGEL.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_GELDMANGEL.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bezahlen_KEINGELD", TempText); + + TempText = new Text(Globals.WERFT_BAUEN_ANZAHLUNG1.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_ANZAHLUNG1.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bezahlen_ANZAHLUNG1", TempText); + + TempText = new Text(Globals.WERFT_BAUEN_ANZAHLUNG2.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_ANZAHLUNG2.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bezahlen_ANZAHLUNG2", TempText); + + TempText = new Text(Globals.WERFT_BEZAHLEN_KEINESCHULDEN.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BEZAHLEN_KEINESCHULDEN.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bezahlen_KEINESCHULDEN", TempText); + + TempText = new Text(Globals.WERFT_GEBRAUCHT_KEINESCHIFFE.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_GEBRAUCHT_KEINESCHIFFE.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Gebraucht_KEINESCHIFFE", TempText); + + TempText = new Text(Globals.WERFT_BAU_KEINPLATZ1.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAU_KEINPLATZ1.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("BAU_KEINPLATZ1", TempText); + + TempText = new Text(Globals.WERFT_BAU_KEINPLATZ2.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAU_KEINPLATZ2.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("BAU_KEINPLATZ2", TempText); + + TempText = new Text(Globals.WERFT_VERKAUF_WELCHESSCHIFF.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_VERKAUF_WELCHESSCHIFF.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Verkauf_WelchesSchiff", TempText); + + TempText = new Text(Globals.WERFT_VERKAUF_KEINESCHIFF1.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_VERKAUF_KEINESCHIFF1.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Verkauf_KeinSchiff1", TempText); + + TempText = new Text(Globals.WERFT_VERKAUF_KEINESCHIFF2.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_VERKAUF_KEINESCHIFF2.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Verkauf_KeinSchiff2", TempText); + + TempText = new Text(Globals.WERFT_VERKAUF_ANGEBOT.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_VERKAUF_ANGEBOT.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Verkauf_Angebot", TempText); + + TempText = new Text(Globals.WERFT_VERKAUF_ABSCHLUSS.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_VERKAUF_ABSCHLUSS.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Verkauf_Abschluss", TempText); + + TempText = new Text(Globals.RESTBETRAG.String, Assets.FONT_AMIGA4EVER2, Globals.RESTBETRAG.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bezahlen_Restbetrag", TempText); + + TempText = new Text(Globals.KEINRESTBETRAG.String, Assets.FONT_AMIGA4EVER2, Globals.KEINRESTBETRAG.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bezahlen_KeinRestbetrag", TempText); + + TempText = new Text(Globals.KEINZAHLBETRAG.String, Assets.FONT_AMIGA4EVER2, Globals.KEINZAHLBETRAG.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bezahlen_KeinZahlbetrag", TempText); + + TempText = new Text(Globals.DANKEZUFRIEDEN.String, Assets.FONT_AMIGA4EVER2, Globals.DANKEZUFRIEDEN.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bezahlen_Zufrieden", TempText); + + TempText = new Text(Globals.BESTENDANK.String, Assets.FONT_AMIGA4EVER2, Globals.BESTENDANK.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bezahlen_BestenDank", TempText); + + TempText = new Text(Globals.WERFT_BEZAHLEN_ALLEBEZAHLT.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BEZAHLEN_ALLEBEZAHLT.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bezahlen_AlleBezahlt", TempText); + + TempText = new Text(Globals.WERFT_BEZAHLEN_XBEZAHLT.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BEZAHLEN_XBEZAHLT.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bezahlen_XBezahlt", TempText); + + TempText = new Text(Globals.WERFT_BEZAHLEN_KEINESCHIFFE.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BEZAHLEN_KEINESCHIFFE.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bezahlen_KeineSchiffe", TempText); + + TextPool.Add("SprachTexte", new Dictionary(MöglicheTexte)); + MöglicheTexte.Clear(); + #endregion + + #region Werft-Auswahltexte + //Auswahltexte + //Seite 1 - Root + TempText = new Text(Globals.WERFT_REPERATUR.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_REPERATUR.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("WerftReparatur", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_SCHIFFBAUEN.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_SCHIFFBAUEN.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("WerftBauen", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.TEXT_ABSCHIED.String, Assets.FONT_AMIGA4EVER2, Globals.TEXT_ABSCHIED.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Abschied", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_SCHIFFGEBRAUCHT.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_SCHIFFGEBRAUCHT.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("WerftGebraucht", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_SCHIFFVERKAUFEN.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_SCHIFFVERKAUFEN.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("WerftVerkaufen", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_SCHIFFBEZAHLEN.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_SCHIFFBEZAHLEN.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("WerftBezahlen", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.1 Reparaturauswahl (In der Demo inaktiv jedoch sind die Auswahl möglichkeiten schon sichtbar) + + TempText = new Text(Globals.WERFT_REPARATUR_MUSCHELN.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_REPARATUR_MUSCHELN.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Rep_Muscheln", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_REPARATUR_RUMPF.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_REPARATUR_RUMPF.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Rep_Rumpf", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_REPARATUR_ABSCHIED.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_REPARATUR_ABSCHIED.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Rep_Abschied", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_REPARATUR_ANTRIEB.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_REPARATUR_ANTRIEB.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Rep_Antrieb", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_REPARATUR_ALLES.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_REPARATUR_ALLES.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Rep_Alles", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.1", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.2 Schiff Bauen + + TempText = new Text(Globals.WERFT_BAUEN_NÄCHSTES_SCHIFF.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_NÄCHSTES_SCHIFF.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_NächstesSchiff", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_BAUEN_LETZTES_SCHIFF.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_LETZTES_SCHIFF.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_LetztesSchiff", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_BAUEN_BESTÄTIGEN.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_BESTÄTIGEN.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_SchiffBauen", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_BAUEN_ABBRUCH.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_ABBRUCH.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_BauenAbbruch", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.2", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.2.3A Schiffbau Namenseingabe + TempText = new Text(Globals.WERFT_BAUEN_NAME_HINWEIS1.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_NAME_HINWEIS1.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Name_Hinweis1", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_BAUEN_NAME_HINWEIS2.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_NAME_HINWEIS2.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Name_Hinweis2", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_BAUEN_NAME_HINWEIS3.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_NAME_HINWEIS3.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Name_Hinweis3", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.2.3A", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.2.3B Schiffbau bestätigen + TempText = new Text(Globals.WERFT_BAUEN_BESTÄTIGUNG_PREIS.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_BESTÄTIGUNG_PREIS.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Bestätigung_Preis", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_BAUEN_BESTÄTIGUNG_BESTELLUNG.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_BESTÄTIGUNG_BESTELLUNG.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_BauBestätigen", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_BAUEN_BESTÄTIGUNG_GELDQUELLE.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_BESTÄTIGUNG_GELDQUELLE.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Bau_Geldquelle", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_BAUEN_BESTÄTIGUNG_ABBRUCH.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_BESTÄTIGUNG_ABBRUCH.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Bestätigen_Abbruch", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.2.3B", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.4 Anzeige gebrauchter Schiffe + TempText = new Text(Globals.WERFT_GEBRAUCHT_NÄCHSTES_SCHIFF.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_GEBRAUCHT_NÄCHSTES_SCHIFF.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Gebraucht_NächstesSchiff", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_BAUEN_LETZTES_SCHIFF.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_LETZTES_SCHIFF.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Gebraucht_LetztesSchiff", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BUDGETTEXT.String, Assets.FONT_AMIGA4EVER2, Globals.BUDGETTEXT.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Gebraucht_Budget", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_GEBRAUCHT_BESTÄTIGEN.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_GEBRAUCHT_BESTÄTIGEN.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Gebraucht_Bestätigen", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_BAUEN_ABBRUCH.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_BAUEN_ABBRUCH.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Gebraucht_Abbruch", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.4", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.5A Verkauf eines Schiffs -Schiffswahl + TempText = new Text(Globals.TEXT_ABBRUCH.String, Assets.FONT_AMIGA4EVER2, Globals.TEXT_ABBRUCH.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Verkauf_Abbruch", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.5A", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.5B Verkauf eines Schiffs - Bestätigung + TempText = new Text(Globals.WERFT_VERKAUF_PREIS.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_VERKAUF_PREIS.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Verkauf_Preis", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.WERFT_VERKAUF_BESTÄTIGUNG.String, Assets.FONT_AMIGA4EVER2, Globals.WERFT_VERKAUF_BESTÄTIGUNG.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Verkauf_Bestätigung", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.TEXT_ABBRUCH.String, Assets.FONT_AMIGA4EVER2, Globals.TEXT_ABBRUCH.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Verkauf_Abbruch2", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.5B", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.6A Abbezahlen eines Schiffs -Schiffswahl + TempText = new Text(Globals.TEXT_ABBRUCH.String, Assets.FONT_AMIGA4EVER2, Globals.TEXT_ABBRUCH.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Schiffwahl_Abbruch", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.6A", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.6B Abbezahlen eines Schiffs - Bezahlvorgang + + TempText = new Text(Globals.BUDGETTEXT.String, Assets.FONT_AMIGA4EVER2, Globals.BUDGETTEXT.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Bezahlen_Geldquelle", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.ZAHLMENGE.String, Assets.FONT_AMIGA4EVER2, Globals.ZAHLMENGE.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Bezahlen_Geldbetrag", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.ZAHLENFÜR.String, Assets.FONT_AMIGA4EVER2, Globals.ZAHLENFÜR.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Bezahlen_Bestätigung", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.TEXT_ABBRUCH2.String, Assets.FONT_AMIGA4EVER2, Globals.TEXT_ABBRUCH2.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Werft_Bezahlen_Abbruch", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.6B", new List(TempListe)); + TempListe.Clear(); + + TextPool.Add("AuswahlTexte", new Dictionary(MöglicheTexte)); + MöglicheTexte.Clear(); + #endregion + break; + case "Bar": + #region Bar-Sprachtexte + //Sprachtexte + TempText = new Text(Globals.BAR_FILIALEVORHANDEN.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_FILIALEVORHANDEN.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bar_FilialeVorhanden", TempText); + + TempText = new Text(Globals.BAR_KEINE2SCHIFFE.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_KEINE2SCHIFFE.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bar_Keine2Schiffe", TempText); + + TempText = new Text(Globals.BAR_KEINESCHIFFE.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_KEINESCHIFFE.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bar_KeineSchiffe", TempText); + + TempText = new Text(Globals.BAR_WELCHESSCHIFF.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_WELCHESSCHIFF.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bar_WelchesSchiff", TempText); + + TempText = new Text(Globals.BAR_GUTESSCHIFF.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_GUTESSCHIFF.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bar_GutesSchiff", TempText); + + TempText = new Text(Globals.BAR_ABBRUCH.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_ABBRUCH.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bar_Abbruch", TempText); + + TempText = new Text(Globals.BAR_MANNSCHAFTSWAHL_PREIS.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_MANNSCHAFTSWAHL_PREIS.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bar_Mannschaftswahl_Preis", TempText); + + TempText = new Text(Globals.BAR_MANNSCHAFTSWAHL_WELCHELEUTE.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_MANNSCHAFTSWAHL_WELCHELEUTE.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bar_Mannschaftswahl_WelcheLeute", TempText); + + TempText = new Text(Globals.BAR_MANNSCHAFTWAHL_ANHEUERN.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_MANNSCHAFTWAHL_ANHEUERN.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bar_Mannschaftswahl_Anheuern", TempText); + + TempText = new Text(Globals.BAR_MANNSCHAFTWAHL_GENUGLEUTE.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_MANNSCHAFTWAHL_GENUGLEUTE.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bar_Mannschaftswahl_GenugLeute", TempText); + + TempText = new Text(Globals.BAR_HINWEIS_KEIN1.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_HINWEIS_KEIN1.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bar_Hinweis_KeineHinweise1", TempText); + + TempText = new Text(Globals.BAR_HINWEIS_KEIN2.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_HINWEIS_KEIN2.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bar_Hinweis_KeineHinweise2", TempText); + + TempText = new Text(Globals.BAR_HINWEIS_KEINGELD1.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_HINWEIS_KEINGELD1.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bar_Hinweis_KeineGeld1", TempText); + + TempText = new Text(Globals.BAR_HINWEIS_KEINGELD2.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_HINWEIS_KEINGELD2.FontSize); + TempText.Color = Globals.SprachRot; + MöglicheTexte.Add("Bar_Hinweis_KeineGeld2", TempText); + + TextPool.Add("SprachTexte", new Dictionary(MöglicheTexte)); + MöglicheTexte.Clear(); + #endregion + + #region Bar-Auswahltexte + //Auswahltexte + //Seite 1 - Root + TempText = new Text(Globals.BAR_SUCHEMANNSCHAFT.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_SUCHEMANNSCHAFT.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("BarSucheMannschaft", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_KOSTENFILIALE.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_KOSTENFILIALE.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("BarKostenFiliale", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_ABSCHIED.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_ABSCHIED.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("BarAbschied", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_GELDTRANSFER.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_GELDTRANSFER.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("BarGeldtransfer", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_HINWEISE.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_HINWEISE.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("BarHinweis", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BUDGETTEXT.String, Assets.FONT_AMIGA4EVER2, Globals.BUDGETTEXT.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("BarBudget", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.1A - Auswahl Schiffe (variable Liste) + TempText = new Text(Globals.TEXT_ABBRUCH.String, Assets.FONT_AMIGA4EVER2, Globals.TEXT_ABBRUCH.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Schiffswahl_Abbruch", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.1A", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.1B - Auswahl Mannschaftsdetails + TempText = new Text(Globals.TEXT_ABBRUCH2.String, Assets.FONT_AMIGA4EVER2, Globals.TEXT_ABBRUCH2.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Manschafftswahl_Abbruch", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_MANNSCHAFTSWAHL_BESTÄTIGUNG.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_MANNSCHAFTSWAHL_BESTÄTIGUNG.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Manschafftswahl_Bestätigung", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG1.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG1.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Manschafftswahl_Beschreibung1", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG2.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG2.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Manschafftswahl_Beschreibung2", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG3.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG3.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Manschafftswahl_Beschreibung3", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG4.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG4.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Manschafftswahl_Beschreibung4", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG5.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG5.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Manschafftswahl_Beschreibung5", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG6.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG6.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Manschafftswahl_Beschreibung6", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG7.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG7.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Manschafftswahl_Beschreibung7", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG8.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG8.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Manschafftswahl_Beschreibung8", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG9.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG9.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Manschafftswahl_Beschreibung9", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG10.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_MANNSCHAFTSWAHL_BESCHREIBUNG10.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Manschafftswahl_Beschreibung10", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.1B", new List(TempListe)); + TempListe.Clear(); + + //Seite 1.2 - Auswahl Filialerstellung + + + //Seite 1.4 - Auswahl Geldtransfer + TempText = new Text(Globals.BUDGETTEXT.String, Assets.FONT_AMIGA4EVER2, Globals.BUDGETTEXT.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Geldtransfer_Quelle", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_GELDTRANSFER_ZIEL.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_GELDTRANSFER_ZIEL.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Geldtransfer_Ziel", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_GELDTRANSFER_BETRAG.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_GELDTRANSFER_BETRAG.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Geldtransfer_Betrag", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.BAR_GELDTRANSFER_BESTÄTIGUNG.String, Assets.FONT_AMIGA4EVER2, Globals.BAR_GELDTRANSFER_BESTÄTIGUNG.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Geldtransfer_Bestätigung", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TempText = new Text(Globals.TEXT_ABBRUCH2.String, Assets.FONT_AMIGA4EVER2, Globals.TEXT_ABBRUCH2.FontSize); + TempText.Color = Globals.StdGrün; + MöglicheTexte.Add("Bar_Geldtransfer_Abbruch", TempText); + TempListe.Add(new Text(TempText.String, Assets.FONT_AMIGA4EVER2, TempText.FontSize)); + + TextBaum.Add("1.4", new List(TempListe)); + TempListe.Clear(); + + #endregion + break; + } + + } + + //Methoden zur Erzeugung und hinzufügung zu den Grafiken der Szene -> Verwaltet werden diese in der Update Methode(ein/ausblenden; AuswahlHandling etc) + public void erzeugeSprachText(Queue textIDs, Queue SprachParam, int xPos, int yPos) + {//Methode zum erzeugen einer Sprachtextsequenz -> sequenz timmer bestimmt die anzeige dauer für jeden Text + MöglicheTexte = TextPool["SprachTexte"]; + + //Alle einträge der Queue in die Ladequeue übernehmen und nach ein ander in der Updatemethode anzeigen + while (textIDs.IsNotEmpty()) + { + String TempString = textIDs.Dequeue(); + Text TempText = new Text(MöglicheTexte[TempString].String, Assets.FONT_AMIGA4EVER2, MöglicheTexte[TempString].FontSize + 10); + + TempText.Color = Globals.SprachRot; + TempText.OutlineColor = Color.Black; + TempText.OutlineThickness = 2; + TempText.X = xPos; + TempText.Y = yPos; + TempText.Alpha = 0; + SprachText.Enqueue(TempText); + textSprachAktiv = true; + anstehenderSequenzCounter++; + } + + //Wenn es Parameter gibt müssen diese in die Paramterqueue übernommen werden + while (SprachParam.IsNotEmpty()) + { + SprachParameter.Enqueue(SprachParam.Dequeue()); + anstehenderParamSequenzCounter++; + } + + + } + + public void erzeugeAuswahlText(Queue AuswahlParams, int xPos, int yPos) + {//Methode zum erzeugen einer Auswahlliste an Texten in grün -> Positionen geben Ankerpunkt für die Auswahlbox an. Standardmäßig sind immer 3 Texte mit definierten Abständen zu sehen + //Nur Auswahltexte einmalig aktivieren!!! + if (!textBaumAktiv) + { + textBaumAktiv = true; + //Textbaum aktivierung startet immer bei Ebene 1 (Root Menü) + aktuelleEbene = "1"; + aktuellerTextIndex = 0; + + //gewünschte Position übernehmen + AuswahlXPos = xPos; + AuswahlYPos = yPos; + auswahlAnzeigeFertig = false; + + AuswahlParamter.Clear(); + //Wenn es Parameter gibt müssen diese in die Paramterdictionary übernommen werden + while (AuswahlParams.IsNotEmpty()) + { + AuswahlParamter.Add(AuswahlParams.Dequeue()); + } + + } + + } + + public void wechsleAuswahlText(string ebene, Queue AuswahlParams, bool variableListe = false, bool erneuereTextIndex = true) + { + + aktuelleEbene = ebene; + // Wenn Erneuerung des Textindex gewünscht ist muss hier initialisiert werden ansonsten bleibt der alte bestehen + if (erneuereTextIndex) + aktuellerTextIndex = 0; + auswahlAnzeigeFertig = false; + + //Wenn VariableList mitgegeben wurde handelt es sich um eine AuswahlEbene des Baumes, der variable Länge und Inhalt vorweist + VariableListe = variableListe; + AuswahlParamter.Clear(); + //Wenn es Parameter gibt müssen diese in die Paramterdictionary übernommen werden + while (AuswahlParams.IsNotEmpty()) + { + AuswahlParamter.Add(AuswahlParams.Dequeue()); + } + } + + public void erzeugeTafelText(List ExportWarenListe, List ImportWarenListe) + {//Methode zum erzeugen eines TafelTextes in weiß + //Info Tafeltexte werden erzeugt aus dem vorhandenen Bestand des Hafens der den Textbuilder implementiert d.h. Pro TafelTextListe haben wir immer Startpunkt und von da an + //Immer "doppel Einträge" Einer Links bündig Name der Ware einer Rechtsbündig Preis der Ware + + MöglicheTexte = TextPool["TafelTexte"]; + Text HeaderText; + Text TempTextLinks; + Text TempTextRechts; + //Obere Linke ecke der Tafel -> Von hier aus werden alle Texte relativ zu platziert + TafelXPos = 475; + TafelYPos = 85; + + //Wenn mindestens ein Tafeltext aktiv ist -> Nur dan TafelLogik ausführen + tafelTextAktiv = true; + + //Wenn vorher schon eine Tafelliste vorhanden war wird diese zuerst gelöscht (so kann eine Tafelliste neu geschrieben werden) + if (TafelTextListe.IsNotEmpty()) + { + foreach (Text item in TafelTextListe) + { + RemoveGraphics(item); + } + TafelTextListe.Clear(); + } + + + //Füllen der TafelTextListe + //Zuerst der "Wir bieten an:" Text + HeaderText = new Text(MöglicheTexte["AngebotTafel"].String, Assets.FONT_AMIGA4EVER2, 8); + HeaderText.CenterTextOriginX(); + HeaderText.Color = Globals.TafelGrau; + HeaderText.X = TafelXPos + 75; + HeaderText.Y = TafelYPos; + + TafelTextListe.Add(HeaderText); + + //Danach alle Export Texte (Maximal 2) + int startYIndex = 0; + + // YPos des obersten Exportes + TafelYPos += 25; + + foreach (Ware item in ExportWarenListe) + { + + TempTextLinks = new Text(item.BEZEICHNUNG, Assets.FONT_AMIGA4EVER2, 8); + TempTextLinks.Color = Globals.TafelGrau; + TempTextLinks.X = TafelXPos; + TempTextLinks.Y = TafelYPos + startYIndex * 20; + TafelTextListe.Add(TempTextLinks); + + TempTextRechts = new Text((item.LAGERPREIS / 100).ToString() + "," + (item.LAGERPREIS % 100).ToString() + " $", Assets.FONT_AMIGA4EVER2, 8); + TempTextRechts.OriginX = TempTextRechts.Right; + TempTextRechts.Color = Globals.TafelGrau; + TempTextRechts.X = TafelXPos + 140; + TempTextRechts.Y = TafelYPos + startYIndex * 20; + TafelTextListe.Add(TempTextRechts); + + startYIndex++; + + + } + + HeaderText = new Text(MöglicheTexte["NachfrageTafel"].String, Assets.FONT_AMIGA4EVER2, 8); + HeaderText.CenterTextOriginX(); + HeaderText.Color = Globals.TafelGrau; + HeaderText.X = TafelXPos + 75; + HeaderText.Y = TafelYPos + 65; + TafelTextListe.Add(HeaderText); + + //Danach alle Import Texte + startYIndex = 0; + + // YPos des obersten Imports + TafelYPos += 100; + + + foreach (Ware item in ImportWarenListe) + { + + TempTextLinks = new Text(item.BEZEICHNUNG, Assets.FONT_AMIGA4EVER2, 8); + TempTextLinks.Color = Globals.TafelGrau; + TempTextLinks.X = TafelXPos; + TempTextLinks.Y = TafelYPos + startYIndex * 20; + TafelTextListe.Add(TempTextLinks); + + TempTextRechts = new Text((item.LAGERPREIS / 100).ToString() + "," + (item.LAGERPREIS % 100).ToString() + " $", Assets.FONT_AMIGA4EVER2, 8); + TempTextRechts.OriginX = TempTextRechts.Right; + TempTextRechts.Color = Globals.TafelGrau; + TempTextRechts.X = TafelXPos + 140; + TempTextRechts.Y = TafelYPos + startYIndex * 20; + TafelTextListe.Add(TempTextRechts); + + startYIndex++; + + + } + + tafelAnzeigeFertig = false; + + } + + public void erzeugeAnzeigeTexte(List TextListe) + {//Methode zum erzeugen von AnzeigeTexte + + //Wenn mindestens ein Tafeltext aktiv ist -> Nur dan TafelLogik ausführen + anzeigeTextAktiv = true; + + //Wenn vorher schon eine Tafelliste vorhanden war wird diese zuerst gelöscht (so kann eine Tafelliste neu geschrieben werden) + if (AnzeigeTextListe.IsNotEmpty()) + { + foreach (Text Zeile in AnzeigeTextListe) + { + RemoveGraphics(Zeile); + } + + } + AnzeigeTextListe.Clear(); + foreach (Text Zeile in TextListe) + { + AnzeigeTextListe.Add(Zeile); + } + + TextListe.Clear(); + textAnzeigeFertig = false; + + } + + + public bool checkEbeneExistiert(string Ebene) + { + if (TextBaum.ContainsKey(Ebene)) + return true; + else + return false; + } + + public string zeigeAktuelleEbene() + { + return aktuelleEbene; + } + + + public void setzeFadeOut() + { + Tween(FadeOutBlackScreen, new { Alpha = 1f }, 100f, 0f).Ease(Ease.BackInOut); + AddGraphics(FadeOutBlackScreen); + } + + private void wechselFarbe(Text QuellText) + { + if (QuellText.Color.ColorString == Globals.StdGrün.ColorString) + QuellText.Color = Globals.HighLightMagenta; + else + QuellText.Color = Globals.StdGrün; + } + + public int checkAuswahl() + { + // Checkauswahl gibt den Index des Auswahlliste des aktuellen Baumes an in relation mit dem aktuellen Anzeige Index + // Abfragen des Clicked Status ( wenn diese Abfrage erfolgt wird der Wert immer direkt zurück gesetzt) + int TempCheckwert; + if (VariableListe) + { + // Bei variabler listen länge wird bei 99 vom Abbruch ausgegangen + if (AuswahlTextListe.Count() == clickedAuswahl) + TempCheckwert = 999; + else + TempCheckwert = clickedAuswahl; + } + else + { + TempCheckwert = clickedAuswahl; + } + + clickedAuswahl = 0; + return TempCheckwert; + } + + public string checkButtonAuswahl() + { + string TempButton = clickedButton; + clickedButton = ""; + return TempButton; + } + + public void setAuswahl(int Auswahl) + { + // Setzen der aktuellen Auswahl auf einen vorbestimmten Wert( wird für Shortcut-Funktionalität verwendet) + clickedAuswahl = Auswahl; + } + + } + +}