/// Behandelt das Laufen zurück zum Schiff void nofAttacker::HandleState_SeaAttack_ReturnToShip() { // Ist evtl. unser Heimatgebäude zerstört? if(!building) { // Rumirren state = STATE_FIGUREWORK; StartWandering(); Wander(); // Schiff Bescheid sagen CancelAtShip(); return; } // Sind wir schon im Schiff? if(pos == shipPos) { // Alle Figuren durchgehen for(noBase* figure : gwg->GetFigures(pos)) { if(figure->GetObjId() == ship_obj_id) { StartReturnViaShip(static_cast<noShip&>(*figure)); return; } } RTTR_Assert(false); ship_obj_id = 0; // Kein Schiff gefunden? Das kann eigentlich nich sein! // Dann rumirren StartWandering(); state = STATE_FIGUREWORK; Wander(); return; } unsigned char dir = gwg->FindHumanPath(pos, shipPos, MAX_ATTACKING_RUN_DISTANCE); // oder finden wir gar keinen Weg mehr? if(dir == 0xFF) { // Kein Weg gefunden --> Rumirren StartWandering(); state = STATE_FIGUREWORK; Wander(); // Dem Heimatgebäude Bescheid sagen building->SoldierLost(this); // Und dem Schiff CancelAtShip(); } // oder ist alles ok? :) else { // weiterlaufen StartWalking(Direction(dir)); } }
/// Behandelt das Laufen zurück zum Schiff void nofAttacker::HandleState_SeaAttack_ReturnToShip() { // Ist evtl. unser Heimatgebäude zerstört? if(!building) { // Rumirren state = STATE_FIGUREWORK; StartWandering(); Wander(); // Schiff Bescheid sagen CancelAtShip(); return; } // Sind wir schon im Schiff? if(pos == shipPos) { // Alle Figuren durchgehen std::vector<noBase*> figures = gwg->GetDynamicObjectsFrom(pos); for(std::vector<noBase*>::iterator it = figures.begin(); it != figures.end(); ++it) { if((*it)->GetObjId() == ship_obj_id) { noShip* ship = static_cast<noShip*>(*it); // Und von der Landkarte tilgen gwg->RemoveFigure(this, pos); // Uns zum Schiff hinzufügen ship->AddAttacker(this); state = STATE_FIGUREWORK; fs = FS_GOTOGOAL; StartReturnViaShip(); return; } } // Kein Schiff gefunden? Das kann eigentlich nich sein! // Dann rumirren StartWandering(); state = STATE_FIGUREWORK; Wander(); } // oder finden wir gar keinen Weg mehr? else if((dir = gwg->FindHumanPath(pos, shipPos, MAX_ATTACKING_RUN_DISTANCE)) == 0xFF) { // Kein Weg gefunden --> Rumirren StartWandering(); state = STATE_FIGUREWORK; Wander(); // Dem Heimatgebäude Bescheid sagen building->SoldierLost(this); // Und dem Schiff CancelAtShip(); } // oder ist alles ok? :) else { // weiterlaufen StartWalking(dir); } }