summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/order_backup.cpp21
-rw-r--r--src/order_backup.h8
-rw-r--r--src/saveload/order_sl.cpp2
3 files changed, 9 insertions, 22 deletions
diff --git a/src/order_backup.cpp b/src/order_backup.cpp
index 36e6418a6..e6effaf0f 100644
--- a/src/order_backup.cpp
+++ b/src/order_backup.cpp
@@ -25,8 +25,6 @@ INSTANTIATE_POOL_METHODS(OrderBackup)
/** Free everything that is allocated. */
OrderBackup::~OrderBackup()
{
- free(this->name);
-
if (CleaningPool()) return;
Order *o = this->orders;
@@ -46,11 +44,9 @@ OrderBackup::OrderBackup(const Vehicle *v, uint32 user)
{
this->user = user;
this->tile = v->tile;
- this->orderindex = v->cur_implicit_order_index;
this->group = v->group_id;
- this->service_interval = v->service_interval;
- if (v->name != NULL) this->name = strdup(v->name);
+ this->CopyConsistPropertiesFrom(v);
/* If we have shared orders, store the vehicle we share the order with. */
if (v->IsOrderListShared()) {
@@ -76,10 +72,6 @@ OrderBackup::OrderBackup(const Vehicle *v, uint32 user)
*/
void OrderBackup::DoRestore(Vehicle *v)
{
- /* If we have a custom name, process that */
- v->name = this->name;
- this->name = NULL;
-
/* If we had shared orders, recover that */
if (this->clone != NULL) {
DoCommand(0, v->index | CO_SHARE << 30, this->clone->index, DC_EXEC, CMD_CLONE_ORDER);
@@ -90,12 +82,11 @@ void OrderBackup::DoRestore(Vehicle *v)
InvalidateWindowClassesData(WC_STATION_LIST, 0);
}
- uint num_orders = v->GetNumOrders();
- if (num_orders != 0) {
- v->cur_real_order_index = v->cur_implicit_order_index = this->orderindex % num_orders;
- v->UpdateRealOrderIndex();
- }
- v->service_interval = this->service_interval;
+ v->CopyConsistPropertiesFrom(this);
+
+ /* Make sure orders are in range */
+ v->UpdateRealOrderIndex();
+ v->cur_implicit_order_index = v->cur_real_order_index;
/* Restore vehicle group */
DoCommand(0, this->group, v->index, DC_EXEC, CMD_ADD_VEHICLE_GROUP);
diff --git a/src/order_backup.h b/src/order_backup.h
index 6679e55d2..59404d5be 100644
--- a/src/order_backup.h
+++ b/src/order_backup.h
@@ -13,11 +13,10 @@
#define ORDER_BACKUP_H
#include "core/pool_type.hpp"
-#include "date_type.h"
#include "group_type.h"
-#include "order_type.h"
#include "tile_type.h"
#include "vehicle_type.h"
+#include "base_consist.h"
/** Unique identifier for an order backup. */
typedef uint8 OrderBackupID;
@@ -35,18 +34,15 @@ static const uint32 MAKE_ORDER_BACKUP_FLAG = 1U << 31;
* Data for backing up an order of a vehicle so it can be
* restored after a vehicle is rebuilt in the same depot.
*/
-struct OrderBackup : OrderBackupPool::PoolItem<&_order_backup_pool> {
+struct OrderBackup : OrderBackupPool::PoolItem<&_order_backup_pool>, BaseConsist {
private:
friend const struct SaveLoad *GetOrderBackupDescription(); ///< Saving and loading of order backups.
friend void Load_BKOR(); ///< Creating empty orders upon savegame loading.
uint32 user; ///< The user that requested the backup.
TileIndex tile; ///< Tile of the depot where the order was changed.
GroupID group; ///< The group the vehicle was part of.
- Date service_interval; ///< The service interval of the vehicle.
- char *name; ///< The custom name of the vehicle.
const Vehicle *clone; ///< Vehicle this vehicle was a clone of.
- VehicleOrderID orderindex; ///< The order-index the vehicle had.
Order *orders; ///< The actual orders if the vehicle was not a clone.
/** Creation for savegame restoration. */
diff --git a/src/saveload/order_sl.cpp b/src/saveload/order_sl.cpp
index 0437a2d7a..ce3582ed8 100644
--- a/src/saveload/order_sl.cpp
+++ b/src/saveload/order_sl.cpp
@@ -250,7 +250,7 @@ const SaveLoad *GetOrderBackupDescription()
SLE_VAR(OrderBackup, service_interval, SLE_INT32),
SLE_STR(OrderBackup, name, SLE_STR, 0),
SLE_VAR(OrderBackup, clone, SLE_UINT16),
- SLE_VAR(OrderBackup, orderindex, SLE_UINT8),
+ SLE_VAR(OrderBackup, cur_real_order_index, SLE_UINT8),
SLE_REF(OrderBackup, orders, REF_ORDER),
SLE_END()
};