You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

185 lines
5.9 KiB
C#

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<Schiff> SCHIFFE = new List<Schiff>();
public List<Filiale> FILIALEN = new List<Filiale>();
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;
}
}
}