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); } } }