Esempio n. 1
0
void nofFarmhand::WalkHome()
{
    // Sind wir zu Hause angekommen? (genauer an der Flagge !!)
    if(pos == dest)
    {
        // Weiteres übernimmt nofBuildingWorker
        WorkingReady();
        return;
    }

    unsigned char dir = gwg->FindHumanPath(pos, dest, 40);
    // Weg suchen und ob wir überhaupt noch nach Hause kommen
    if(dir == 0xFF)
    {
        // Kein Weg führt mehr nach Hause--> Rumirren
        StartWandering();
        Wander();
        // Haus Bescheid sagen
        workplace->WorkerLost();
        workplace = 0;
    }
    else
    {
        // Alles ok, wir können hinlaufen
        StartWalking(dir);
    }
}
Esempio n. 2
0
void nofHunter::WalkHome()
{
	// Sind wir zu Hause angekommen? (genauer an der Flagge !!)
	unsigned short flag_x = workplace->GetX()+(workplace->GetY()&1), flag_y = workplace->GetY()+1;
	if(x == flag_x && y == flag_y)
	{
		// Weiteres übernimmt nofBuildingWorker
		WorkingReady();
	}
	// Weg suchen und ob wir überhaupt noch nach Hause kommen (Toleranz bei dem Weg mit einberechnen,
	// damit er nicht einfach rumirrt und wegstirbt, wenn er einmal ein paar Felder zu weit gelaufen ist)
	else if((dir = gwg->FindHumanPath(x,y,flag_x,flag_y,MAX_HUNTING_DISTANCE+MAX_HUNTING_DISTANCE/4)) == 0xFF)
	{
		// Kein Weg führt mehr nach Hause--> Rumirren
		StartWandering();
		Wander();
		// Haus Bescheid sagen
		workplace->WorkerLost();
	}
	else
	{
		// Alles ok, wir können hinlaufen
		StartWalking(dir);
	}
}
void nofBuildingWorker::Walked()
{
	switch(state)
	{
	case STATE_ENTERBUILDING:
		{
			// Hab ich noch ne Ware in der Hand?

			if(ware != GD_NOTHING)
			{
				// dann war draußen kein Platz --> ist jetzt evtl Platz?
				state = STATE_WAITFORWARESPACE;
				if(workplace->GetFlag()->GetWareCount() < 8)
					FreePlaceAtFlag();
				// Ab jetzt warten, d.h. nicht mehr arbeiten --> schlecht für die Produktivität
				StartNotWorking();
			}
			else
			{
				// Anfangen zu Arbeiten
				TryToWork();
			}

		} break;
	case STATE_CARRYOUTWARE:
		{
			// Alles weitere übernimmt nofBuildingWorker
			WorkingReady();
		} break;
	default:
		WalkedDerived();
	}
}
Esempio n. 4
0
void nofShipWright::WalkHome()
{
    // Sind wir zu Hause angekommen? (genauer an der Flagge !!)
    if(pos == dest)
    {
        // Weiteres übernimmt nofBuildingWorker
        WorkingReady();
    }
    // Weg suchen und ob wir überhaupt noch nach Hause kommen
    else if((dir = gwg->FindHumanPath(pos, dest, SHIPWRIGHT_WALKING_DISTANCE)) == 0xFF)
    {
        // Kein Weg führt mehr nach Hause--> Rumirren
        StartWandering();
        Wander();
        // Haus Bescheid sagen
        workplace->WorkerLost();
        workplace = 0;
    }
    else
    {
        // Alles ok, wir können hinlaufen
        StartWalking(dir);
    }
}
Esempio n. 5
0
void nofShipWright::WalkHome()
{
    // Sind wir zu Hause angekommen? (genauer an der Flagge !!)
    if(pos == dest)
    {
        // Weiteres übernimmt nofBuildingWorker
        WorkingReady();
        return;
    }
    unsigned char dir = gwg->FindHumanPath(pos, dest, SHIPWRIGHT_WALKING_DISTANCE);
    // Weg suchen und ob wir überhaupt noch nach Hause kommen
    if(dir == 0xFF)
    {
        // Kein Weg führt mehr nach Hause--> Rumirren
        AbrogateWorkplace();
        StartWandering();
        Wander();
    }
    else
    {
        // Alles ok, wir können hinlaufen
        StartWalking(dir);
    }
}