Пример #1
0
/// Eine bestellte Ware konnte doch nicht kommen
void nobHarborBuilding::WareLost(Ware * ware)
{
	// ggf. neue Waren für Expedition bestellen
	if(expedition.active && (ware->type == GD_BOARDS || ware->type == GD_STONES))
		OrderExpeditionWares();
	RemoveDependentWare(ware);
}
Пример #2
0
/// 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);
}
void nobBaseWarehouse::AddWare(Ware*& ware)
{
    // Ware not dependent anymore (only if we had a goal)
    if(ware->GetGoal())
    {
        RTTR_Assert(ware->GetGoal() == this); // The goal should be here
        RemoveDependentWare(ware);
    }
    else
        RTTR_Assert(!IsWareDependent(ware));

    // Die Schilde der verschiedenen Nation in eine "Schild-Sorte" (den der Römer) umwandeln!
    GoodType type = ConvertShields(ware->type);

    gwg->GetPlayer(player).RemoveWare(ware);
    deletePtr(ware);

    inventory.Add(type);

    CheckUsesForNewWare(type);
}
Пример #4
0
/// 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);

}
Пример #5
0
/// Erhält die Waren von einem Schiff und nimmt diese in den Warenbestand auf
void nobHarborBuilding::ReceiveGoodsFromShip(const std::list<noFigure*> figures, const std::list<Ware*> wares)
{
	// Menschen zur Ausgehliste hinzufügen
	for(std::list<noFigure*>::const_iterator it = figures.begin();it!=figures.end();++it)
	{
		if((*it)->GetJobType() == JOB_BOATCARRIER)
		{
			++goods.people[JOB_HELPER];
			++goods.goods[GD_BOAT];
		}
		else
			++goods.people[(*it)->GetJobType()];

		// Wenn es kein Ziel mehr hat, sprich keinen weiteren Weg, kann es direkt hier gelagert
		// werden
		if ((*it)->HasNoGoal() || ((*it)->GetGoal() == this))
		{
			AddFigure(*it, false);
		} else
		{
			Point<MapCoord> next_harbor = (*it)->ExamineRouteBeforeShipping();
			unsigned char next_dir = (*it)->GetDir();

			if (next_dir == 4)
			{
				AddLeavingFigure(*it);
				(*it)->ShipJourneyEnded();
			} else if (next_dir == SHIP_DIR)
			{
				AddFigureForShip(*it, next_harbor);
			} else
			{
				AddFigure(*it, false);
			}
		}
	}

	// Waren zur Warteliste hinzufügen
	for(std::list<Ware*>::const_iterator it = wares.begin();it!=wares.end();++it)
	{
		// Optische Warenwerte entsprechend erhöhen
		++goods.goods[ConvertShields((*it)->type)];
		if((*it)->ShipJorneyEnded(this))
		{
			
			// Ware will die weitere Reise antreten, also muss sie zur Liste der rausgetragenen Waren
			// hinzugefügt werden
			waiting_wares.push_back(*it);
		}
		else
		{
			// Ansonsten fügen wir die Ware einfach zu unserem Inventar dazu
			RemoveDependentWare(*it);
			++real_goods.goods[ConvertShields((*it)->type)];
			players->getElement(player)->RemoveWare(*it);
			delete *it;
		}
	}

	// Ggf. neues Rausgeh-Event anmelden, was notwendig ist, wenn z.B. nur Waren zur Liste hinzugefügt wurden
	AddLeavingEvent();
}
void nobBaseWarehouse::WareLost(Ware* ware)
{
    RemoveDependentWare(ware);
}