コード例 #1
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);
}
コード例 #2
0
/// 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;
}
コード例 #3
0
/// 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;
}
コード例 #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);

}