summaryrefslogtreecommitdiff
path: root/src/order_backup.h
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2010-08-18 20:48:38 +0000
committerrubidium <rubidium@openttd.org>2010-08-18 20:48:38 +0000
commit926594b599e76886fd877e953036918687418b0c (patch)
treedb13aaa32a38c15aa14f64f4d01a0962889f9c0e /src/order_backup.h
parent04d6648c5efd89a32669a17d6ad2711c719820d9 (diff)
downloadopenttd-926594b599e76886fd877e953036918687418b0c.tar.xz
(svn r20547) -Change: the way order backups are performed. Now restoring an order doesn't require up to 765 commands.
Diffstat (limited to 'src/order_backup.h')
-rw-r--r--src/order_backup.h50
1 files changed, 40 insertions, 10 deletions
diff --git a/src/order_backup.h b/src/order_backup.h
index 3d4f81f92..4fa42b326 100644
--- a/src/order_backup.h
+++ b/src/order_backup.h
@@ -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 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 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.
- * @param tile The tile of the order backup.
+ * 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);
+ static void Reset(TileIndex tile = INVALID_TILE, bool from_gui = true);
/**
* Clear the group of all backups having this group ID.