/// A ware changed its route and doesn't want to use the ship anymore void nobHarborBuilding::WareDontWantToTravelByShip(Ware * ware) { // Maybe this building is already destroyed if(gwg->GetGOT(x,y) != GOT_NOB_HARBORBUILDING) return; // Ware aus unserer Liste streichen wares_for_ships.remove(ware); // Will die Ware jetzt vielleicht zu uns? if(ware->goal == this) { // Dann hier gleich einliefern AddWare(ware); // and dont forget to reduce our visual count - addware will increase both and the ware waiting for a ship added to the visual count! --goods.goods[ConvertShields(ware->type)]; } // Oder will sie wieder raus? else { waiting_wares.push_back(ware); AddLeavingEvent(); } }
/// Erhält die Waren von einem Schiff und nimmt diese in den Warenbestand auf void nobHarborBuilding::ReceiveGoodsFromShip(std::list<noFigure*>& figures, std::list<Ware*>& wares) { // Menschen zur Ausgehliste hinzufügen for(std::list<noFigure*>::const_iterator it = figures.begin(); it != figures.end(); ++it) { (*it)->ArrivedByShip(pos); // Wenn es kein Ziel mehr hat, sprich keinen weiteren Weg, kann es direkt hier gelagert werden if((*it)->GetGoal() == this) (*it)->SetGoalToNULL(); else if(!(*it)->HasNoGoal()) { unsigned char nextDir; MapPoint next_harbor = (*it)->ExamineRouteBeforeShipping(nextDir); if (nextDir == 4) { // Increase visual count if((*it)->GetJobType() == JOB_BOATCARRIER) { inventory.visual.Add(JOB_HELPER); inventory.visual.Add(GD_BOAT); } else inventory.visual.Add((*it)->GetJobType()); AddLeavingFigure(*it); (*it)->ShipJourneyEnded(); } else if (nextDir == SHIP_DIR) { AddFigureForShip(*it, next_harbor); }else { // No or invalid path -> Store here RTTR_Assert(nextDir == 0xFF); (*it)->SetGoalToNULL(); AddDependentFigure(*it); } }else AddDependentFigure(*it); // No goal? We take it if ((*it)->HasNoGoal()) AddFigure(*it, true); } figures.clear(); // Waren zur Warteliste hinzufügen for(std::list<Ware*>::iterator it = wares.begin(); it != wares.end(); ++it) { (*it)->ShipJorneyEnded(this); AddWare(*it); } wares.clear(); }