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); } }
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(); } }
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); } }
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); } }