src/aircraft_cmd.cpp
branchNewGRF_ports
changeset 6825 c6ec828eeb0d
parent 6821 1e2dd2497cb2
child 6827 3274ed92c5d5
--- 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 */