forked from mirror/OpenTTD
(svn r20547) -Change: the way order backups are performed. Now restoring an order doesn't require up to 765 commands.
This commit is contained in:
@@ -28,12 +28,18 @@ typedef Pool<OrderBackup, OrderBackupID, 1, 256> OrderBackupPool;
|
||||
/** The pool with order backups. */
|
||||
extern OrderBackupPool _order_backup_pool;
|
||||
|
||||
/** Flag to pass to the vehicle construction command when an order should be preserved. */
|
||||
static const uint32 MAKE_ORDER_BACKUP_FLAG = 1 << 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> {
|
||||
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.
|
||||
uint16 service_interval; ///< The service interval of the vehicle.
|
||||
@@ -43,17 +49,21 @@ private:
|
||||
VehicleOrderID orderindex; ///< The order-index the vehicle had.
|
||||
Order *orders; ///< The actual orders if the vehicle was not a clone.
|
||||
|
||||
/** Creation for savegame restoration. */
|
||||
OrderBackup() {}
|
||||
|
||||
/**
|
||||
* Create an order backup for the given vehicle.
|
||||
* @param v The vehicle to make a backup of.
|
||||
* @param v The vehicle to make a backup of.
|
||||
* @param user The user that is requesting the backup.
|
||||
*/
|
||||
OrderBackup(const Vehicle *v);
|
||||
OrderBackup(const Vehicle *v, uint32 user);
|
||||
|
||||
/**
|
||||
* Restore the data of this order to the given vehicle.
|
||||
* @param v The vehicle to restore to.
|
||||
*/
|
||||
void DoRestore(const Vehicle *v);
|
||||
void DoRestore(Vehicle *v);
|
||||
|
||||
public:
|
||||
/** Free everything that is allocated. */
|
||||
@@ -61,23 +71,43 @@ public:
|
||||
|
||||
/**
|
||||
* Create an order backup for the given vehicle.
|
||||
* @param v The vehicle to make a backup of.
|
||||
* @param v The vehicle to make a backup of.
|
||||
* @param user The user that is requesting the backup.
|
||||
* @note Will automatically remove any previous backups of this user.
|
||||
*/
|
||||
static void Backup(const Vehicle *v);
|
||||
static void Backup(const Vehicle *v, uint32 user);
|
||||
|
||||
/**
|
||||
* Restore the data of this order to the given vehicle.
|
||||
* @param v The vehicle to restore to.
|
||||
* @param v The vehicle to restore to.
|
||||
* @param user The user that built the vehicle, thus wants to restore.
|
||||
* @note After restoration the backup will automatically be removed.
|
||||
*/
|
||||
static void Restore(const Vehicle *v);
|
||||
static void Restore(Vehicle *v, uint32 user);
|
||||
|
||||
/**
|
||||
* Reset the OrderBackups.
|
||||
* @param tile The tile of the order backup.
|
||||
* Reset an OrderBackup given a tile and user.
|
||||
* @param tile The tile associated with the OrderBackup.
|
||||
* @param user The user associated with the OrderBackup.
|
||||
* @note Must not be used from the GUI!
|
||||
*/
|
||||
static void Reset(TileIndex tile = INVALID_TILE);
|
||||
static void ResetOfUser(TileIndex tile, uint32 user);
|
||||
|
||||
/**
|
||||
* Reset an user's OrderBackup if needed.
|
||||
* @param user The user associated with the OrderBackup.
|
||||
* @pre _network_server.
|
||||
* @note Must not be used from a command.
|
||||
*/
|
||||
static void ResetUser(uint32 user);
|
||||
|
||||
/**
|
||||
* Reset the OrderBackups from GUI/game logic.
|
||||
* @param tile The tile of the order backup.
|
||||
* @param from_gui Whether the call came from the GUI, i.e. whether
|
||||
* it must be synced over the network.
|
||||
*/
|
||||
static void Reset(TileIndex tile = INVALID_TILE, bool from_gui = true);
|
||||
|
||||
/**
|
||||
* Clear the group of all backups having this group ID.
|
||||
|
Reference in New Issue
Block a user