mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r14748) -Codechange: unduplicate window updating when deleting vehicles.
This commit is contained in:
parent
f18043ee21
commit
3ebe66a5e4
|
@ -462,11 +462,7 @@ CommandCost CmdBuildAircraft(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
|
|
||||||
static void DoDeleteAircraft(Vehicle *v)
|
static void DoDeleteAircraft(Vehicle *v)
|
||||||
{
|
{
|
||||||
DeleteWindowById(WC_VEHICLE_VIEW, v->index);
|
|
||||||
InvalidateWindow(WC_COMPANY, v->owner);
|
|
||||||
DeleteDepotHighlightOfVehicle(v);
|
|
||||||
delete v;
|
delete v;
|
||||||
InvalidateWindowClassesData(WC_AIRCRAFT_LIST, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Sell an aircraft.
|
/** Sell an aircraft.
|
||||||
|
|
|
@ -385,10 +385,6 @@ void ChangeOwnershipOfCompanyItems(Owner old_owner, Owner new_owner)
|
||||||
FOR_ALL_VEHICLES(v) {
|
FOR_ALL_VEHICLES(v) {
|
||||||
if (v->owner == old_owner && IsCompanyBuildableVehicleType(v->type)) {
|
if (v->owner == old_owner && IsCompanyBuildableVehicleType(v->type)) {
|
||||||
if (new_owner == INVALID_OWNER) {
|
if (new_owner == INVALID_OWNER) {
|
||||||
DeleteWindowById(WC_VEHICLE_VIEW, v->index);
|
|
||||||
DeleteWindowById(WC_VEHICLE_DETAILS, v->index);
|
|
||||||
DeleteWindowById(WC_VEHICLE_ORDERS, v->index);
|
|
||||||
|
|
||||||
if (v->Previous() == NULL) delete v;
|
if (v->Previous() == NULL) delete v;
|
||||||
} else {
|
} else {
|
||||||
v->owner = new_owner;
|
v->owner = new_owner;
|
||||||
|
|
|
@ -344,12 +344,6 @@ CommandCost CmdSellRoadVeh(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
CommandCost ret(EXPENSES_NEW_VEHICLES, -v->value);
|
CommandCost ret(EXPENSES_NEW_VEHICLES, -v->value);
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
// Invalidate depot
|
|
||||||
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
|
|
||||||
InvalidateWindowClassesData(WC_ROADVEH_LIST, 0);
|
|
||||||
InvalidateWindow(WC_COMPANY, v->owner);
|
|
||||||
DeleteWindowById(WC_VEHICLE_VIEW, v->index);
|
|
||||||
DeleteDepotHighlightOfVehicle(v);
|
|
||||||
delete v;
|
delete v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -537,15 +531,8 @@ static void DeleteLastRoadVeh(Vehicle *v)
|
||||||
for (; v->Next() != NULL; v = v->Next()) u = v;
|
for (; v->Next() != NULL; v = v->Next()) u = v;
|
||||||
u->SetNext(NULL);
|
u->SetNext(NULL);
|
||||||
|
|
||||||
DeleteWindowById(WC_VEHICLE_VIEW, v->index);
|
|
||||||
|
|
||||||
InvalidateWindowClassesData(WC_ROADVEH_LIST, 0);
|
|
||||||
InvalidateWindow(WC_COMPANY, v->owner);
|
|
||||||
|
|
||||||
if (IsTileType(v->tile, MP_STATION)) ClearCrashedStation(v);
|
if (IsTileType(v->tile, MP_STATION)) ClearCrashedStation(v);
|
||||||
|
|
||||||
MarkSingleVehicleDirty(v);
|
|
||||||
|
|
||||||
delete v;
|
delete v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -863,11 +863,6 @@ CommandCost CmdSellShip(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
CommandCost ret(EXPENSES_NEW_VEHICLES, -v->value);
|
CommandCost ret(EXPENSES_NEW_VEHICLES, -v->value);
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
|
|
||||||
InvalidateWindowClassesData(WC_SHIPS_LIST, 0);
|
|
||||||
InvalidateWindow(WC_COMPANY, v->owner);
|
|
||||||
DeleteWindowById(WC_VEHICLE_VIEW, v->index);
|
|
||||||
DeleteDepotHighlightOfVehicle(v);
|
|
||||||
delete v;
|
delete v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1418,7 +1418,6 @@ CommandCost CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
cost.AddCost(-rear->value);
|
cost.AddCost(-rear->value);
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
UnlinkWagon(rear, first);
|
UnlinkWagon(rear, first);
|
||||||
DeleteDepotHighlightOfVehicle(rear);
|
|
||||||
delete rear;
|
delete rear;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1467,7 +1466,6 @@ CommandCost CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
cost.AddCost(-v->value);
|
cost.AddCost(-v->value);
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
first = UnlinkWagon(v, first);
|
first = UnlinkWagon(v, first);
|
||||||
DeleteDepotHighlightOfVehicle(v);
|
|
||||||
delete v;
|
delete v;
|
||||||
|
|
||||||
/* 4 If the second wagon was an engine, update it to front_engine
|
/* 4 If the second wagon was an engine, update it to front_engine
|
||||||
|
@ -1521,7 +1519,6 @@ CommandCost CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
|
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
first = UnlinkWagon(rear, first);
|
first = UnlinkWagon(rear, first);
|
||||||
DeleteDepotHighlightOfVehicle(rear);
|
|
||||||
delete rear;
|
delete rear;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1534,7 +1531,6 @@ CommandCost CmdSellRailWagon(TileIndex tile, uint32 flags, uint32 p1, uint32 p2)
|
||||||
cost.AddCost(-v->value);
|
cost.AddCost(-v->value);
|
||||||
if (flags & DC_EXEC) {
|
if (flags & DC_EXEC) {
|
||||||
first = UnlinkWagon(v, first);
|
first = UnlinkWagon(v, first);
|
||||||
DeleteDepotHighlightOfVehicle(v);
|
|
||||||
delete v;
|
delete v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3934,11 +3930,7 @@ static void DeleteLastWagon(Vehicle *v)
|
||||||
for (; v->Next() != NULL; v = v->Next()) u = v;
|
for (; v->Next() != NULL; v = v->Next()) u = v;
|
||||||
u->SetNext(NULL);
|
u->SetNext(NULL);
|
||||||
|
|
||||||
if (first == v) {
|
if (first != v) {
|
||||||
/* Removing front vehicle (the last to go) */
|
|
||||||
DeleteWindowById(WC_VEHICLE_VIEW, v->index);
|
|
||||||
InvalidateWindow(WC_COMPANY, v->owner);
|
|
||||||
} else {
|
|
||||||
/* Recalculate cached train properties */
|
/* Recalculate cached train properties */
|
||||||
TrainConsistChanged(first, false);
|
TrainConsistChanged(first, false);
|
||||||
/* Update the depot window if the first vehicle is in depot -
|
/* Update the depot window if the first vehicle is in depot -
|
||||||
|
@ -3948,10 +3940,6 @@ static void DeleteLastWagon(Vehicle *v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
InvalidateWindowClassesData(WC_TRAINS_LIST, 0);
|
|
||||||
|
|
||||||
MarkSingleVehicleDirty(v);
|
|
||||||
|
|
||||||
/* 'v' shouldn't be accessed after it has been deleted */
|
/* 'v' shouldn't be accessed after it has been deleted */
|
||||||
TrackBits trackbits = v->u.rail.track;
|
TrackBits trackbits = v->u.rail.track;
|
||||||
TileIndex tile = v->tile;
|
TileIndex tile = v->tile;
|
||||||
|
|
|
@ -53,6 +53,7 @@
|
||||||
#include "core/alloc_func.hpp"
|
#include "core/alloc_func.hpp"
|
||||||
#include "core/smallmap_type.hpp"
|
#include "core/smallmap_type.hpp"
|
||||||
#include "vehiclelist.h"
|
#include "vehiclelist.h"
|
||||||
|
#include "depot_func.h"
|
||||||
|
|
||||||
#include "table/sprites.h"
|
#include "table/sprites.h"
|
||||||
#include "table/strings.h"
|
#include "table/strings.h"
|
||||||
|
@ -668,8 +669,17 @@ void Vehicle::PreDestructor()
|
||||||
InvalidateWindowData(WC_VEHICLE_DEPOT, this->tile);
|
InvalidateWindowData(WC_VEHICLE_DEPOT, this->tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this->IsPrimaryVehicle()) {
|
||||||
|
DeleteWindowById(WC_VEHICLE_VIEW, this->index);
|
||||||
|
DeleteWindowById(WC_VEHICLE_DETAILS, this->index);
|
||||||
|
DeleteWindowById(WC_VEHICLE_ORDERS, this->index);
|
||||||
|
InvalidateWindow(WC_COMPANY, this->owner);
|
||||||
|
}
|
||||||
|
InvalidateWindowClassesData(GetWindowClassForVehicleType(this->type), 0);
|
||||||
|
|
||||||
this->cargo.Truncate(0);
|
this->cargo.Truncate(0);
|
||||||
DeleteVehicleOrders(this);
|
DeleteVehicleOrders(this);
|
||||||
|
DeleteDepotHighlightOfVehicle(this);
|
||||||
|
|
||||||
extern void StopGlobalFollowVehicle(const Vehicle *v);
|
extern void StopGlobalFollowVehicle(const Vehicle *v);
|
||||||
StopGlobalFollowVehicle(this);
|
StopGlobalFollowVehicle(this);
|
||||||
|
|
Loading…
Reference in New Issue