--- a/src/aircraft_cmd.cpp Wed Aug 15 10:24:47 2007 +0000
+++ b/src/aircraft_cmd.cpp Wed Aug 15 10:30:49 2007 +0000
@@ -552,7 +552,7 @@
if (v->type != VEH_AIRCRAFT || !CheckOwnership(v->owner)) return CMD_ERROR;
/* cannot stop airplane when in flight, or when taking off / landing */
- if (v->u.air.state >= STARTTAKEOFF && v->u.air.state < TERM7)
+ if (v->u.air.state >= TAKEOFF && v->u.air.state <= FLYING)
return_cmd_error(STR_A017_AIRCRAFT_IS_IN_FLIGHT);
/* Check if this aircraft can be started/stopped. The callback will fail or
@@ -1869,39 +1869,25 @@
}
typedef void AircraftStateHandler(Vehicle *v, const AirportFTAClass *apc);
-static AircraftStateHandler * const _aircraft_state_handlers[] = {
- AircraftEventHandler_General, // TO_ALL = 0
- AircraftEventHandler_InHangar, // HANGAR = 1
- AircraftEventHandler_AtTerminal, // TERM1 = 2
- AircraftEventHandler_TakeOff, // TAKEOFF = 3
- AircraftEventHandler_StartTakeOff, // STARTTAKEOFF = 4
- AircraftEventHandler_EndTakeOff, // ENDTAKEOFF = 5
- AircraftEventHandler_HeliTakeOff, // HELITAKEOFF = 6
- AircraftEventHandler_Flying, // FLYING = 7
- AircraftEventHandler_Landing, // LANDING = 8
- AircraftEventHandler_EndLanding, // ENDLANDING = 9
- AircraftEventHandler_HeliLanding, // HELILANDING = 10
- AircraftEventHandler_HeliEndLanding, // HELIENDLANDING = 11
- AircraftEventHandler_HeliEndTakeOff, // HELIENDTAKEOFF = 12
-};
-byte MapStateToHandler(byte state)
+AircraftStateHandler *MapStateToHandler(byte state)
{
- byte handler = 0x00;
- if (state == 0x40) handler = 0x01; //hangar
- if (state >= 0x01 && state <= 0x3C) handler = 0x02; //at terminal
- if (state == 0x41) handler = 0x03; //takeoff
- if (state == 0x42) handler = 0x04; //starttakeoff
- if (state == 0x43) handler = 0x05; //endtakeoff
- if (state == 0x44) handler = 0x08; //landing
- if (state == 0x45) handler = 0x09; //endlanding
- if (state == 0x51) handler = 0x06; //helitakeoff
- if (state == 0x53) handler = 0x0C; //heliendtakeoff
- if (state == 0x54) handler = 0x0A; //helilanding
- if (state == 0x55) handler = 0x0B; //heliendlanding
- if (state == 0x7F) handler = 0x07; //flying
-
- return handler;
+ switch (state) {
+ default: return (state >= FIRST_TERMINAL && state <= LAST_HELIPAD) ?
+ AircraftEventHandler_AtTerminal :
+ AircraftEventHandler_General;
+ case HANGAR: return AircraftEventHandler_InHangar;
+ case TAKEOFF: return AircraftEventHandler_TakeOff;
+ case STARTTAKEOFF: return AircraftEventHandler_StartTakeOff;
+ case ENDTAKEOFF: return AircraftEventHandler_EndTakeOff;
+ case LANDING: return AircraftEventHandler_Landing;
+ case ENDLANDING: return AircraftEventHandler_EndLanding;
+ case HELITAKEOFF: return AircraftEventHandler_HeliTakeOff;
+ case HELIENDTAKEOFF: return AircraftEventHandler_HeliEndTakeOff;
+ case HELILANDING: return AircraftEventHandler_HeliLanding;
+ case HELIENDLANDING: return AircraftEventHandler_HeliEndLanding;
+ case FLYING: return AircraftEventHandler_Flying;
+ }
}
@@ -1911,8 +1897,6 @@
if (!AircraftController(v)) return;
const AirportFTAClass *apc = GetStation(v->u.air.targetairport)->Airport();
- Station *st = GetStation(v->u.air.targetairport);
-
AirportMove(v, apc); // move aircraft to next position
}
@@ -1934,7 +1918,7 @@
if (amd->state == v->u.air.state) {
byte prev_pos = v->u.air.pos; // location could be changed in state, so save it before-hand
byte prev_state = v->u.air.state;
- _aircraft_state_handlers[MapStateToHandler(v->u.air.state)](v, apc);
+ MapStateToHandler(v->u.air.state)(v, apc);
if (v->u.air.state != FLYING) v->u.air.previous_pos = prev_pos;
if (v->u.air.state != prev_state || v->u.air.pos != prev_pos) {
/* release blocks on airport */