mirror of https://github.com/OpenTTD/OpenTTD
(svn r9760) -Codechange: remove the need for saving some vehicle variables.
parent
2ccee752fd
commit
a4e045a3fb
|
@ -132,6 +132,7 @@ struct Aircraft : public Vehicle {
|
||||||
|
|
||||||
const char *GetTypeString() { return "aircraft"; }
|
const char *GetTypeString() { return "aircraft"; }
|
||||||
void MarkDirty();
|
void MarkDirty();
|
||||||
|
void UpdateDeltaXY(Direction direction);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* AIRCRAFT_H */
|
#endif /* AIRCRAFT_H */
|
||||||
|
|
|
@ -33,6 +33,35 @@
|
||||||
#include "spritecache.h"
|
#include "spritecache.h"
|
||||||
#include "cargotype.h"
|
#include "cargotype.h"
|
||||||
|
|
||||||
|
void Aircraft::UpdateDeltaXY(Direction direction)
|
||||||
|
{
|
||||||
|
uint32 x;
|
||||||
|
#define MKIT(a, b, c, d) ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((c & 0xFF) << 8) | ((d & 0xFF) << 0)
|
||||||
|
switch (this->subtype) {
|
||||||
|
default: NOT_REACHED();
|
||||||
|
case AIR_AIRCRAFT:
|
||||||
|
case AIR_HELICOPTER:
|
||||||
|
switch (this->u.air.state) {
|
||||||
|
case ENDTAKEOFF:
|
||||||
|
case LANDING:
|
||||||
|
case HELILANDING:
|
||||||
|
case FLYING: x = MKIT(24, 24, -1, -1); break;
|
||||||
|
default: x = MKIT( 2, 2, -1, -1); break;
|
||||||
|
}
|
||||||
|
this->z_height = 5;
|
||||||
|
break;
|
||||||
|
case AIR_SHADOW: this->z_height = 1; x = MKIT(2, 2, 0, 0); break;
|
||||||
|
case AIR_ROTOR: this->z_height = 1; x = MKIT(2, 2, -1, -1); break;
|
||||||
|
}
|
||||||
|
#undef MKIT
|
||||||
|
|
||||||
|
this->x_offs = GB(x, 0, 8);
|
||||||
|
this->y_offs = GB(x, 8, 8);
|
||||||
|
this->sprite_width = GB(x, 16, 8);
|
||||||
|
this->sprite_height = GB(x, 24, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/** this maps the terminal to its corresponding state and block flag
|
/** this maps the terminal to its corresponding state and block flag
|
||||||
* currently set for 10 terms, 4 helipads */
|
* currently set for 10 terms, 4 helipads */
|
||||||
static const byte _airport_terminal_state[] = {2, 3, 4, 5, 6, 7, 19, 20, 0, 0, 8, 9, 21, 22};
|
static const byte _airport_terminal_state[] = {2, 3, 4, 5, 6, 7, 19, 20, 0, 0, 8, 9, 21, 22};
|
||||||
|
@ -287,15 +316,8 @@ int32 CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
u->z_pos = GetSlopeZ(x, y);
|
u->z_pos = GetSlopeZ(x, y);
|
||||||
v->z_pos = u->z_pos + 1;
|
v->z_pos = u->z_pos + 1;
|
||||||
|
|
||||||
v->x_offs = v->y_offs = -1;
|
|
||||||
// u->delta_x = u->delta_y = 0;
|
// u->delta_x = u->delta_y = 0;
|
||||||
|
|
||||||
v->sprite_width = v->sprite_height = 2;
|
|
||||||
v->z_height = 5;
|
|
||||||
|
|
||||||
u->sprite_width = u->sprite_height = 2;
|
|
||||||
u->z_height = 1;
|
|
||||||
|
|
||||||
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
||||||
u->vehstatus = VS_HIDDEN | VS_UNCLICKABLE | VS_SHADOW;
|
u->vehstatus = VS_HIDDEN | VS_UNCLICKABLE | VS_SHADOW;
|
||||||
|
|
||||||
|
@ -323,9 +345,11 @@ int32 CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
v->engine_type = p1;
|
v->engine_type = p1;
|
||||||
|
|
||||||
v->subtype = (avi->subtype & AIR_CTOL ? AIR_AIRCRAFT : AIR_HELICOPTER);
|
v->subtype = (avi->subtype & AIR_CTOL ? AIR_AIRCRAFT : AIR_HELICOPTER);
|
||||||
|
v->UpdateDeltaXY(INVALID_DIR);
|
||||||
v->value = value;
|
v->value = value;
|
||||||
|
|
||||||
u->subtype = AIR_SHADOW;
|
u->subtype = AIR_SHADOW;
|
||||||
|
u->UpdateDeltaXY(INVALID_DIR);
|
||||||
|
|
||||||
/* Danger, Will Robinson!
|
/* Danger, Will Robinson!
|
||||||
* If the aircraft is refittable, but cannot be refitted to
|
* If the aircraft is refittable, but cannot be refitted to
|
||||||
|
@ -411,9 +435,6 @@ int32 CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
w->x_pos = v->x_pos;
|
w->x_pos = v->x_pos;
|
||||||
w->y_pos = v->y_pos;
|
w->y_pos = v->y_pos;
|
||||||
w->z_pos = v->z_pos + 5;
|
w->z_pos = v->z_pos + 5;
|
||||||
w->x_offs = w->y_offs = -1;
|
|
||||||
w->sprite_width = w->sprite_height = 2;
|
|
||||||
w->z_height = 1;
|
|
||||||
w->vehstatus = VS_HIDDEN | VS_UNCLICKABLE;
|
w->vehstatus = VS_HIDDEN | VS_UNCLICKABLE;
|
||||||
w->spritenum = 0xFF;
|
w->spritenum = 0xFF;
|
||||||
w->subtype = AIR_ROTOR;
|
w->subtype = AIR_ROTOR;
|
||||||
|
@ -421,6 +442,7 @@ int32 CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
w->random_bits = VehicleRandomBits();
|
w->random_bits = VehicleRandomBits();
|
||||||
/* Use rotor's air.state to store the rotor animation frame */
|
/* Use rotor's air.state to store the rotor animation frame */
|
||||||
w->u.air.state = HRS_ROTOR_STOPPED;
|
w->u.air.state = HRS_ROTOR_STOPPED;
|
||||||
|
w->UpdateDeltaXY(INVALID_DIR);
|
||||||
VehiclePositionChanged(w);
|
VehiclePositionChanged(w);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1510,14 +1532,10 @@ static void AircraftEntersTerminal(Vehicle *v)
|
||||||
v->BeginLoading();
|
v->BeginLoading();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AircraftLand(Vehicle *v)
|
|
||||||
{
|
|
||||||
v->sprite_width = v->sprite_height = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void AircraftLandAirplane(Vehicle *v)
|
static void AircraftLandAirplane(Vehicle *v)
|
||||||
{
|
{
|
||||||
AircraftLand(v);
|
v->UpdateDeltaXY(INVALID_DIR);
|
||||||
|
|
||||||
if (!PlayVehicleSound(v, VSE_TOUCHDOWN)) {
|
if (!PlayVehicleSound(v, VSE_TOUCHDOWN)) {
|
||||||
SndPlayVehicleFx(SND_17_SKID_PLANE, v);
|
SndPlayVehicleFx(SND_17_SKID_PLANE, v);
|
||||||
}
|
}
|
||||||
|
@ -1676,8 +1694,8 @@ static void AircraftEventHandler_TakeOff(Vehicle *v, const AirportFTAClass *apc)
|
||||||
|
|
||||||
static void AircraftEventHandler_StartTakeOff(Vehicle *v, const AirportFTAClass *apc)
|
static void AircraftEventHandler_StartTakeOff(Vehicle *v, const AirportFTAClass *apc)
|
||||||
{
|
{
|
||||||
v->sprite_width = v->sprite_height = 24; // ??? no idea what this is
|
|
||||||
v->u.air.state = ENDTAKEOFF;
|
v->u.air.state = ENDTAKEOFF;
|
||||||
|
v->UpdateDeltaXY(INVALID_DIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AircraftEventHandler_EndTakeOff(Vehicle *v, const AirportFTAClass *apc)
|
static void AircraftEventHandler_EndTakeOff(Vehicle *v, const AirportFTAClass *apc)
|
||||||
|
@ -1690,8 +1708,9 @@ static void AircraftEventHandler_EndTakeOff(Vehicle *v, const AirportFTAClass *a
|
||||||
static void AircraftEventHandler_HeliTakeOff(Vehicle *v, const AirportFTAClass *apc)
|
static void AircraftEventHandler_HeliTakeOff(Vehicle *v, const AirportFTAClass *apc)
|
||||||
{
|
{
|
||||||
const Player* p = GetPlayer(v->owner);
|
const Player* p = GetPlayer(v->owner);
|
||||||
v->sprite_width = v->sprite_height = 24; // ??? no idea what this is
|
|
||||||
v->u.air.state = FLYING;
|
v->u.air.state = FLYING;
|
||||||
|
v->UpdateDeltaXY(INVALID_DIR);
|
||||||
|
|
||||||
/* get the next position to go to, differs per airport */
|
/* get the next position to go to, differs per airport */
|
||||||
AircraftNextAirportPos_and_Order(v);
|
AircraftNextAirportPos_and_Order(v);
|
||||||
|
|
||||||
|
@ -1749,8 +1768,9 @@ static void AircraftEventHandler_Flying(Vehicle *v, const AirportFTAClass *apc)
|
||||||
|
|
||||||
static void AircraftEventHandler_Landing(Vehicle *v, const AirportFTAClass *apc)
|
static void AircraftEventHandler_Landing(Vehicle *v, const AirportFTAClass *apc)
|
||||||
{
|
{
|
||||||
AircraftLandAirplane(v); // maybe crash airplane
|
|
||||||
v->u.air.state = ENDLANDING;
|
v->u.air.state = ENDLANDING;
|
||||||
|
AircraftLandAirplane(v); // maybe crash airplane
|
||||||
|
|
||||||
/* check if the aircraft needs to be replaced or renewed and send it to a hangar if needed */
|
/* check if the aircraft needs to be replaced or renewed and send it to a hangar if needed */
|
||||||
if (v->current_order.type != OT_GOTO_DEPOT && v->owner == _local_player) {
|
if (v->current_order.type != OT_GOTO_DEPOT && v->owner == _local_player) {
|
||||||
/* only the vehicle owner needs to calculate the rest (locally) */
|
/* only the vehicle owner needs to calculate the rest (locally) */
|
||||||
|
@ -1767,8 +1787,8 @@ static void AircraftEventHandler_Landing(Vehicle *v, const AirportFTAClass *apc)
|
||||||
|
|
||||||
static void AircraftEventHandler_HeliLanding(Vehicle *v, const AirportFTAClass *apc)
|
static void AircraftEventHandler_HeliLanding(Vehicle *v, const AirportFTAClass *apc)
|
||||||
{
|
{
|
||||||
AircraftLand(v); // helicopters don't crash
|
|
||||||
v->u.air.state = HELIENDLANDING;
|
v->u.air.state = HELIENDLANDING;
|
||||||
|
v->UpdateDeltaXY(INVALID_DIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AircraftEventHandler_EndLanding(Vehicle *v, const AirportFTAClass *apc)
|
static void AircraftEventHandler_EndLanding(Vehicle *v, const AirportFTAClass *apc)
|
||||||
|
|
|
@ -116,7 +116,6 @@ static void DisasterVehicleUpdateImage(Vehicle *v)
|
||||||
v->cur_image = img;
|
v->cur_image = img;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/** Initialize a disaster vehicle. These vehicles are of type VEH_DISASTER, are unclickable
|
/** Initialize a disaster vehicle. These vehicles are of type VEH_DISASTER, are unclickable
|
||||||
* and owned by nobody */
|
* and owned by nobody */
|
||||||
static void InitializeDisasterVehicle(Vehicle *v, int x, int y, byte z, Direction direction, byte subtype)
|
static void InitializeDisasterVehicle(Vehicle *v, int x, int y, byte z, Direction direction, byte subtype)
|
||||||
|
@ -128,11 +127,7 @@ static void InitializeDisasterVehicle(Vehicle *v, int x, int y, byte z, Directio
|
||||||
v->tile = TileVirtXY(x, y);
|
v->tile = TileVirtXY(x, y);
|
||||||
v->direction = direction;
|
v->direction = direction;
|
||||||
v->subtype = subtype;
|
v->subtype = subtype;
|
||||||
v->x_offs = -1;
|
v->UpdateDeltaXY(INVALID_DIR);
|
||||||
v->y_offs = -1;
|
|
||||||
v->sprite_width = 2;
|
|
||||||
v->sprite_height = 2;
|
|
||||||
v->z_height = 5;
|
|
||||||
v->owner = OWNER_NONE;
|
v->owner = OWNER_NONE;
|
||||||
v->vehstatus = VS_UNCLICKABLE;
|
v->vehstatus = VS_UNCLICKABLE;
|
||||||
v->u.disaster.image_override = 0;
|
v->u.disaster.image_override = 0;
|
||||||
|
@ -1065,3 +1060,12 @@ void StartupDisasters()
|
||||||
{
|
{
|
||||||
ResetDisasterDelay();
|
ResetDisasterDelay();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DisasterVehicle::UpdateDeltaXY(Direction direction)
|
||||||
|
{
|
||||||
|
this->x_offs = -1;
|
||||||
|
this->y_offs = -1;
|
||||||
|
this->sprite_width = 2;
|
||||||
|
this->sprite_height = 2;
|
||||||
|
this->z_height = 5;
|
||||||
|
}
|
||||||
|
|
|
@ -1109,7 +1109,7 @@ static const SaveLoad _player_desc[] = {
|
||||||
|
|
||||||
SLE_VAR(Player, player_color, SLE_UINT8),
|
SLE_VAR(Player, player_color, SLE_UINT8),
|
||||||
SLE_VAR(Player, player_money_fraction, SLE_UINT8),
|
SLE_VAR(Player, player_money_fraction, SLE_UINT8),
|
||||||
SLE_VAR(Player, avail_railtypes, SLE_UINT8),
|
SLE_CONDVAR(Player, avail_railtypes, SLE_UINT8, 0, 57),
|
||||||
SLE_VAR(Player, block_preview, SLE_UINT8),
|
SLE_VAR(Player, block_preview, SLE_UINT8),
|
||||||
|
|
||||||
SLE_VAR(Player, cargo_types, SLE_UINT16),
|
SLE_VAR(Player, cargo_types, SLE_UINT16),
|
||||||
|
|
|
@ -40,6 +40,7 @@ struct RoadVehicle : public Vehicle {
|
||||||
|
|
||||||
const char *GetTypeString() { return "road vehicle"; }
|
const char *GetTypeString() { return "road vehicle"; }
|
||||||
void MarkDirty();
|
void MarkDirty();
|
||||||
|
void UpdateDeltaXY(Direction direction);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* ROADVEH_H */
|
#endif /* ROADVEH_H */
|
||||||
|
|
|
@ -169,7 +169,6 @@ int32 CmdBuildRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
v->x_pos = x;
|
v->x_pos = x;
|
||||||
v->y_pos = y;
|
v->y_pos = y;
|
||||||
v->z_pos = GetSlopeZ(x, y);
|
v->z_pos = GetSlopeZ(x, y);
|
||||||
v->z_height = 6;
|
|
||||||
|
|
||||||
v->u.road.state = RVSB_IN_DEPOT;
|
v->u.road.state = RVSB_IN_DEPOT;
|
||||||
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
||||||
|
@ -492,9 +491,9 @@ void RoadVehicle::MarkDirty()
|
||||||
MarkAllViewportsDirty(this->left_coord, this->top_coord, this->right_coord + 1, this->bottom_coord + 1);
|
MarkAllViewportsDirty(this->left_coord, this->top_coord, this->right_coord + 1, this->bottom_coord + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void UpdateRoadVehDeltaXY(Vehicle *v)
|
void RoadVehicle::UpdateDeltaXY(Direction direction)
|
||||||
{
|
{
|
||||||
#define MKIT(a,b,c,d) ((a&0xFF)<<24) | ((b&0xFF)<<16) | ((c&0xFF)<<8) | ((d&0xFF)<<0)
|
#define MKIT(a, b, c, d) ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((c & 0xFF) << 8) | ((d & 0xFF) << 0)
|
||||||
static const uint32 _delta_xy_table[8] = {
|
static const uint32 _delta_xy_table[8] = {
|
||||||
MKIT(3, 3, -1, -1),
|
MKIT(3, 3, -1, -1),
|
||||||
MKIT(3, 7, -1, -3),
|
MKIT(3, 7, -1, -3),
|
||||||
|
@ -506,11 +505,13 @@ static void UpdateRoadVehDeltaXY(Vehicle *v)
|
||||||
MKIT(7, 3, -3, -1),
|
MKIT(7, 3, -3, -1),
|
||||||
};
|
};
|
||||||
#undef MKIT
|
#undef MKIT
|
||||||
uint32 x = _delta_xy_table[v->direction];
|
|
||||||
v->x_offs = GB(x, 0, 8);
|
uint32 x = _delta_xy_table[direction];
|
||||||
v->y_offs = GB(x, 8, 8);
|
this->x_offs = GB(x, 0, 8);
|
||||||
v->sprite_width = GB(x, 16, 8);
|
this->y_offs = GB(x, 8, 8);
|
||||||
v->sprite_height = GB(x, 24, 8);
|
this->sprite_width = GB(x, 16, 8);
|
||||||
|
this->sprite_height = GB(x, 24, 8);
|
||||||
|
this->z_height = 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ClearCrashedStation(Vehicle *v)
|
static void ClearCrashedStation(Vehicle *v)
|
||||||
|
@ -566,7 +567,7 @@ static void RoadVehSetRandomDirection(Vehicle *v)
|
||||||
|
|
||||||
v->direction = ChangeDir(v->direction, delta[r & 3]);
|
v->direction = ChangeDir(v->direction, delta[r & 3]);
|
||||||
BeginVehicleMove(v);
|
BeginVehicleMove(v);
|
||||||
UpdateRoadVehDeltaXY(v);
|
v->UpdateDeltaXY(v->direction);
|
||||||
v->cur_image = GetRoadVehImage(v, v->direction);
|
v->cur_image = GetRoadVehImage(v, v->direction);
|
||||||
SetRoadVehPosition(v, v->x_pos, v->y_pos);
|
SetRoadVehPosition(v, v->x_pos, v->y_pos);
|
||||||
}
|
}
|
||||||
|
@ -1345,7 +1346,7 @@ static void RoadVehController(Vehicle *v)
|
||||||
v->u.road.frame = RVC_DEPOT_START_FRAME;
|
v->u.road.frame = RVC_DEPOT_START_FRAME;
|
||||||
|
|
||||||
v->cur_image = GetRoadVehImage(v, v->direction);
|
v->cur_image = GetRoadVehImage(v, v->direction);
|
||||||
UpdateRoadVehDeltaXY(v);
|
v->UpdateDeltaXY(v->direction);
|
||||||
SetRoadVehPosition(v,x,y);
|
SetRoadVehPosition(v,x,y);
|
||||||
|
|
||||||
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
|
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
|
||||||
|
@ -1381,7 +1382,7 @@ static void RoadVehController(Vehicle *v)
|
||||||
if ((IsTunnelTile(gp.new_tile) || IsBridgeTile(gp.new_tile)) && HASBIT(VehicleEnterTile(v, gp.new_tile, gp.x, gp.y), VETS_ENTERED_WORMHOLE)) {
|
if ((IsTunnelTile(gp.new_tile) || IsBridgeTile(gp.new_tile)) && HASBIT(VehicleEnterTile(v, gp.new_tile, gp.x, gp.y), VETS_ENTERED_WORMHOLE)) {
|
||||||
/* Vehicle has just entered a bridge or tunnel */
|
/* Vehicle has just entered a bridge or tunnel */
|
||||||
v->cur_image = GetRoadVehImage(v, v->direction);
|
v->cur_image = GetRoadVehImage(v, v->direction);
|
||||||
UpdateRoadVehDeltaXY(v);
|
v->UpdateDeltaXY(v->direction);
|
||||||
SetRoadVehPosition(v,gp.x,gp.y);
|
SetRoadVehPosition(v,gp.x,gp.y);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1469,7 +1470,7 @@ again:
|
||||||
}
|
}
|
||||||
|
|
||||||
v->cur_image = GetRoadVehImage(v, newdir);
|
v->cur_image = GetRoadVehImage(v, newdir);
|
||||||
UpdateRoadVehDeltaXY(v);
|
v->UpdateDeltaXY(v->direction);
|
||||||
RoadZPosAffectSpeed(v, SetRoadVehPosition(v, x, y));
|
RoadZPosAffectSpeed(v, SetRoadVehPosition(v, x, y));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1509,7 +1510,7 @@ again:
|
||||||
}
|
}
|
||||||
|
|
||||||
v->cur_image = GetRoadVehImage(v, newdir);
|
v->cur_image = GetRoadVehImage(v, newdir);
|
||||||
UpdateRoadVehDeltaXY(v);
|
v->UpdateDeltaXY(v->direction);
|
||||||
RoadZPosAffectSpeed(v, SetRoadVehPosition(v, x, y));
|
RoadZPosAffectSpeed(v, SetRoadVehPosition(v, x, y));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1539,7 +1540,7 @@ again:
|
||||||
if (old_dir != v->u.road.state) {
|
if (old_dir != v->u.road.state) {
|
||||||
/* The vehicle is in a road stop */
|
/* The vehicle is in a road stop */
|
||||||
v->cur_image = GetRoadVehImage(v, new_dir);
|
v->cur_image = GetRoadVehImage(v, new_dir);
|
||||||
UpdateRoadVehDeltaXY(v);
|
v->UpdateDeltaXY(v->direction);
|
||||||
SetRoadVehPosition(v, v->x_pos, v->y_pos);
|
SetRoadVehPosition(v, v->x_pos, v->y_pos);
|
||||||
/* Note, return here means that the frame counter is not incremented
|
/* Note, return here means that the frame counter is not incremented
|
||||||
* for vehicles changing direction in a road stop. This causes frames to
|
* for vehicles changing direction in a road stop. This causes frames to
|
||||||
|
@ -1659,7 +1660,7 @@ again:
|
||||||
if (!HASBIT(r, VETS_ENTERED_WORMHOLE)) v->u.road.frame++;
|
if (!HASBIT(r, VETS_ENTERED_WORMHOLE)) v->u.road.frame++;
|
||||||
|
|
||||||
v->cur_image = GetRoadVehImage(v, v->direction);
|
v->cur_image = GetRoadVehImage(v, v->direction);
|
||||||
UpdateRoadVehDeltaXY(v);
|
v->UpdateDeltaXY(v->direction);
|
||||||
RoadZPosAffectSpeed(v, SetRoadVehPosition(v, x, y));
|
RoadZPosAffectSpeed(v, SetRoadVehPosition(v, x, y));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,7 @@ struct Ship: public Vehicle {
|
||||||
|
|
||||||
const char *GetTypeString() { return "ship"; }
|
const char *GetTypeString() { return "ship"; }
|
||||||
void MarkDirty();
|
void MarkDirty();
|
||||||
|
void UpdateDeltaXY(Direction direction);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* SHIP_H */
|
#endif /* SHIP_H */
|
||||||
|
|
|
@ -334,30 +334,32 @@ static void HandleShipLoading(Vehicle *v)
|
||||||
InvalidateVehicleOrder(v);
|
InvalidateVehicleOrder(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void UpdateShipDeltaXY(Vehicle *v, int dir)
|
void Ship::UpdateDeltaXY(Direction direction)
|
||||||
{
|
{
|
||||||
#define MKIT(d,c,b,a) ((a&0xFF)<<24) | ((b&0xFF)<<16) | ((c&0xFF)<<8) | ((d&0xFF)<<0)
|
#define MKIT(a, b, c, d) ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((c & 0xFF) << 8) | ((d & 0xFF) << 0)
|
||||||
static const uint32 _delta_xy_table[8] = {
|
static const uint32 _delta_xy_table[8] = {
|
||||||
MKIT( -3, -3, 6, 6),
|
MKIT( 6, 6, -3, -3),
|
||||||
MKIT(-16, -3, 32, 6),
|
MKIT( 6, 32, -3, -16),
|
||||||
MKIT( -3, -3, 6, 6),
|
MKIT( 6, 6, -3, -3),
|
||||||
MKIT( -3, -16, 6, 32),
|
MKIT(32, 6, -16, -3),
|
||||||
MKIT( -3, -3, 6, 6),
|
MKIT( 6, 6, -3, -3),
|
||||||
MKIT(-16, -3, 32, 6),
|
MKIT( 6, 32, -3, -16),
|
||||||
MKIT( -3, -3, 6, 6),
|
MKIT( 6, 6, -3, -3),
|
||||||
MKIT( -3, -16, 6, 32),
|
MKIT(32, 6, -16, -3),
|
||||||
};
|
};
|
||||||
#undef MKIT
|
#undef MKIT
|
||||||
uint32 x = _delta_xy_table[dir];
|
|
||||||
v->x_offs = GB(x, 0, 8);
|
uint32 x = _delta_xy_table[direction];
|
||||||
v->y_offs = GB(x, 8, 8);
|
this->x_offs = GB(x, 0, 8);
|
||||||
v->sprite_width = GB(x, 16, 8);
|
this->y_offs = GB(x, 8, 8);
|
||||||
v->sprite_height = GB(x, 24, 8);
|
this->sprite_width = GB(x, 16, 8);
|
||||||
|
this->sprite_height = GB(x, 24, 8);
|
||||||
|
this->z_height = 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RecalcShipStuff(Vehicle *v)
|
void RecalcShipStuff(Vehicle *v)
|
||||||
{
|
{
|
||||||
UpdateShipDeltaXY(v, v->direction);
|
v->UpdateDeltaXY(v->direction);
|
||||||
v->cur_image = GetShipImage(v, v->direction);
|
v->cur_image = GetShipImage(v, v->direction);
|
||||||
v->MarkDirty();
|
v->MarkDirty();
|
||||||
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
|
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
|
||||||
|
@ -788,7 +790,7 @@ static void ShipController(Vehicle *v)
|
||||||
v->z_pos = GetSlopeZ(gp.x, gp.y);
|
v->z_pos = GetSlopeZ(gp.x, gp.y);
|
||||||
|
|
||||||
getout:
|
getout:
|
||||||
UpdateShipDeltaXY(v, dir);
|
v->UpdateDeltaXY(dir);
|
||||||
v->cur_image = GetShipImage(v, dir);
|
v->cur_image = GetShipImage(v, dir);
|
||||||
VehiclePositionChanged(v);
|
VehiclePositionChanged(v);
|
||||||
EndVehicleMove(v);
|
EndVehicleMove(v);
|
||||||
|
@ -873,11 +875,7 @@ int32 CmdBuildShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
v->y_pos = y;
|
v->y_pos = y;
|
||||||
v->z_pos = GetSlopeZ(x, y);
|
v->z_pos = GetSlopeZ(x, y);
|
||||||
|
|
||||||
v->z_height = 6;
|
v->UpdateDeltaXY(v->direction);
|
||||||
v->sprite_width = 6;
|
|
||||||
v->sprite_height = 6;
|
|
||||||
v->x_offs = -3;
|
|
||||||
v->y_offs = -3;
|
|
||||||
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
||||||
|
|
||||||
v->spritenum = svi->image_index;
|
v->spritenum = svi->image_index;
|
||||||
|
|
|
@ -245,6 +245,7 @@ struct Train : public Vehicle {
|
||||||
|
|
||||||
const char *GetTypeString() { return "train"; }
|
const char *GetTypeString() { return "train"; }
|
||||||
void MarkDirty();
|
void MarkDirty();
|
||||||
|
void UpdateDeltaXY(Direction direction);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* TRAIN_H */
|
#endif /* TRAIN_H */
|
||||||
|
|
|
@ -535,7 +535,6 @@ static void AddArticulatedParts(Vehicle **vl)
|
||||||
u->x_pos = v->x_pos;
|
u->x_pos = v->x_pos;
|
||||||
u->y_pos = v->y_pos;
|
u->y_pos = v->y_pos;
|
||||||
u->z_pos = v->z_pos;
|
u->z_pos = v->z_pos;
|
||||||
u->z_height = v->z_height;
|
|
||||||
u->u.rail.track = v->u.rail.track;
|
u->u.rail.track = v->u.rail.track;
|
||||||
u->u.rail.railtype = v->u.rail.railtype;
|
u->u.rail.railtype = v->u.rail.railtype;
|
||||||
u->build_year = v->build_year;
|
u->build_year = v->build_year;
|
||||||
|
@ -608,7 +607,6 @@ static int32 CmdBuildRailWagon(EngineID engine, TileIndex tile, uint32 flags)
|
||||||
v->y_pos = y;
|
v->y_pos = y;
|
||||||
v->z_pos = GetSlopeZ(x, y);
|
v->z_pos = GetSlopeZ(x, y);
|
||||||
v->owner = _current_player;
|
v->owner = _current_player;
|
||||||
v->z_height = 6;
|
|
||||||
v->u.rail.track = TRACK_BIT_DEPOT;
|
v->u.rail.track = TRACK_BIT_DEPOT;
|
||||||
v->vehstatus = VS_HIDDEN | VS_DEFPAL;
|
v->vehstatus = VS_HIDDEN | VS_DEFPAL;
|
||||||
|
|
||||||
|
@ -681,7 +679,6 @@ static void AddRearEngineToMultiheadedTrain(Vehicle* v, Vehicle* u, bool buildin
|
||||||
u->x_pos = v->x_pos;
|
u->x_pos = v->x_pos;
|
||||||
u->y_pos = v->y_pos;
|
u->y_pos = v->y_pos;
|
||||||
u->z_pos = v->z_pos;
|
u->z_pos = v->z_pos;
|
||||||
u->z_height = 6;
|
|
||||||
u->u.rail.track = TRACK_BIT_DEPOT;
|
u->u.rail.track = TRACK_BIT_DEPOT;
|
||||||
u->vehstatus = v->vehstatus & ~VS_STOPPED;
|
u->vehstatus = v->vehstatus & ~VS_STOPPED;
|
||||||
u->subtype = 0;
|
u->subtype = 0;
|
||||||
|
@ -763,7 +760,6 @@ int32 CmdBuildRailVehicle(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
v->x_pos = x;
|
v->x_pos = x;
|
||||||
v->y_pos = y;
|
v->y_pos = y;
|
||||||
v->z_pos = GetSlopeZ(x, y);
|
v->z_pos = GetSlopeZ(x, y);
|
||||||
v->z_height = 6;
|
|
||||||
v->u.rail.track = TRACK_BIT_DEPOT;
|
v->u.rail.track = TRACK_BIT_DEPOT;
|
||||||
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
v->vehstatus = VS_HIDDEN | VS_STOPPED | VS_DEFPAL;
|
||||||
v->spritenum = rvi->image_index;
|
v->spritenum = rvi->image_index;
|
||||||
|
@ -1463,9 +1459,9 @@ int32 CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
return cost;
|
return cost;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void UpdateTrainDeltaXY(Vehicle *v, Direction direction)
|
void Train::UpdateDeltaXY(Direction direction)
|
||||||
{
|
{
|
||||||
#define MKIT(a,b,c,d) ((a&0xFF)<<24) | ((b&0xFF)<<16) | ((c&0xFF)<<8) | ((d&0xFF)<<0)
|
#define MKIT(a, b, c, d) ((a & 0xFF) << 24) | ((b & 0xFF) << 16) | ((c & 0xFF) << 8) | ((d & 0xFF) << 0)
|
||||||
static const uint32 _delta_xy_table[8] = {
|
static const uint32 _delta_xy_table[8] = {
|
||||||
MKIT(3, 3, -1, -1),
|
MKIT(3, 3, -1, -1),
|
||||||
MKIT(3, 7, -1, -3),
|
MKIT(3, 7, -1, -3),
|
||||||
|
@ -1479,16 +1475,16 @@ static void UpdateTrainDeltaXY(Vehicle *v, Direction direction)
|
||||||
#undef MKIT
|
#undef MKIT
|
||||||
|
|
||||||
uint32 x = _delta_xy_table[direction];
|
uint32 x = _delta_xy_table[direction];
|
||||||
|
this->x_offs = GB(x, 0, 8);
|
||||||
v->x_offs = GB(x, 0, 8);
|
this->y_offs = GB(x, 8, 8);
|
||||||
v->y_offs = GB(x, 8, 8);
|
this->sprite_width = GB(x, 16, 8);
|
||||||
v->sprite_width = GB(x, 16, 8);
|
this->sprite_height = GB(x, 24, 8);
|
||||||
v->sprite_height = GB(x, 24, 8);
|
this->z_height = 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void UpdateVarsAfterSwap(Vehicle *v)
|
static void UpdateVarsAfterSwap(Vehicle *v)
|
||||||
{
|
{
|
||||||
UpdateTrainDeltaXY(v, v->direction);
|
v->UpdateDeltaXY(v->direction);
|
||||||
v->cur_image = GetTrainImage(v, v->direction);
|
v->cur_image = GetTrainImage(v, v->direction);
|
||||||
BeginVehicleMove(v);
|
BeginVehicleMove(v);
|
||||||
VehiclePositionChanged(v);
|
VehiclePositionChanged(v);
|
||||||
|
@ -2149,7 +2145,7 @@ static bool CheckTrainStayInDepot(Vehicle *v)
|
||||||
v->vehstatus &= ~VS_HIDDEN;
|
v->vehstatus &= ~VS_HIDDEN;
|
||||||
v->cur_speed = 0;
|
v->cur_speed = 0;
|
||||||
|
|
||||||
UpdateTrainDeltaXY(v, v->direction);
|
v->UpdateDeltaXY(v->direction);
|
||||||
v->cur_image = GetTrainImage(v, v->direction);
|
v->cur_image = GetTrainImage(v, v->direction);
|
||||||
VehiclePositionChanged(v);
|
VehiclePositionChanged(v);
|
||||||
UpdateSignalsOnSegment(v->tile, DirToDiagDir(v->direction));
|
UpdateSignalsOnSegment(v->tile, DirToDiagDir(v->direction));
|
||||||
|
@ -3061,7 +3057,7 @@ static void TrainController(Vehicle *v, bool update_image)
|
||||||
|
|
||||||
/* update image of train, as well as delta XY */
|
/* update image of train, as well as delta XY */
|
||||||
Direction newdir = GetNewVehicleDirection(v, gp.x, gp.y);
|
Direction newdir = GetNewVehicleDirection(v, gp.x, gp.y);
|
||||||
UpdateTrainDeltaXY(v, newdir);
|
v->UpdateDeltaXY(newdir);
|
||||||
if (update_image) v->cur_image = GetTrainImage(v, newdir);
|
if (update_image) v->cur_image = GetTrainImage(v, newdir);
|
||||||
|
|
||||||
v->x_pos = gp.x;
|
v->x_pos = gp.x;
|
||||||
|
@ -3157,7 +3153,7 @@ static void ChangeTrainDirRandomly(Vehicle *v)
|
||||||
if (!(v->vehstatus & VS_HIDDEN)) {
|
if (!(v->vehstatus & VS_HIDDEN)) {
|
||||||
v->direction = ChangeDir(v->direction, delta[GB(Random(), 0, 2)]);
|
v->direction = ChangeDir(v->direction, delta[GB(Random(), 0, 2)]);
|
||||||
BeginVehicleMove(v);
|
BeginVehicleMove(v);
|
||||||
UpdateTrainDeltaXY(v, v->direction);
|
v->UpdateDeltaXY(v->direction);
|
||||||
v->cur_image = GetTrainImage(v, v->direction);
|
v->cur_image = GetTrainImage(v, v->direction);
|
||||||
/* Refrain from updating the z position of the vehicle when on
|
/* Refrain from updating the z position of the vehicle when on
|
||||||
a bridge, because AfterSetTrainPos will put the vehicle under
|
a bridge, because AfterSetTrainPos will put the vehicle under
|
||||||
|
|
|
@ -224,6 +224,8 @@ void AfterLoadVehicles()
|
||||||
Vehicle *v;
|
Vehicle *v;
|
||||||
|
|
||||||
FOR_ALL_VEHICLES(v) {
|
FOR_ALL_VEHICLES(v) {
|
||||||
|
v->UpdateDeltaXY(v->direction);
|
||||||
|
|
||||||
v->first = NULL;
|
v->first = NULL;
|
||||||
if (v->type == VEH_TRAIN) v->u.rail.first_engine = INVALID_ENGINE;
|
if (v->type == VEH_TRAIN) v->u.rail.first_engine = INVALID_ENGINE;
|
||||||
}
|
}
|
||||||
|
@ -1443,9 +1445,8 @@ Vehicle *CreateEffectVehicle(int x, int y, int z, EffectVehicle type)
|
||||||
v->x_pos = x;
|
v->x_pos = x;
|
||||||
v->y_pos = y;
|
v->y_pos = y;
|
||||||
v->z_pos = z;
|
v->z_pos = z;
|
||||||
v->z_height = v->sprite_width = v->sprite_height = 1;
|
|
||||||
v->x_offs = v->y_offs = 0;
|
|
||||||
v->tile = 0;
|
v->tile = 0;
|
||||||
|
v->UpdateDeltaXY(INVALID_DIR);
|
||||||
v->vehstatus = VS_UNCLICKABLE;
|
v->vehstatus = VS_UNCLICKABLE;
|
||||||
|
|
||||||
_effect_init_procs[type](v);
|
_effect_init_procs[type](v);
|
||||||
|
@ -2644,13 +2645,13 @@ extern const SaveLoad _common_veh_desc[] = {
|
||||||
SLE_VAR(Vehicle, z_pos, SLE_UINT8),
|
SLE_VAR(Vehicle, z_pos, SLE_UINT8),
|
||||||
SLE_VAR(Vehicle, direction, SLE_UINT8),
|
SLE_VAR(Vehicle, direction, SLE_UINT8),
|
||||||
|
|
||||||
SLE_VAR(Vehicle, cur_image, SLE_UINT16),
|
SLE_CONDVAR(Vehicle, cur_image, SLE_UINT16, 0, 57),
|
||||||
SLE_VAR(Vehicle, spritenum, SLE_UINT8),
|
SLE_VAR(Vehicle, spritenum, SLE_UINT8),
|
||||||
SLE_VAR(Vehicle, sprite_width, SLE_UINT8),
|
SLE_CONDVAR(Vehicle, sprite_width, SLE_UINT8, 0, 57),
|
||||||
SLE_VAR(Vehicle, sprite_height, SLE_UINT8),
|
SLE_CONDVAR(Vehicle, sprite_height, SLE_UINT8, 0, 57),
|
||||||
SLE_VAR(Vehicle, z_height, SLE_UINT8),
|
SLE_CONDVAR(Vehicle, z_height, SLE_UINT8, 0, 57),
|
||||||
SLE_VAR(Vehicle, x_offs, SLE_INT8),
|
SLE_CONDVAR(Vehicle, x_offs, SLE_INT8, 0, 57),
|
||||||
SLE_VAR(Vehicle, y_offs, SLE_INT8),
|
SLE_CONDVAR(Vehicle, y_offs, SLE_INT8, 0, 57),
|
||||||
SLE_VAR(Vehicle, engine_type, SLE_UINT16),
|
SLE_VAR(Vehicle, engine_type, SLE_UINT16),
|
||||||
|
|
||||||
SLE_VAR(Vehicle, max_speed, SLE_UINT16),
|
SLE_VAR(Vehicle, max_speed, SLE_UINT16),
|
||||||
|
@ -2818,11 +2819,11 @@ static const SaveLoad _special_desc[] = {
|
||||||
SLE_VAR(Vehicle, z_pos, SLE_UINT8),
|
SLE_VAR(Vehicle, z_pos, SLE_UINT8),
|
||||||
|
|
||||||
SLE_VAR(Vehicle, cur_image, SLE_UINT16),
|
SLE_VAR(Vehicle, cur_image, SLE_UINT16),
|
||||||
SLE_VAR(Vehicle, sprite_width, SLE_UINT8),
|
SLE_CONDVAR(Vehicle, sprite_width, SLE_UINT8, 0, 57),
|
||||||
SLE_VAR(Vehicle, sprite_height, SLE_UINT8),
|
SLE_CONDVAR(Vehicle, sprite_height, SLE_UINT8, 0, 57),
|
||||||
SLE_VAR(Vehicle, z_height, SLE_UINT8),
|
SLE_CONDVAR(Vehicle, z_height, SLE_UINT8, 0, 57),
|
||||||
SLE_VAR(Vehicle, x_offs, SLE_INT8),
|
SLE_CONDVAR(Vehicle, x_offs, SLE_INT8, 0, 57),
|
||||||
SLE_VAR(Vehicle, y_offs, SLE_INT8),
|
SLE_CONDVAR(Vehicle, y_offs, SLE_INT8, 0, 57),
|
||||||
SLE_VAR(Vehicle, progress, SLE_UINT8),
|
SLE_VAR(Vehicle, progress, SLE_UINT8),
|
||||||
SLE_VAR(Vehicle, vehstatus, SLE_UINT8),
|
SLE_VAR(Vehicle, vehstatus, SLE_UINT8),
|
||||||
|
|
||||||
|
@ -2853,11 +2854,11 @@ static const SaveLoad _disaster_desc[] = {
|
||||||
SLE_VAR(Vehicle, z_pos, SLE_UINT8),
|
SLE_VAR(Vehicle, z_pos, SLE_UINT8),
|
||||||
SLE_VAR(Vehicle, direction, SLE_UINT8),
|
SLE_VAR(Vehicle, direction, SLE_UINT8),
|
||||||
|
|
||||||
SLE_VAR(Vehicle, x_offs, SLE_INT8),
|
SLE_CONDVAR(Vehicle, x_offs, SLE_INT8, 0, 57),
|
||||||
SLE_VAR(Vehicle, y_offs, SLE_INT8),
|
SLE_CONDVAR(Vehicle, y_offs, SLE_INT8, 0, 57),
|
||||||
SLE_VAR(Vehicle, sprite_width, SLE_UINT8),
|
SLE_CONDVAR(Vehicle, sprite_width, SLE_UINT8, 0, 57),
|
||||||
SLE_VAR(Vehicle, sprite_height, SLE_UINT8),
|
SLE_CONDVAR(Vehicle, sprite_height, SLE_UINT8, 0, 57),
|
||||||
SLE_VAR(Vehicle, z_height, SLE_UINT8),
|
SLE_CONDVAR(Vehicle, z_height, SLE_UINT8, 0, 57),
|
||||||
SLE_VAR(Vehicle, owner, SLE_UINT8),
|
SLE_VAR(Vehicle, owner, SLE_UINT8),
|
||||||
SLE_VAR(Vehicle, vehstatus, SLE_UINT8),
|
SLE_VAR(Vehicle, vehstatus, SLE_UINT8),
|
||||||
SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, dest), SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
|
SLE_CONDVARX(cpp_offsetof(Vehicle, current_order) + cpp_offsetof(Order, dest), SLE_FILE_U8 | SLE_VAR_U16, 0, 4),
|
||||||
|
@ -3000,3 +3001,13 @@ void Vehicle::LeaveStation()
|
||||||
current_order.flags = 0;
|
current_order.flags = 0;
|
||||||
GetStation(this->last_station_visited)->loading_vehicles.remove(this);
|
GetStation(this->last_station_visited)->loading_vehicles.remove(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SpecialVehicle::UpdateDeltaXY(Direction direction)
|
||||||
|
{
|
||||||
|
this->x_offs = 0;
|
||||||
|
this->y_offs = 0;
|
||||||
|
this->sprite_width = 1;
|
||||||
|
this->sprite_height = 1;
|
||||||
|
this->z_height = 1;
|
||||||
|
}
|
||||||
|
|
|
@ -358,6 +358,13 @@ struct Vehicle {
|
||||||
* Marks the vehicles to be redrawn and updates cached variables
|
* Marks the vehicles to be redrawn and updates cached variables
|
||||||
*/
|
*/
|
||||||
virtual void MarkDirty() {}
|
virtual void MarkDirty() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the x and y offsets and the size of the sprite used
|
||||||
|
* for this vehicle.
|
||||||
|
* @param direction the direction the vehicle is facing
|
||||||
|
*/
|
||||||
|
virtual void UpdateDeltaXY(Direction direction) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -383,6 +390,7 @@ struct SpecialVehicle : public Vehicle {
|
||||||
virtual ~SpecialVehicle() {}
|
virtual ~SpecialVehicle() {}
|
||||||
|
|
||||||
const char *GetTypeString() { return "special vehicle"; }
|
const char *GetTypeString() { return "special vehicle"; }
|
||||||
|
void UpdateDeltaXY(Direction direction);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -401,6 +409,7 @@ struct DisasterVehicle : public Vehicle {
|
||||||
virtual ~DisasterVehicle() {}
|
virtual ~DisasterVehicle() {}
|
||||||
|
|
||||||
const char *GetTypeString() { return "disaster vehicle"; }
|
const char *GetTypeString() { return "disaster vehicle"; }
|
||||||
|
void UpdateDeltaXY(Direction direction);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -410,9 +419,6 @@ struct DisasterVehicle : public Vehicle {
|
||||||
* v = new (v) Train();
|
* v = new (v) Train();
|
||||||
*
|
*
|
||||||
* As side-effect the vehicle type is set correctly.
|
* As side-effect the vehicle type is set correctly.
|
||||||
*
|
|
||||||
* An invalid vehicle must never be used; all (virtual) functions from
|
|
||||||
* Vehicle should assert (NOT_REACHED).
|
|
||||||
*/
|
*/
|
||||||
struct InvalidVehicle : public Vehicle {
|
struct InvalidVehicle : public Vehicle {
|
||||||
/** Initializes the Vehicle to a invalid vehicle */
|
/** Initializes the Vehicle to a invalid vehicle */
|
||||||
|
@ -422,7 +428,6 @@ struct InvalidVehicle : public Vehicle {
|
||||||
virtual ~InvalidVehicle() {}
|
virtual ~InvalidVehicle() {}
|
||||||
|
|
||||||
const char *GetTypeString() { return "invalid vehicle"; }
|
const char *GetTypeString() { return "invalid vehicle"; }
|
||||||
void MarkDirty() { NOT_REACHED(); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define is_custom_sprite(x) (x >= 0xFD)
|
#define is_custom_sprite(x) (x >= 0xFD)
|
||||||
|
|
Loading…
Reference in New Issue