/// Legt eine Ware im Lagerhaus ab void nobHarborBuilding::AddWare(Ware*& ware) { if(ware->GetGoal() && ware->GetGoal() != this) { // This is not the goal but we have one -> Get new route ware->RecalcRoute(); // Will diese Ware mit dem Schiff irgendwo hin fahren? if(ware->GetNextDir() == SHIP_DIR) { // Dann fügen wir die mal bei uns hinzu AddWareForShip(ware); return; }else if(ware->GetNextDir() != INVALID_DIR) { // Travel on roads -> Carry out RTTR_Assert(ware->GetGoal() != this); AddWaitingWare(ware); return; }else { // Pathfinding failed -> Ware would want to go here RTTR_Assert(ware->GetGoal() == this); // Regular handling below } } // Brauchen wir die Ware? if(expedition.active) { if((ware->type == GD_BOARDS && expedition.boards < BUILDING_COSTS[nation][BLD_HARBORBUILDING].boards) || (ware->type == GD_STONES && expedition.stones < BUILDING_COSTS[nation][BLD_HARBORBUILDING].stones)) { if(ware->type == GD_BOARDS) ++expedition.boards; else ++expedition.stones; // Ware nicht mehr abhängig if(ware->GetGoal()) RemoveDependentWare(ware); // Dann zweigen wir die einfach mal für die Expedition ab gwg->GetPlayer(player).RemoveWare(ware); deletePtr(ware); // Ggf. ist jetzt alles benötigte da CheckExpeditionReady(); return; } } nobBaseWarehouse::AddWare(ware); }
/// Abgeleitete kann eine gerade erzeugte Ware ggf. sofort verwenden /// (muss in dem Fall true zurückgeben) bool nobHarborBuilding::UseWareAtOnce(Ware* ware, noBaseBuilding& goal) { // Evtl. muss die Ware gleich das Schiff nehmen -> dann zum Schiffsreservoir hinzufügen // Assert: This is a ware that got ordered. There MUST be a path to the goal // Otherwise the ware will notify the goal which will order a new ware resulting in an infinite loop RTTR_Assert(gwg->GetRoadPathFinder().PathExists(*this, goal, false, true)); ware->RecalcRoute(); // Also sets nextHarbor! RTTR_Assert(ware->GetNextDir() != INVALID_DIR); if(ware->GetNextDir() == SHIP_DIR) { // Dann fügen wir die mal bei uns hinzu AddWareForShip(ware); return true; }else return false; }
/// Abgeleitete kann eine gerade erzeugte Ware ggf. sofort verwenden /// (muss in dem Fall true zurückgeben) bool nobHarborBuilding::UseWareAtOnce(Ware * ware, noBaseBuilding* const goal) { // Evtl. muss die Ware gleich das Schiff nehmen -> // dann zum Schiffsreservoir hinzufügen Point<MapCoord> next_harbor; ware->RecalcRoute(); if(ware->GetNextDir() == SHIP_DIR) { // Reduce ware count because wares don't go through the house leaving process // And therefore the visual count reducement goods.goods[ware->type]--; // Dann fügen wir die mal bei uns hinzu AddWareForShip(ware); return true; } return false; }
/// Legt eine Ware im Lagerhaus ab void nobHarborBuilding::AddWare(Ware * ware) { if(ware->goal != this) ware->RecalcRoute(); // Will diese Ware mit dem Schiff irgendwo hin fahren? if(ware->GetNextDir() == SHIP_DIR) { // Dann fügen wir die mal bei uns hinzu AddWareForShip(ware); return; } // Brauchen wir die Ware? if(expedition.active) { if((ware->type == GD_BOARDS && expedition.boards < BUILDING_COSTS[nation][BLD_HARBORBUILDING].boards) || (ware->type == GD_STONES && expedition.stones < BUILDING_COSTS[nation][BLD_HARBORBUILDING].stones)) { if(ware->type == GD_BOARDS) ++expedition.boards; else if(ware->type == GD_STONES) ++expedition.stones; // Ware nicht mehr abhängig RemoveDependentWare(ware); // Dann zweigen wir die einfach mal für die Expedition ab gwg->GetPlayer(player)->RemoveWare(ware); delete ware; // Ggf. ist jetzt alles benötigte da CheckExpeditionReady(); return; } } nobBaseWarehouse::AddWare(ware); }