summaryrefslogtreecommitdiff
path: root/src/order_backup.cpp
diff options
context:
space:
mode:
authorrubidium <rubidium@openttd.org>2010-08-18 18:52:16 +0000
committerrubidium <rubidium@openttd.org>2010-08-18 18:52:16 +0000
commit019878118d11a6596eeab608c361dfea06c3f1ff (patch)
tree4675f56eaa3968827b3a98a1dd924f1de7c4bd13 /src/order_backup.cpp
parente2422945301452421ede848aa67a2ff47ed03d13 (diff)
downloadopenttd-019878118d11a6596eeab608c361dfea06c3f1ff.tar.xz
(svn r20545) -Codechange: make sure an OrderBackup gets cleared when the depot it belongs to gets removed, the depot window gets closed or when another vehicle gets sold in a depot
Diffstat (limited to 'src/order_backup.cpp')
-rw-r--r--src/order_backup.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/order_backup.cpp b/src/order_backup.cpp
index ccbe93abe..1518b2bde 100644
--- a/src/order_backup.cpp
+++ b/src/order_backup.cpp
@@ -61,7 +61,7 @@ OrderBackup::OrderBackup(const Vehicle *v)
}
}
-void OrderBackup::RestoreTo(const Vehicle *v)
+void OrderBackup::DoRestore(const Vehicle *v)
{
/* If we have a custom name, process that */
if (this->name != NULL) DoCommandP(0, v->index, 0, CMD_RENAME_VEHICLE, NULL, this->name);
@@ -109,22 +109,31 @@ void OrderBackup::RestoreTo(const Vehicle *v)
/* Restore vehicle group */
DoCommandP(0, this->group, v->index, CMD_ADD_VEHICLE_GROUP);
+}
- delete this;
+/* static */ void OrderBackup::Backup(const Vehicle *v)
+{
+ OrderBackup::Reset();
+ new OrderBackup(v);
}
-/* static */ OrderBackup *OrderBackup::GetByTile(TileIndex t)
+/* static */ void OrderBackup::Restore(const Vehicle *v)
{
OrderBackup *ob;
FOR_ALL_ORDER_BACKUPS(ob) {
- if (ob->tile == t) return ob;
+ if (v->tile != ob->tile) continue;
+
+ ob->DoRestore(v);
+ delete ob;
}
- return NULL;
}
-/* static */ void OrderBackup::Reset()
+/* static */ void OrderBackup::Reset(TileIndex t)
{
- _order_backup_pool.CleanPool();
+ OrderBackup *ob;
+ FOR_ALL_ORDER_BACKUPS(ob) {
+ if (t == INVALID_TILE || t == ob->tile) delete ob;
+ }
}
/* static */ void OrderBackup::ClearGroup(GroupID group)