Initial Commit zu 1869 Remake

main
Alex 2 years ago
parent ecf2be6b33
commit fe619fb772

@ -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

@ -0,0 +1,367 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{7FBB14B6-14B4-43DE-AA70-844B2A9E1FF4}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>_1869_Remake</RootNamespace>
<AssemblyName>1869_Remake</AssemblyName>
<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup>
<StartupObject />
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Assets.cs" />
<Compile Include="Entities\AnimatingEntity.cs" />
<Compile Include="Entities\Filiale.cs" />
<Compile Include="Entities\Hafen.cs" />
<Compile Include="Entities\MeeresKnotenpunkt.cs" />
<Compile Include="Entities\Schiff.cs" />
<Compile Include="Entities\SchiffsController.cs" />
<Compile Include="Entities\SeeStraße.cs" />
<Compile Include="Entities\Spieler.cs" />
<Compile Include="Entities\Ware.cs" />
<Compile Include="Entities\WeltEvent.cs" />
<Compile Include="Entities\ZeitRad.cs" />
<Compile Include="Globals.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Scenes\BankScene.cs" />
<Compile Include="Scenes\ConfigScreen.cs" />
<Compile Include="Scenes\HallOfFameScene.cs" />
<Compile Include="Scenes\HandelScene.cs" />
<Compile Include="Scenes\Intro.cs" />
<Compile Include="Scenes\OptionenScene.cs" />
<Compile Include="Scenes\StatistikScene.cs" />
<Compile Include="Scenes\BarScene.cs" />
<Compile Include="Scenes\WerftScene.cs" />
<Compile Include="Scenes\worldMap.cs" />
<Compile Include="ToolKlassen\TextBox.cs" />
<Compile Include="ToolKlassen\TextBuilder.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
<None Include="Assets\Fonts\amiga4ever.ttf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Assets\Fonts\amiga_forever_pro2_regular.ttf">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="Assets\Music\Title.ogg">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\..\OtterBasicData\Otter\Otter.csproj">
<Project>{236485c2-a7ba-4dcd-808a-b3a634764402}</Project>
<Name>Otter</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Folder Include="Assets\Sound\" />
</ItemGroup>
<ItemGroup>
<Content Include="Assets\Anims\SeeAnimBG_full_640x480.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Arme_1.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\AuswahlKnoten.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\BankScreen_Basis.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\BankScreen_Basis_2.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\BankScreen_Basis_2_Augen.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Bark.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\BarScreen_BG.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\BG_ZeitDisplay.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\BG_ZeitDisplay_Monat.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Blackscreen.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Brigg.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\ConfigScreen.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Deko_Tür_Links_1_Ofen.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Eisendampfschiff.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Fahne.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Fenster-Tür_1.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\FilialScreen_GroßBrit_BG.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Fregatte.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Gesicht_1.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\HafenIcon_Filiale.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\HafenIcon_Info.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\HafenIcon_Pub.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\HafenIcon_Werft.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\HallOfFameScreen.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Holzdampfschiff.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Holzraum_Basis.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\InfoScreen_Liverpool_Beispiel.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Introscreen_Artwork.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Introscreen_Musik.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Introscreen_Programmers.png" />
<Content Include="Assets\Graphics\Klipper.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\MainScreen_AnkerIcon_1.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\MainScreen_AnkerIcon_2.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\MainScreen_BuchIcon_1.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\MainScreen_BuchIcon_2.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\MainScreen_Frame.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\MainScreen_GeldSackIcon_1.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\MainScreen_GeldSackIcon_2.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\MainScreen_MünzeIcon_1.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\MainScreen_MünzeIcon_2.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Max Design Introscreen.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\MeeresKnoten.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Monat_Apr.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Monat_Aug.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Monat_Dez.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Monat_Feb.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Monat_Jan.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Monat_Jul.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Monat_Jun.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Monat_Mar.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Monat_May.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Monat_Nov.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Monat_Oct.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Monat_Sep.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\OberKörper_1_Weste.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\OptionenScreen_Basis.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Pfeil_hoch.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Pfeil_hoch_rot.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Pfeil_runter.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Pfeil_runter_rot.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\RoterTestBalken.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Schiffchen.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\SchiffControllerIcon_Basis.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Schoner.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\StatistikenScreen_Basis.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Tafel_basic.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Tafel_BG_Holz.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Tafel_Vordergrund_1_FassSchwamm.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Tisch_1.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Tisch_2_Holz_Basic.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\TitleScreen.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Werft_Bau_Schiffsnamen.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Werft_Main_BG.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Werft_Reparatur_BG.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Werft_SchiffstypAuswahl_BG.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\worldmap_europa.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Zahl_0.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Zahl_1.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Zahl_2.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Zahl_3.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Zahl_4.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Zahl_5.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Zahl_6.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Zahl_7.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Zahl_8.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
<Content Include="Assets\Graphics\Zahl_9.png">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
</startup>
</configuration>

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 445 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 731 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 873 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 501 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 444 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 430 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 445 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 404 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 161 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 384 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 349 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 313 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 323 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 156 KiB

@ -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<Animation> spritemap = new Spritemap<Animation>(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);
}
}
}

@ -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<Ware> LAGER = new List<Ware>();
//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);
}
}
}

@ -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<string, Schiff> 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<Schiff> angedockteSchiffe = new List<Schiff>();
public int anzahlEigenerSchiffe = 0;
//Liste aller Filialen in diesem Hafen
public List<Filiale> vorhandeneFilialen = new List<Filiale>();
//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<Ware> IMPORTWARE = new List<Ware>();
public Dictionary<string, List<Ware>> RESTOCKSCHABLONEIMPORT = new Dictionary<string, List<Ware>>();
public List<Ware> EXPORTWARE = new List<Ware>();
public Dictionary<string, List<Ware>> RESTOCKSCHABLONEEXPORT = new Dictionary<string, List<Ware>>();
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<Ware>());
}
RESTOCKSCHABLONEIMPORT[Monat].Add(Item);
break;
case "EXPORT":
if (!RESTOCKSCHABLONEEXPORT.ContainsKey(Monat))
{
RESTOCKSCHABLONEEXPORT.Add(Monat, new List<Ware>());
}
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<Ware> 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<Ware>(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<Ware>(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<Schiff> überprüfeEigeneSchiffeVorhanden(Spieler anfrageSpieler)
{
//Überprüfen, ob und welche eigenen schiffe im Hafen angedockt sind
List<Schiff> Schiffsliste = new List<Schiff>();
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);
}
}
}

@ -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<KeyValuePair<SeeStraße, string>, int> VERKNÜPFTESEESTRAßEN = new Dictionary<KeyValuePair<SeeStraße, string>, 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<string, int> SCREENPOS_X;
Dictionary<string, int> 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<SeeStraße, string>(Route, JahresZeit)))
{
VERKNÜPFTESEESTRAßEN.Add(new KeyValuePair<SeeStraße, string>(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;
}
}
}

@ -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<Ware> LADUNG = new List<Ware>();
#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<Ware> TempListe = new List<Ware>();
List<Ware> VerderbListe = new List<Ware>();
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";
}
}
}

@ -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
{
}
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save