mirror of https://github.com/OpenTTD/OpenTTD.git
(svn r24446) -Add [FS#5199]: Store more consist properties in order backups.
This commit is contained in:
parent
fcbe53d204
commit
9527bad3a7
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "base_consist.h"
|
#include "base_consist.h"
|
||||||
|
#include "vehicle_base.h"
|
||||||
|
|
||||||
BaseConsist::~BaseConsist()
|
BaseConsist::~BaseConsist()
|
||||||
{
|
{
|
||||||
|
@ -28,6 +29,16 @@ void BaseConsist::CopyConsistPropertiesFrom(const BaseConsist *src)
|
||||||
free(this->name);
|
free(this->name);
|
||||||
this->name = src->name != NULL ? strdup(src->name) : NULL;
|
this->name = src->name != NULL ? strdup(src->name) : NULL;
|
||||||
|
|
||||||
|
this->current_order_time = src->current_order_time;
|
||||||
|
this->lateness_counter = src->lateness_counter;
|
||||||
|
this->timetable_start = src->timetable_start;
|
||||||
|
|
||||||
this->service_interval = src->service_interval;
|
this->service_interval = src->service_interval;
|
||||||
|
|
||||||
this->cur_real_order_index = src->cur_real_order_index;
|
this->cur_real_order_index = src->cur_real_order_index;
|
||||||
|
this->cur_implicit_order_index = src->cur_implicit_order_index;
|
||||||
|
|
||||||
|
if (HasBit(src->vehicle_flags, VF_TIMETABLE_STARTED)) SetBit(this->vehicle_flags, VF_TIMETABLE_STARTED);
|
||||||
|
if (HasBit(src->vehicle_flags, VF_AUTOFILL_TIMETABLE)) SetBit(this->vehicle_flags, VF_AUTOFILL_TIMETABLE);
|
||||||
|
if (HasBit(src->vehicle_flags, VF_AUTOFILL_PRES_WAIT_TIME)) SetBit(this->vehicle_flags, VF_AUTOFILL_PRES_WAIT_TIME);
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,8 +18,18 @@
|
||||||
/** Various front vehicle properties that are preserved when autoreplacing, using order-backup or switching front engines within a consist. */
|
/** Various front vehicle properties that are preserved when autoreplacing, using order-backup or switching front engines within a consist. */
|
||||||
struct BaseConsist {
|
struct BaseConsist {
|
||||||
char *name; ///< Name of vehicle
|
char *name; ///< Name of vehicle
|
||||||
|
|
||||||
|
/* Used for timetabling. */
|
||||||
|
uint32 current_order_time; ///< How many ticks have passed since this order started.
|
||||||
|
int32 lateness_counter; ///< How many ticks late (or early if negative) this vehicle is.
|
||||||
|
Date timetable_start; ///< When the vehicle is supposed to start the timetable.
|
||||||
|
|
||||||
Date service_interval; ///< The interval for (automatic) servicing; either in days or %.
|
Date service_interval; ///< The interval for (automatic) servicing; either in days or %.
|
||||||
|
|
||||||
VehicleOrderID cur_real_order_index;///< The index to the current real (non-implicit) order
|
VehicleOrderID cur_real_order_index;///< The index to the current real (non-implicit) order
|
||||||
|
VehicleOrderID cur_implicit_order_index;///< The index to the current implicit order
|
||||||
|
|
||||||
|
byte vehicle_flags; ///< Used for gradual loading and other miscellaneous things (@see VehicleFlags enum)
|
||||||
|
|
||||||
BaseConsist() : name(NULL) {}
|
BaseConsist() : name(NULL) {}
|
||||||
virtual ~BaseConsist();
|
virtual ~BaseConsist();
|
||||||
|
|
|
@ -86,7 +86,7 @@ void OrderBackup::DoRestore(Vehicle *v)
|
||||||
|
|
||||||
/* Make sure orders are in range */
|
/* Make sure orders are in range */
|
||||||
v->UpdateRealOrderIndex();
|
v->UpdateRealOrderIndex();
|
||||||
v->cur_implicit_order_index = v->cur_real_order_index;
|
if (v->cur_implicit_order_index >= v->GetNumOrders()) v->cur_implicit_order_index = v->cur_real_order_index;
|
||||||
|
|
||||||
/* Restore vehicle group */
|
/* Restore vehicle group */
|
||||||
DoCommand(0, this->group, v->index, DC_EXEC, CMD_ADD_VEHICLE_GROUP);
|
DoCommand(0, this->group, v->index, DC_EXEC, CMD_ADD_VEHICLE_GROUP);
|
||||||
|
|
|
@ -244,15 +244,20 @@ static void Ptrs_ORDL()
|
||||||
const SaveLoad *GetOrderBackupDescription()
|
const SaveLoad *GetOrderBackupDescription()
|
||||||
{
|
{
|
||||||
static const SaveLoad _order_backup_desc[] = {
|
static const SaveLoad _order_backup_desc[] = {
|
||||||
SLE_VAR(OrderBackup, user, SLE_UINT32),
|
SLE_VAR(OrderBackup, user, SLE_UINT32),
|
||||||
SLE_VAR(OrderBackup, tile, SLE_UINT32),
|
SLE_VAR(OrderBackup, tile, SLE_UINT32),
|
||||||
SLE_VAR(OrderBackup, group, SLE_UINT16),
|
SLE_VAR(OrderBackup, group, SLE_UINT16),
|
||||||
SLE_VAR(OrderBackup, service_interval, SLE_INT32),
|
SLE_VAR(OrderBackup, service_interval, SLE_INT32),
|
||||||
SLE_STR(OrderBackup, name, SLE_STR, 0),
|
SLE_STR(OrderBackup, name, SLE_STR, 0),
|
||||||
SLE_VAR(OrderBackup, clone, SLE_UINT16),
|
SLE_VAR(OrderBackup, clone, SLE_UINT16),
|
||||||
SLE_VAR(OrderBackup, cur_real_order_index, SLE_UINT8),
|
SLE_VAR(OrderBackup, cur_real_order_index, SLE_UINT8),
|
||||||
SLE_REF(OrderBackup, orders, REF_ORDER),
|
SLE_CONDVAR(OrderBackup, cur_implicit_order_index, SLE_UINT8, 176, SL_MAX_VERSION),
|
||||||
SLE_END()
|
SLE_CONDVAR(OrderBackup, current_order_time, SLE_UINT32, 176, SL_MAX_VERSION),
|
||||||
|
SLE_CONDVAR(OrderBackup, lateness_counter, SLE_INT32, 176, SL_MAX_VERSION),
|
||||||
|
SLE_CONDVAR(OrderBackup, timetable_start, SLE_INT32, 176, SL_MAX_VERSION),
|
||||||
|
SLE_CONDVAR(OrderBackup, vehicle_flags, SLE_UINT8, 176, SL_MAX_VERSION),
|
||||||
|
SLE_REF(OrderBackup, orders, REF_ORDER),
|
||||||
|
SLE_END()
|
||||||
};
|
};
|
||||||
|
|
||||||
return _order_backup_desc;
|
return _order_backup_desc;
|
||||||
|
|
|
@ -239,8 +239,9 @@
|
||||||
* 173 23967 1.2.0-RC1
|
* 173 23967 1.2.0-RC1
|
||||||
* 174 23973 1.2.x
|
* 174 23973 1.2.x
|
||||||
* 175 24136
|
* 175 24136
|
||||||
|
* 176 24446
|
||||||
*/
|
*/
|
||||||
extern const uint16 SAVEGAME_VERSION = 175; ///< Current savegame version of OpenTTD.
|
extern const uint16 SAVEGAME_VERSION = 176; ///< Current savegame version of OpenTTD.
|
||||||
|
|
||||||
SavegameType _savegame_type; ///< type of savegame we are loading
|
SavegameType _savegame_type; ///< type of savegame we are loading
|
||||||
|
|
||||||
|
|
|
@ -151,11 +151,6 @@ public:
|
||||||
|
|
||||||
CargoPayment *cargo_payment; ///< The cargo payment we're currently in
|
CargoPayment *cargo_payment; ///< The cargo payment we're currently in
|
||||||
|
|
||||||
/* Used for timetabling. */
|
|
||||||
uint32 current_order_time; ///< How many ticks have passed since this order started.
|
|
||||||
int32 lateness_counter; ///< How many ticks late (or early if negative) this vehicle is.
|
|
||||||
Date timetable_start; ///< When the vehicle is supposed to start the timetable.
|
|
||||||
|
|
||||||
Rect coord; ///< NOSAVE: Graphical bounding box of the vehicle, i.e. what to redraw on moves.
|
Rect coord; ///< NOSAVE: Graphical bounding box of the vehicle, i.e. what to redraw on moves.
|
||||||
|
|
||||||
Vehicle *hash_viewport_next; ///< NOSAVE: Next vehicle in the visual location hash.
|
Vehicle *hash_viewport_next; ///< NOSAVE: Next vehicle in the visual location hash.
|
||||||
|
@ -227,15 +222,12 @@ public:
|
||||||
|
|
||||||
byte vehstatus; ///< Status
|
byte vehstatus; ///< Status
|
||||||
Order current_order; ///< The current order (+ status, like: loading)
|
Order current_order; ///< The current order (+ status, like: loading)
|
||||||
VehicleOrderID cur_implicit_order_index;///< The index to the current implicit order
|
|
||||||
|
|
||||||
union {
|
union {
|
||||||
OrderList *list; ///< Pointer to the order list for this vehicle
|
OrderList *list; ///< Pointer to the order list for this vehicle
|
||||||
Order *old; ///< Only used during conversion of old save games
|
Order *old; ///< Only used during conversion of old save games
|
||||||
} orders; ///< The orders currently assigned to the vehicle.
|
} orders; ///< The orders currently assigned to the vehicle.
|
||||||
|
|
||||||
byte vehicle_flags; ///< Used for gradual loading and other miscellaneous things (@see VehicleFlags enum)
|
|
||||||
|
|
||||||
uint16 load_unload_ticks; ///< Ticks to wait before starting next cycle.
|
uint16 load_unload_ticks; ///< Ticks to wait before starting next cycle.
|
||||||
GroupID group_id; ///< Index of group Pool array
|
GroupID group_id; ///< Index of group Pool array
|
||||||
byte subtype; ///< subtype (Filled with values from #EffectVehicles/#TrainSubTypes/#AircraftSubTypes)
|
byte subtype; ///< subtype (Filled with values from #EffectVehicles/#TrainSubTypes/#AircraftSubTypes)
|
||||||
|
@ -598,20 +590,11 @@ public:
|
||||||
|
|
||||||
this->unitnumber = src->unitnumber;
|
this->unitnumber = src->unitnumber;
|
||||||
|
|
||||||
this->cur_implicit_order_index = src->cur_implicit_order_index;
|
|
||||||
this->current_order = src->current_order;
|
this->current_order = src->current_order;
|
||||||
this->dest_tile = src->dest_tile;
|
this->dest_tile = src->dest_tile;
|
||||||
|
|
||||||
this->profit_this_year = src->profit_this_year;
|
this->profit_this_year = src->profit_this_year;
|
||||||
this->profit_last_year = src->profit_last_year;
|
this->profit_last_year = src->profit_last_year;
|
||||||
|
|
||||||
this->current_order_time = src->current_order_time;
|
|
||||||
this->lateness_counter = src->lateness_counter;
|
|
||||||
this->timetable_start = src->timetable_start;
|
|
||||||
|
|
||||||
if (HasBit(src->vehicle_flags, VF_TIMETABLE_STARTED)) SetBit(this->vehicle_flags, VF_TIMETABLE_STARTED);
|
|
||||||
if (HasBit(src->vehicle_flags, VF_AUTOFILL_TIMETABLE)) SetBit(this->vehicle_flags, VF_AUTOFILL_TIMETABLE);
|
|
||||||
if (HasBit(src->vehicle_flags, VF_AUTOFILL_PRES_WAIT_TIME)) SetBit(this->vehicle_flags, VF_AUTOFILL_PRES_WAIT_TIME);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue