mirror of https://github.com/OpenTTD/OpenTTD
(svn r15676) -Codechange: remove the need for BeginVehicleMove and merge VehiclePositionChanged and EndVehicleMove.
parent
48c8cdfd84
commit
655b0ccc2e
|
@ -397,8 +397,8 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
||||||
|
|
||||||
UpdateAircraftCache(v);
|
UpdateAircraftCache(v);
|
||||||
|
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, false);
|
||||||
VehiclePositionChanged(u);
|
VehicleMove(u, false);
|
||||||
|
|
||||||
/* Aircraft with 3 vehicles (chopper)? */
|
/* Aircraft with 3 vehicles (chopper)? */
|
||||||
if (v->subtype == AIR_HELICOPTER) {
|
if (v->subtype == AIR_HELICOPTER) {
|
||||||
|
@ -421,7 +421,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
||||||
w->UpdateDeltaXY(INVALID_DIR);
|
w->UpdateDeltaXY(INVALID_DIR);
|
||||||
|
|
||||||
u->SetNext(w);
|
u->SetNext(w);
|
||||||
VehiclePositionChanged(w);
|
VehicleMove(w, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
|
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
|
||||||
|
@ -692,9 +692,7 @@ static void HelicopterTickHandler(Vehicle *v)
|
||||||
|
|
||||||
u->cur_image = img;
|
u->cur_image = img;
|
||||||
|
|
||||||
BeginVehicleMove(u);
|
VehicleMove(u, true);
|
||||||
VehiclePositionChanged(u);
|
|
||||||
EndVehicleMove(u);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetAircraftPosition(Vehicle *v, int x, int y, int z)
|
void SetAircraftPosition(Vehicle *v, int x, int y, int z)
|
||||||
|
@ -706,9 +704,7 @@ void SetAircraftPosition(Vehicle *v, int x, int y, int z)
|
||||||
v->cur_image = v->GetImage(v->direction);
|
v->cur_image = v->GetImage(v->direction);
|
||||||
if (v->subtype == AIR_HELICOPTER) v->Next()->Next()->cur_image = GetRotorImage(v);
|
if (v->subtype == AIR_HELICOPTER) v->Next()->Next()->cur_image = GetRotorImage(v);
|
||||||
|
|
||||||
BeginVehicleMove(v);
|
VehicleMove(v, true);
|
||||||
VehiclePositionChanged(v);
|
|
||||||
EndVehicleMove(v);
|
|
||||||
|
|
||||||
Vehicle *u = v->Next();
|
Vehicle *u = v->Next();
|
||||||
|
|
||||||
|
@ -721,9 +717,7 @@ void SetAircraftPosition(Vehicle *v, int x, int y, int z)
|
||||||
u->z_pos = GetSlopeZ(safe_x, safe_y);
|
u->z_pos = GetSlopeZ(safe_x, safe_y);
|
||||||
u->cur_image = v->cur_image;
|
u->cur_image = v->cur_image;
|
||||||
|
|
||||||
BeginVehicleMove(u);
|
VehicleMove(u, true);
|
||||||
VehiclePositionChanged(u);
|
|
||||||
EndVehicleMove(u);
|
|
||||||
|
|
||||||
u = u->Next();
|
u = u->Next();
|
||||||
if (u != NULL) {
|
if (u != NULL) {
|
||||||
|
@ -731,9 +725,7 @@ void SetAircraftPosition(Vehicle *v, int x, int y, int z)
|
||||||
u->y_pos = y;
|
u->y_pos = y;
|
||||||
u->z_pos = z + 5;
|
u->z_pos = z + 5;
|
||||||
|
|
||||||
BeginVehicleMove(u);
|
VehicleMove(u, true);
|
||||||
VehiclePositionChanged(u);
|
|
||||||
EndVehicleMove(u);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -329,6 +329,6 @@ void AddArticulatedParts(Vehicle **vl, VehicleType type)
|
||||||
|
|
||||||
if (flip_image) u->spritenum++;
|
if (flip_image) u->spritenum++;
|
||||||
|
|
||||||
VehiclePositionChanged(u);
|
VehicleMove(u, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -135,7 +135,7 @@ static void InitializeDisasterVehicle(Vehicle *v, int x, int y, byte z, Directio
|
||||||
v->current_order.Free();
|
v->current_order.Free();
|
||||||
|
|
||||||
DisasterVehicleUpdateImage(v);
|
DisasterVehicleUpdateImage(v);
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, false);
|
||||||
MarkSingleVehicleDirty(v);
|
MarkSingleVehicleDirty(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -143,20 +143,17 @@ static void SetDisasterVehiclePos(Vehicle *v, int x, int y, byte z)
|
||||||
{
|
{
|
||||||
Vehicle *u;
|
Vehicle *u;
|
||||||
|
|
||||||
BeginVehicleMove(v);
|
|
||||||
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->tile = TileVirtXY(x, y);
|
v->tile = TileVirtXY(x, y);
|
||||||
|
|
||||||
DisasterVehicleUpdateImage(v);
|
DisasterVehicleUpdateImage(v);
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, true);
|
||||||
EndVehicleMove(v);
|
|
||||||
|
|
||||||
if ((u = v->Next()) != NULL) {
|
if ((u = v->Next()) != NULL) {
|
||||||
int safe_x = Clamp(x, 0, MapMaxX() * TILE_SIZE);
|
int safe_x = Clamp(x, 0, MapMaxX() * TILE_SIZE);
|
||||||
int safe_y = Clamp(y - 1, 0, MapMaxY() * TILE_SIZE);
|
int safe_y = Clamp(y - 1, 0, MapMaxY() * TILE_SIZE);
|
||||||
BeginVehicleMove(u);
|
|
||||||
|
|
||||||
u->x_pos = x;
|
u->x_pos = x;
|
||||||
u->y_pos = y - 1 - (max(z - GetSlopeZ(safe_x, safe_y), 0U) >> 3);
|
u->y_pos = y - 1 - (max(z - GetSlopeZ(safe_x, safe_y), 0U) >> 3);
|
||||||
|
@ -165,16 +162,13 @@ static void SetDisasterVehiclePos(Vehicle *v, int x, int y, byte z)
|
||||||
u->direction = v->direction;
|
u->direction = v->direction;
|
||||||
|
|
||||||
DisasterVehicleUpdateImage(u);
|
DisasterVehicleUpdateImage(u);
|
||||||
VehiclePositionChanged(u);
|
VehicleMove(u, true);
|
||||||
EndVehicleMove(u);
|
|
||||||
|
|
||||||
if ((u = u->Next()) != NULL) {
|
if ((u = u->Next()) != NULL) {
|
||||||
BeginVehicleMove(u);
|
|
||||||
u->x_pos = x;
|
u->x_pos = x;
|
||||||
u->y_pos = y;
|
u->y_pos = y;
|
||||||
u->z_pos = z + 5;
|
u->z_pos = z + 5;
|
||||||
VehiclePositionChanged(u);
|
VehicleMove(u, true);
|
||||||
EndVehicleMove(u);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -543,8 +537,7 @@ static void DisasterTick_Helicopter_Rotors(Vehicle *v)
|
||||||
|
|
||||||
if (++v->cur_image > SPR_ROTOR_MOVING_3) v->cur_image = SPR_ROTOR_MOVING_1;
|
if (++v->cur_image > SPR_ROTOR_MOVING_3) v->cur_image = SPR_ROTOR_MOVING_1;
|
||||||
|
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, true);
|
||||||
MarkSingleVehicleDirty(v);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -702,8 +695,6 @@ static void DisasterTick_Submarine(Vehicle *v)
|
||||||
v->tick_counter++;
|
v->tick_counter++;
|
||||||
|
|
||||||
if (++v->age > 8880) {
|
if (++v->age > 8880) {
|
||||||
VehiclePositionChanged(v);
|
|
||||||
MarkSingleVehicleDirty(v);
|
|
||||||
delete v;
|
delete v;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,6 @@ static void ChimneySmokeTick(Vehicle *v)
|
||||||
if (v->progress > 0) {
|
if (v->progress > 0) {
|
||||||
v->progress--;
|
v->progress--;
|
||||||
} else {
|
} else {
|
||||||
BeginVehicleMove(v);
|
|
||||||
|
|
||||||
TileIndex tile = TileVirtXY(v->x_pos, v->y_pos);
|
TileIndex tile = TileVirtXY(v->x_pos, v->y_pos);
|
||||||
if (!IsTileType(tile, MP_INDUSTRY)) {
|
if (!IsTileType(tile, MP_INDUSTRY)) {
|
||||||
delete v;
|
delete v;
|
||||||
|
@ -39,8 +37,7 @@ static void ChimneySmokeTick(Vehicle *v)
|
||||||
v->cur_image = SPR_CHIMNEY_SMOKE_0;
|
v->cur_image = SPR_CHIMNEY_SMOKE_0;
|
||||||
}
|
}
|
||||||
v->progress = 7;
|
v->progress = 7;
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, true);
|
||||||
EndVehicleMove(v);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,8 +51,6 @@ static void SteamSmokeTick(Vehicle *v)
|
||||||
{
|
{
|
||||||
bool moved = false;
|
bool moved = false;
|
||||||
|
|
||||||
BeginVehicleMove(v);
|
|
||||||
|
|
||||||
v->progress++;
|
v->progress++;
|
||||||
|
|
||||||
if ((v->progress & 7) == 0) {
|
if ((v->progress & 7) == 0) {
|
||||||
|
@ -73,10 +68,7 @@ static void SteamSmokeTick(Vehicle *v)
|
||||||
moved = true;
|
moved = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (moved) {
|
if (moved) VehicleMove(v, true);
|
||||||
VehiclePositionChanged(v);
|
|
||||||
EndVehicleMove(v);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DieselSmokeInit(Vehicle *v)
|
static void DieselSmokeInit(Vehicle *v)
|
||||||
|
@ -90,16 +82,12 @@ static void DieselSmokeTick(Vehicle *v)
|
||||||
v->progress++;
|
v->progress++;
|
||||||
|
|
||||||
if ((v->progress & 3) == 0) {
|
if ((v->progress & 3) == 0) {
|
||||||
BeginVehicleMove(v);
|
|
||||||
v->z_pos++;
|
v->z_pos++;
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, true);
|
||||||
EndVehicleMove(v);
|
|
||||||
} else if ((v->progress & 7) == 1) {
|
} else if ((v->progress & 7) == 1) {
|
||||||
BeginVehicleMove(v);
|
|
||||||
if (v->cur_image != SPR_DIESEL_SMOKE_5) {
|
if (v->cur_image != SPR_DIESEL_SMOKE_5) {
|
||||||
v->cur_image++;
|
v->cur_image++;
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, true);
|
||||||
EndVehicleMove(v);
|
|
||||||
} else {
|
} else {
|
||||||
delete v;
|
delete v;
|
||||||
}
|
}
|
||||||
|
@ -118,11 +106,9 @@ static void ElectricSparkTick(Vehicle *v)
|
||||||
v->progress++;
|
v->progress++;
|
||||||
} else {
|
} else {
|
||||||
v->progress = 0;
|
v->progress = 0;
|
||||||
BeginVehicleMove(v);
|
|
||||||
if (v->cur_image != SPR_ELECTRIC_SPARK_5) {
|
if (v->cur_image != SPR_ELECTRIC_SPARK_5) {
|
||||||
v->cur_image++;
|
v->cur_image++;
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, true);
|
||||||
EndVehicleMove(v);
|
|
||||||
} else {
|
} else {
|
||||||
delete v;
|
delete v;
|
||||||
}
|
}
|
||||||
|
@ -139,8 +125,6 @@ static void SmokeTick(Vehicle *v)
|
||||||
{
|
{
|
||||||
bool moved = false;
|
bool moved = false;
|
||||||
|
|
||||||
BeginVehicleMove(v);
|
|
||||||
|
|
||||||
v->progress++;
|
v->progress++;
|
||||||
|
|
||||||
if ((v->progress & 3) == 0) {
|
if ((v->progress & 3) == 0) {
|
||||||
|
@ -158,10 +142,7 @@ static void SmokeTick(Vehicle *v)
|
||||||
moved = true;
|
moved = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (moved) {
|
if (moved) VehicleMove(v, true);
|
||||||
VehiclePositionChanged(v);
|
|
||||||
EndVehicleMove(v);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ExplosionLargeInit(Vehicle *v)
|
static void ExplosionLargeInit(Vehicle *v)
|
||||||
|
@ -174,11 +155,9 @@ static void ExplosionLargeTick(Vehicle *v)
|
||||||
{
|
{
|
||||||
v->progress++;
|
v->progress++;
|
||||||
if ((v->progress & 3) == 0) {
|
if ((v->progress & 3) == 0) {
|
||||||
BeginVehicleMove(v);
|
|
||||||
if (v->cur_image != SPR_EXPLOSION_LARGE_F) {
|
if (v->cur_image != SPR_EXPLOSION_LARGE_F) {
|
||||||
v->cur_image++;
|
v->cur_image++;
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, true);
|
||||||
EndVehicleMove(v);
|
|
||||||
} else {
|
} else {
|
||||||
delete v;
|
delete v;
|
||||||
}
|
}
|
||||||
|
@ -195,14 +174,12 @@ static void BreakdownSmokeTick(Vehicle *v)
|
||||||
{
|
{
|
||||||
v->progress++;
|
v->progress++;
|
||||||
if ((v->progress & 7) == 0) {
|
if ((v->progress & 7) == 0) {
|
||||||
BeginVehicleMove(v);
|
|
||||||
if (v->cur_image != SPR_BREAKDOWN_SMOKE_3) {
|
if (v->cur_image != SPR_BREAKDOWN_SMOKE_3) {
|
||||||
v->cur_image++;
|
v->cur_image++;
|
||||||
} else {
|
} else {
|
||||||
v->cur_image = SPR_BREAKDOWN_SMOKE_0;
|
v->cur_image = SPR_BREAKDOWN_SMOKE_0;
|
||||||
}
|
}
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, true);
|
||||||
EndVehicleMove(v);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
v->u.effect.animation_state--;
|
v->u.effect.animation_state--;
|
||||||
|
@ -221,11 +198,9 @@ static void ExplosionSmallTick(Vehicle *v)
|
||||||
{
|
{
|
||||||
v->progress++;
|
v->progress++;
|
||||||
if ((v->progress & 3) == 0) {
|
if ((v->progress & 3) == 0) {
|
||||||
BeginVehicleMove(v);
|
|
||||||
if (v->cur_image != SPR_EXPLOSION_SMALL_B) {
|
if (v->cur_image != SPR_EXPLOSION_SMALL_B) {
|
||||||
v->cur_image++;
|
v->cur_image++;
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, true);
|
||||||
EndVehicleMove(v);
|
|
||||||
} else {
|
} else {
|
||||||
delete v;
|
delete v;
|
||||||
}
|
}
|
||||||
|
@ -285,8 +260,6 @@ static void BulldozerTick(Vehicle *v)
|
||||||
if ((v->progress & 7) == 0) {
|
if ((v->progress & 7) == 0) {
|
||||||
const BulldozerMovement *b = &_bulldozer_movement[v->u.effect.animation_state];
|
const BulldozerMovement *b = &_bulldozer_movement[v->u.effect.animation_state];
|
||||||
|
|
||||||
BeginVehicleMove(v);
|
|
||||||
|
|
||||||
v->cur_image = SPR_BULLDOZER_NE + b->image;
|
v->cur_image = SPR_BULLDOZER_NE + b->image;
|
||||||
|
|
||||||
v->x_pos += _inc_by_dir[b->direction].x;
|
v->x_pos += _inc_by_dir[b->direction].x;
|
||||||
|
@ -301,8 +274,7 @@ static void BulldozerTick(Vehicle *v)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, true);
|
||||||
EndVehicleMove(v);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -470,13 +442,10 @@ static void BubbleTick(Vehicle *v)
|
||||||
v->progress++;
|
v->progress++;
|
||||||
if ((v->progress & 3) != 0) return;
|
if ((v->progress & 3) != 0) return;
|
||||||
|
|
||||||
BeginVehicleMove(v);
|
|
||||||
|
|
||||||
if (v->spritenum == 0) {
|
if (v->spritenum == 0) {
|
||||||
v->cur_image++;
|
v->cur_image++;
|
||||||
if (v->cur_image < SPR_BUBBLE_GENERATE_3) {
|
if (v->cur_image < SPR_BUBBLE_GENERATE_3) {
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, true);
|
||||||
EndVehicleMove(v);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (v->u.effect.animation_substate != 0) {
|
if (v->u.effect.animation_substate != 0) {
|
||||||
|
@ -522,8 +491,7 @@ static void BubbleTick(Vehicle *v)
|
||||||
v->z_pos += b->z;
|
v->z_pos += b->z;
|
||||||
v->cur_image = SPR_BUBBLE_0 + b->image;
|
v->cur_image = SPR_BUBBLE_0 + b->image;
|
||||||
|
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, true);
|
||||||
EndVehicleMove(v);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -572,9 +540,8 @@ Vehicle *CreateEffectVehicle(int x, int y, int z, EffectVehicleType type)
|
||||||
|
|
||||||
_effect_init_procs[type](v);
|
_effect_init_procs[type](v);
|
||||||
|
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, false);
|
||||||
BeginVehicleMove(v);
|
MarkSingleVehicleDirty(v);
|
||||||
EndVehicleMove(v);
|
|
||||||
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
|
@ -270,7 +270,7 @@ CommandCost CmdBuildRoadVeh(TileIndex tile, DoCommandFlag flags, uint32 p1, uint
|
||||||
if (u->cargo_cap != 0) u->cargo_cap = GetVehicleProperty(u, 0x0F, u->cargo_cap);
|
if (u->cargo_cap != 0) u->cargo_cap = GetVehicleProperty(u, 0x0F, u->cargo_cap);
|
||||||
}
|
}
|
||||||
|
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, false);
|
||||||
|
|
||||||
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
|
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
|
||||||
InvalidateWindowClassesData(WC_ROADVEH_LIST, 0);
|
InvalidateWindowClassesData(WC_ROADVEH_LIST, 0);
|
||||||
|
@ -540,8 +540,7 @@ static byte SetRoadVehPosition(Vehicle *v, int x, int y)
|
||||||
old_z = v->z_pos;
|
old_z = v->z_pos;
|
||||||
v->z_pos = new_z;
|
v->z_pos = new_z;
|
||||||
|
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, true);
|
||||||
EndVehicleMove(v);
|
|
||||||
return old_z;
|
return old_z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -555,7 +554,6 @@ static void RoadVehSetRandomDirection(Vehicle *v)
|
||||||
uint32 r = Random();
|
uint32 r = Random();
|
||||||
|
|
||||||
v->direction = ChangeDir(v->direction, delta[r & 3]);
|
v->direction = ChangeDir(v->direction, delta[r & 3]);
|
||||||
BeginVehicleMove(v);
|
|
||||||
v->UpdateDeltaXY(v->direction);
|
v->UpdateDeltaXY(v->direction);
|
||||||
v->cur_image = v->GetImage(v->direction);
|
v->cur_image = v->GetImage(v->direction);
|
||||||
SetRoadVehPosition(v, v->x_pos, v->y_pos);
|
SetRoadVehPosition(v, v->x_pos, v->y_pos);
|
||||||
|
@ -1246,8 +1244,6 @@ static bool RoadVehLeaveDepot(Vehicle *v, bool first)
|
||||||
v->cur_speed = 0;
|
v->cur_speed = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
BeginVehicleMove(v);
|
|
||||||
|
|
||||||
v->vehstatus &= ~VS_HIDDEN;
|
v->vehstatus &= ~VS_HIDDEN;
|
||||||
v->u.road.state = tdir;
|
v->u.road.state = tdir;
|
||||||
v->u.road.frame = RVC_DEPOT_START_FRAME;
|
v->u.road.frame = RVC_DEPOT_START_FRAME;
|
||||||
|
@ -1367,9 +1363,6 @@ static bool IndividualRoadVehicleController(Vehicle *v, const Vehicle *prev)
|
||||||
* by the previous vehicle in the chain when it gets to the right place. */
|
* by the previous vehicle in the chain when it gets to the right place. */
|
||||||
if (v->IsInDepot()) return true;
|
if (v->IsInDepot()) return true;
|
||||||
|
|
||||||
/* Save old vehicle position to use at end of move to set viewport area dirty */
|
|
||||||
BeginVehicleMove(v);
|
|
||||||
|
|
||||||
if (v->u.road.state == RVSB_WORMHOLE) {
|
if (v->u.road.state == RVSB_WORMHOLE) {
|
||||||
/* Vehicle is entering a depot or is on a bridge or in a tunnel */
|
/* Vehicle is entering a depot or is on a bridge or in a tunnel */
|
||||||
GetNewVehiclePosResult gp = GetNewVehiclePos(v);
|
GetNewVehiclePosResult gp = GetNewVehiclePos(v);
|
||||||
|
@ -1392,8 +1385,7 @@ static bool IndividualRoadVehicleController(Vehicle *v, const Vehicle *prev)
|
||||||
|
|
||||||
v->x_pos = gp.x;
|
v->x_pos = gp.x;
|
||||||
v->y_pos = gp.y;
|
v->y_pos = gp.y;
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, !(v->vehstatus & VS_HIDDEN));
|
||||||
if (!(v->vehstatus & VS_HIDDEN)) EndVehicleMove(v);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -359,8 +359,7 @@ void AfterLoadVehicles(bool part_of_load)
|
||||||
default: break;
|
default: break;
|
||||||
}
|
}
|
||||||
|
|
||||||
v->coord.left = INVALID_COORD;
|
VehicleMove(v, false);
|
||||||
VehiclePositionChanged(v);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -588,8 +588,6 @@ static void ShipController(Vehicle *v)
|
||||||
|
|
||||||
if (!ShipAccelerate(v)) return;
|
if (!ShipAccelerate(v)) return;
|
||||||
|
|
||||||
BeginVehicleMove(v);
|
|
||||||
|
|
||||||
GetNewVehiclePosResult gp = GetNewVehiclePos(v);
|
GetNewVehiclePosResult gp = GetNewVehiclePos(v);
|
||||||
if (v->u.ship.state != TRACK_BIT_WORMHOLE) {
|
if (v->u.ship.state != TRACK_BIT_WORMHOLE) {
|
||||||
/* Not on a bridge */
|
/* Not on a bridge */
|
||||||
|
@ -683,8 +681,7 @@ static void ShipController(Vehicle *v)
|
||||||
if (!IsTileType(gp.new_tile, MP_TUNNELBRIDGE) || !HasBit(VehicleEnterTile(v, gp.new_tile, gp.x, gp.y), VETS_ENTERED_WORMHOLE)) {
|
if (!IsTileType(gp.new_tile, MP_TUNNELBRIDGE) || !HasBit(VehicleEnterTile(v, gp.new_tile, gp.x, gp.y), VETS_ENTERED_WORMHOLE)) {
|
||||||
v->x_pos = gp.x;
|
v->x_pos = gp.x;
|
||||||
v->y_pos = gp.y;
|
v->y_pos = gp.y;
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, !(v->vehstatus & VS_HIDDEN));
|
||||||
if (!(v->vehstatus & VS_HIDDEN)) EndVehicleMove(v);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -698,8 +695,7 @@ static void ShipController(Vehicle *v)
|
||||||
getout:
|
getout:
|
||||||
v->UpdateDeltaXY(dir);
|
v->UpdateDeltaXY(dir);
|
||||||
v->cur_image = v->GetImage(dir);
|
v->cur_image = v->GetImage(dir);
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, true);
|
||||||
EndVehicleMove(v);
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
reverse_direction:
|
reverse_direction:
|
||||||
|
@ -803,7 +799,7 @@ CommandCost CmdBuildShip(TileIndex tile, DoCommandFlag flags, uint32 p1, uint32
|
||||||
|
|
||||||
v->cargo_cap = GetVehicleProperty(v, 0x0D, svi->capacity);
|
v->cargo_cap = GetVehicleProperty(v, 0x0D, svi->capacity);
|
||||||
|
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, false);
|
||||||
|
|
||||||
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
|
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
|
||||||
InvalidateWindowClassesData(WC_SHIPS_LIST, 0);
|
InvalidateWindowClassesData(WC_SHIPS_LIST, 0);
|
||||||
|
|
|
@ -669,7 +669,7 @@ static CommandCost CmdBuildRailWagon(EngineID engine, TileIndex tile, DoCommandF
|
||||||
|
|
||||||
_new_vehicle_id = v->index;
|
_new_vehicle_id = v->index;
|
||||||
|
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, false);
|
||||||
TrainConsistChanged(v->First(), false);
|
TrainConsistChanged(v->First(), false);
|
||||||
UpdateTrainGroupID(v->First());
|
UpdateTrainGroupID(v->First());
|
||||||
|
|
||||||
|
@ -724,7 +724,7 @@ static void AddRearEngineToMultiheadedTrain(Vehicle *v, Vehicle *u, bool buildin
|
||||||
u->value = v->value;
|
u->value = v->value;
|
||||||
u->cur_image = 0xAC2;
|
u->cur_image = 0xAC2;
|
||||||
u->random_bits = VehicleRandomBits();
|
u->random_bits = VehicleRandomBits();
|
||||||
VehiclePositionChanged(u);
|
VehicleMove(u, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Build a railroad vehicle.
|
/** Build a railroad vehicle.
|
||||||
|
@ -827,7 +827,7 @@ CommandCost CmdBuildRailVehicle(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||||
SetFrontEngine(v);
|
SetFrontEngine(v);
|
||||||
SetTrainEngine(v);
|
SetTrainEngine(v);
|
||||||
|
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, false);
|
||||||
|
|
||||||
if (rvi->railveh_type == RAILVEH_MULTIHEAD) {
|
if (rvi->railveh_type == RAILVEH_MULTIHEAD) {
|
||||||
SetMultiheaded(v);
|
SetMultiheaded(v);
|
||||||
|
@ -1546,9 +1546,7 @@ static void UpdateVarsAfterSwap(Vehicle *v)
|
||||||
{
|
{
|
||||||
v->UpdateDeltaXY(v->direction);
|
v->UpdateDeltaXY(v->direction);
|
||||||
v->cur_image = v->GetImage(v->direction);
|
v->cur_image = v->GetImage(v->direction);
|
||||||
BeginVehicleMove(v);
|
VehicleMove(v, true);
|
||||||
VehiclePositionChanged(v);
|
|
||||||
EndVehicleMove(v);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void SetLastSpeed(Vehicle *v, int spd)
|
static inline void SetLastSpeed(Vehicle *v, int spd)
|
||||||
|
@ -2420,7 +2418,7 @@ static bool CheckTrainStayInDepot(Vehicle *v)
|
||||||
|
|
||||||
v->UpdateDeltaXY(v->direction);
|
v->UpdateDeltaXY(v->direction);
|
||||||
v->cur_image = v->GetImage(v->direction);
|
v->cur_image = v->GetImage(v->direction);
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, false);
|
||||||
UpdateSignalsOnSegment(v->tile, INVALID_DIAGDIR, v->owner);
|
UpdateSignalsOnSegment(v->tile, INVALID_DIAGDIR, v->owner);
|
||||||
UpdateTrainAcceleration(v);
|
UpdateTrainAcceleration(v);
|
||||||
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
|
InvalidateWindowData(WC_VEHICLE_DEPOT, v->tile);
|
||||||
|
@ -3366,8 +3364,7 @@ static byte AfterSetTrainPos(Vehicle *v, bool new_tile)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, true);
|
||||||
EndVehicleMove(v);
|
|
||||||
return old_z;
|
return old_z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3650,7 +3647,6 @@ static void TrainController(Vehicle *v, Vehicle *nomove, bool update_image)
|
||||||
for (prev = v->Previous(); v != nomove; prev = v, v = v->Next()) {
|
for (prev = v->Previous(); v != nomove; prev = v, v = v->Next()) {
|
||||||
DiagDirection enterdir = DIAGDIR_BEGIN;
|
DiagDirection enterdir = DIAGDIR_BEGIN;
|
||||||
bool update_signals_crossing = false; // will we update signals or crossing state?
|
bool update_signals_crossing = false; // will we update signals or crossing state?
|
||||||
BeginVehicleMove(v);
|
|
||||||
|
|
||||||
GetNewVehiclePosResult gp = GetNewVehiclePos(v);
|
GetNewVehiclePosResult gp = GetNewVehiclePos(v);
|
||||||
if (v->u.rail.track != TRACK_BIT_WORMHOLE) {
|
if (v->u.rail.track != TRACK_BIT_WORMHOLE) {
|
||||||
|
@ -3838,8 +3834,7 @@ static void TrainController(Vehicle *v, Vehicle *nomove, bool update_image)
|
||||||
} else {
|
} else {
|
||||||
v->x_pos = gp.x;
|
v->x_pos = gp.x;
|
||||||
v->y_pos = gp.y;
|
v->y_pos = gp.y;
|
||||||
VehiclePositionChanged(v);
|
VehicleMove(v, !(v->vehstatus & VS_HIDDEN));
|
||||||
if (!(v->vehstatus & VS_HIDDEN)) EndVehicleMove(v);
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4002,7 +3997,6 @@ static void ChangeTrainDirRandomly(Vehicle *v)
|
||||||
/* We don't need to twist around vehicles if they're not visible */
|
/* We don't need to twist around vehicles if they're not visible */
|
||||||
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);
|
|
||||||
v->UpdateDeltaXY(v->direction);
|
v->UpdateDeltaXY(v->direction);
|
||||||
v->cur_image = v->GetImage(v->direction);
|
v->cur_image = v->GetImage(v->direction);
|
||||||
/* Refrain from updating the z position of the vehicle when on
|
/* Refrain from updating the z position of the vehicle when on
|
||||||
|
|
|
@ -186,23 +186,6 @@ bool HasVehicleOnTunnelBridge(TileIndex tile, TileIndex endtile, const Vehicle *
|
||||||
|
|
||||||
static void UpdateVehiclePosHash(Vehicle *v, int x, int y);
|
static void UpdateVehiclePosHash(Vehicle *v, int x, int y);
|
||||||
|
|
||||||
void VehiclePositionChanged(Vehicle *v)
|
|
||||||
{
|
|
||||||
int img = v->cur_image;
|
|
||||||
Point pt = RemapCoords(v->x_pos + v->x_offs, v->y_pos + v->y_offs, v->z_pos);
|
|
||||||
const Sprite *spr = GetSprite(img, ST_NORMAL);
|
|
||||||
|
|
||||||
pt.x += spr->x_offs;
|
|
||||||
pt.y += spr->y_offs;
|
|
||||||
|
|
||||||
UpdateVehiclePosHash(v, pt.x, pt.y);
|
|
||||||
|
|
||||||
v->coord.left = pt.x;
|
|
||||||
v->coord.top = pt.y;
|
|
||||||
v->coord.right = pt.x + spr->width + 2;
|
|
||||||
v->coord.bottom = pt.y + spr->height + 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
Vehicle::Vehicle()
|
Vehicle::Vehicle()
|
||||||
{
|
{
|
||||||
this->type = VEH_INVALID;
|
this->type = VEH_INVALID;
|
||||||
|
@ -1631,33 +1614,38 @@ CommandCost CmdChangeServiceInt(TileIndex tile, DoCommandFlag flags, uint32 p1,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static Rect _old_vehicle_coords; ///< coords of vehicle before it has moved
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stores the vehicle image coords for later call to EndVehicleMove()
|
* Move a vehicle in the game state; that is moving it's position in
|
||||||
* @param v vehicle which image's coords to store
|
* the position hashes and marking it's location in the viewport dirty
|
||||||
* @see _old_vehicle_coords
|
* if requested.
|
||||||
* @see EndVehicleMove()
|
* @param v vehicle to move
|
||||||
|
* @param update_viewport whether to dirty the viewport
|
||||||
*/
|
*/
|
||||||
void BeginVehicleMove(const Vehicle *v)
|
void VehicleMove(Vehicle *v, bool update_viewport)
|
||||||
{
|
{
|
||||||
_old_vehicle_coords = v->coord;
|
int img = v->cur_image;
|
||||||
}
|
Point pt = RemapCoords(v->x_pos + v->x_offs, v->y_pos + v->y_offs, v->z_pos);
|
||||||
|
const Sprite *spr = GetSprite(img, ST_NORMAL);
|
||||||
|
|
||||||
/**
|
pt.x += spr->x_offs;
|
||||||
* Marks screen dirty after a vehicle has moved
|
pt.y += spr->y_offs;
|
||||||
* @param v vehicle which is marked dirty
|
|
||||||
* @see _old_vehicle_coords
|
UpdateVehiclePosHash(v, pt.x, pt.y);
|
||||||
* @see BeginVehicleMove()
|
|
||||||
*/
|
Rect old_coord = v->coord;
|
||||||
void EndVehicleMove(const Vehicle *v)
|
v->coord.left = pt.x;
|
||||||
{
|
v->coord.top = pt.y;
|
||||||
|
v->coord.right = pt.x + spr->width + 2;
|
||||||
|
v->coord.bottom = pt.y + spr->height + 2;
|
||||||
|
|
||||||
|
if (update_viewport) {
|
||||||
MarkAllViewportsDirty(
|
MarkAllViewportsDirty(
|
||||||
min(_old_vehicle_coords.left, v->coord.left),
|
min(old_coord.left, v->coord.left),
|
||||||
min(_old_vehicle_coords.top, v->coord.top),
|
min(old_coord.top, v->coord.top),
|
||||||
max(_old_vehicle_coords.right, v->coord.right) + 1,
|
max(old_coord.right, v->coord.right) + 1,
|
||||||
max(_old_vehicle_coords.bottom, v->coord.bottom) + 1
|
max(old_coord.bottom, v->coord.bottom) + 1
|
||||||
);
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -22,7 +22,6 @@
|
||||||
typedef Vehicle *VehicleFromPosProc(Vehicle *v, void *data);
|
typedef Vehicle *VehicleFromPosProc(Vehicle *v, void *data);
|
||||||
|
|
||||||
void VehicleServiceInDepot(Vehicle *v);
|
void VehicleServiceInDepot(Vehicle *v);
|
||||||
void VehiclePositionChanged(Vehicle *v);
|
|
||||||
Vehicle *GetLastVehicleInChain(Vehicle *v);
|
Vehicle *GetLastVehicleInChain(Vehicle *v);
|
||||||
const Vehicle *GetLastVehicleInChain(const Vehicle *v);
|
const Vehicle *GetLastVehicleInChain(const Vehicle *v);
|
||||||
uint CountVehiclesInChain(const Vehicle *v);
|
uint CountVehiclesInChain(const Vehicle *v);
|
||||||
|
@ -55,8 +54,7 @@ void CheckVehicleBreakdown(Vehicle *v);
|
||||||
void AgeVehicle(Vehicle *v);
|
void AgeVehicle(Vehicle *v);
|
||||||
void VehicleEnteredDepotThisTick(Vehicle *v);
|
void VehicleEnteredDepotThisTick(Vehicle *v);
|
||||||
|
|
||||||
void BeginVehicleMove(const Vehicle *v);
|
void VehicleMove(Vehicle *v, bool update_viewport);
|
||||||
void EndVehicleMove(const Vehicle *v);
|
|
||||||
void MarkSingleVehicleDirty(const Vehicle *v);
|
void MarkSingleVehicleDirty(const Vehicle *v);
|
||||||
|
|
||||||
UnitID GetFreeUnitNumber(VehicleType type);
|
UnitID GetFreeUnitNumber(VehicleType type);
|
||||||
|
|
Loading…
Reference in New Issue