src/aircraft_cmd.cpp
branchnoai
changeset 10294 7798ae816af8
parent 10249 58810805030e
child 10370 fa4f88090694
--- a/src/aircraft_cmd.cpp	Mon Apr 21 20:52:54 2008 +0000
+++ b/src/aircraft_cmd.cpp	Mon Apr 21 21:15:50 2008 +0000
@@ -37,6 +37,7 @@
 #include "player_func.h"
 #include "settings_type.h"
 #include "order_func.h"
+#include "effectvehicle_func.h"
 
 #include "table/strings.h"
 #include "table/sprites.h"
@@ -160,16 +161,17 @@
 }
 #endif
 
-int Aircraft::GetImage(Direction direction) const
+SpriteID Aircraft::GetImage(Direction direction) const
 {
-	int spritenum = this->spritenum;
+	uint8 spritenum = this->spritenum;
 
 	if (is_custom_sprite(spritenum)) {
-		int sprite = GetCustomVehicleSprite(this, direction);
+		SpriteID sprite = GetCustomVehicleSprite(this, direction);
+		if (sprite != 0) return sprite;
 
-		if (sprite != 0) return sprite;
 		spritenum = _orig_aircraft_vehicle_info[this->engine_type - AIRCRAFT_ENGINES_INDEX].image_index;
 	}
+
 	return direction + _aircraft_sprite[spritenum];
 }
 
@@ -179,31 +181,33 @@
 
 	const Vehicle *w = v->Next()->Next();
 	if (is_custom_sprite(v->spritenum)) {
-		SpriteID spritenum = GetCustomRotorSprite(v, false);
-		if (spritenum != 0) return spritenum;
+		SpriteID sprite = GetCustomRotorSprite(v, false);
+		if (sprite != 0) return sprite;
 	}
 
 	/* Return standard rotor sprites if there are no custom sprites for this helicopter */
 	return SPR_ROTOR_STOPPED + w->u.air.state;
 }
 
-void DrawAircraftEngine(int x, int y, EngineID engine, SpriteID pal)
+static SpriteID GetAircraftIcon(EngineID engine)
 {
-	const AircraftVehicleInfo* avi = AircraftVehInfo(engine);
-	int spritenum = avi->image_index;
-	SpriteID sprite = (6 + _aircraft_sprite[spritenum]);
+	uint8 spritenum = AircraftVehInfo(engine)->image_index;
 
 	if (is_custom_sprite(spritenum)) {
-		sprite = GetCustomVehicleIcon(engine, DIR_W);
-		if (sprite == 0) {
-			spritenum = _orig_aircraft_vehicle_info[engine - AIRCRAFT_ENGINES_INDEX].image_index;
-			sprite = (6 + _aircraft_sprite[spritenum]);
-		}
+		SpriteID sprite = GetCustomVehicleIcon(engine, DIR_W);
+		if (sprite != 0) return sprite;
+
+		spritenum = _orig_aircraft_vehicle_info[engine - AIRCRAFT_ENGINES_INDEX].image_index;
 	}
 
-	DrawSprite(sprite, pal, x, y);
+	return 6 + _aircraft_sprite[spritenum];
+}
 
-	if (!(avi->subtype & AIR_CTOL)) {
+void DrawAircraftEngine(int x, int y, EngineID engine, SpriteID pal)
+{
+	DrawSprite(GetAircraftIcon(engine), pal, x, y);
+
+	if (!(AircraftVehInfo(engine)->subtype & AIR_CTOL)) {
 		SpriteID rotor_sprite = GetCustomRotorIcon(engine);
 		if (rotor_sprite == 0) rotor_sprite = SPR_ROTOR_STOPPED;
 		DrawSprite(rotor_sprite, PAL_NONE, x, y - 5);
@@ -217,21 +221,9 @@
  */
 void GetAircraftSpriteSize(EngineID engine, uint &width, uint &height)
 {
-	const AircraftVehicleInfo* avi = AircraftVehInfo(engine);
-	int spritenum = avi->image_index;
-	SpriteID sprite = (6 + _aircraft_sprite[spritenum]);
+	const Sprite *spr = GetSprite(GetAircraftIcon(engine));
 
-	if (is_custom_sprite(spritenum)) {
-		sprite = GetCustomVehicleIcon(engine, DIR_W);
-		if (sprite == 0) {
-			spritenum = _orig_aircraft_vehicle_info[engine - AIRCRAFT_ENGINES_INDEX].image_index;
-			sprite = (6 + _aircraft_sprite[spritenum]);
-		}
-	}
-
-	const Sprite *spr = GetSprite(sprite);
-
-	width  = spr->width ;
+	width  = spr->width;
 	height = spr->height;
 }
 
@@ -528,7 +520,7 @@
 	/* Check if this aircraft can be started/stopped. The callback will fail or
 	 * return 0xFF if it can. */
 	uint16 callback = GetVehicleCallback(CBID_VEHICLE_START_STOP_CHECK, 0, 0, v->engine_type, v);
-	if (callback != CALLBACK_FAILED && callback != 0xFF) {
+	if (callback != CALLBACK_FAILED && GB(callback, 0, 8) != 0xFF) {
 		StringID error = GetGRFStringID(GetEngineGRFID(v->engine_type), 0xD000 + callback);
 		return_cmd_error(error);
 	}
@@ -2089,7 +2081,7 @@
 		if (v->breakdown_ctr <= 2) {
 			HandleBrokenAircraft(v);
 		} else {
-			v->breakdown_ctr--;
+			if (!v->current_order.IsType(OT_LOADING)) v->breakdown_ctr--;
 		}
 	}