Exemplo n.º 1
0
void nobMilitary::Destroy_nobMilitary()
{
    // Remove from military square and buildings first, to avoid e.g. sending canceled soldiers back to this building
    gwg->GetPlayer(player).RemoveMilitaryBuilding(this);
    gwg->GetMilitarySquares().Remove(this);

    // Bestellungen stornieren
    CancelOrders();

    // Soldaten rausschicken
    for(SortedTroops::iterator it = troops.begin(); it != troops.end(); ++it)
        (*it)->InBuildingDestroyed();
    troops.clear();

    // Inform far-away capturers
    for(std::list<nofAttacker*>::iterator it = far_away_capturers.begin(); it != far_away_capturers.end(); ++it)
        (*it)->AttackedGoalDestroyed();
    far_away_capturers.clear();

    // Events ggf. entfernen
    GetEvMgr().RemoveEvent(goldorder_event);
    GetEvMgr().RemoveEvent(upgrade_event);

    // übriggebliebene Goldmünzen in der Inventur abmelden
    gwg->GetPlayer(player).DecreaseInventoryWare(GD_COINS, coins);

    Destroy_nobBaseMilitary();

    // Land drumherum neu berechnen (nur wenn es schon besetzt wurde!)
    // Nach dem BaseDestroy erst, da in diesem erst das Feuer gesetzt, die Straße gelöscht wird usw.
    if(!new_built)
        gwg->RecalcTerritory(*this, true, false);

    gwg->GetNotifications().publish(BuildingNote(BuildingNote::Lost, player, pos, type_));
}
void nobBaseWarehouse::Destroy_nobBaseWarehouse()
{
    if(GetBuildingType() != BLD_HARBORBUILDING)
    {
        // Aus der Warenhausliste entfernen
        gwg->GetPlayer(player).RemoveWarehouse(this);
    }else
    {
        // Harbors should also remove the warehouse
        RTTR_Assert(!helpers::contains(gwg->GetPlayer(player).GetStorehouses(), this));
    }

    // Den Waren und Figuren Bescheid sagen, die zu uns auf den Weg sind, dass wir nun nicht mehr existieren
    for(std::list<noFigure*>::iterator it = dependent_figures.begin(); it != dependent_figures.end(); ++it)
        (*it)->GoHome();
    dependent_figures.clear();
	for(std::list<Ware*>::iterator it = dependent_wares.begin(); it!=dependent_wares.end(); ++it)
        WareNotNeeded(*it);
    dependent_wares.clear();

    // ggf. Events abmelden
    em->RemoveEvent(recruiting_event);
    em->RemoveEvent(producinghelpers_event);
    em->RemoveEvent(empty_event);
    em->RemoveEvent(store_event);

    // Waiting Wares löschen
    for(std::list<Ware*>::iterator it = waiting_wares.begin(); it != waiting_wares.end(); ++it)
    {
        (*it)->WareLost(player);
        delete (*it);
    }
    waiting_wares.clear();

    // restliche Warenbestände von der Inventur wieder abziehen
    for(unsigned int i = 0; i < WARE_TYPES_COUNT; ++i)
        gwg->GetPlayer(player).DecreaseInventoryWare(GoodType(i), inventory[GoodType(i)]);

    // Objekt, das die flüchtenden Leute nach und nach ausspuckt, erzeugen
    new BurnedWarehouse(pos, player, inventory.real.people);

    Destroy_nobBaseMilitary();
}