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