diff options
Diffstat (limited to 'src/order_backup.h')
-rw-r--r-- | src/order_backup.h | 50 |
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. |