summaryrefslogtreecommitdiff
path: root/newgrf_engine.c
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2006-02-04 21:48:46 +0000
committerpeter1138 <peter1138@openttd.org>2006-02-04 21:48:46 +0000
commit500a7e6627c130d3ec8bae00384dafe18e86da7e (patch)
tree87ce1a898e14813f5cc02bbe02c5671b8f166c37 /newgrf_engine.c
parent78b51cbec2d027a4e8f3066370d5994d4e8b0935 (diff)
downloadopenttd-500a7e6627c130d3ec8bae00384dafe18e86da7e.tar.xz
(svn r3546) - NewGRF feature: Implement rail vehicle 'property' 0x1A: allows shuffling order of rail vehicle purchase list (and replace vehicle list)
Diffstat (limited to 'newgrf_engine.c')
-rw-r--r--newgrf_engine.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/newgrf_engine.c b/newgrf_engine.c
index 827014225..ebaa15c1d 100644
--- a/newgrf_engine.c
+++ b/newgrf_engine.c
@@ -591,3 +591,44 @@ StringID GetCustomEngineName(EngineID engine)
return STR_SPEC_USERSTRING;
}
+// Functions for changing the order of vehicle purchase lists
+// This is currently only implemented for rail vehicles.
+static EngineID engine_list_order[NUM_TRAIN_ENGINES];
+
+void ResetEngineListOrder(void)
+{
+ EngineID i;
+
+ for (i = 0; i < NUM_TRAIN_ENGINES; i++)
+ engine_list_order[i] = i;
+}
+
+EngineID GetRailVehAtPosition(EngineID pos)
+{
+ return engine_list_order[pos];
+}
+
+void AlterRailVehListOrder(EngineID engine, EngineID target)
+{
+ EngineID i;
+ bool moving = false;
+
+ if (engine == target) return;
+
+ // First, remove our ID from the list.
+ for (i = 0; i < NUM_TRAIN_ENGINES - 1; i++) {
+ if (engine_list_order[i] == engine)
+ moving = true;
+ if (moving)
+ engine_list_order[i] = engine_list_order[i + 1];
+ }
+
+ // Now, insert it again, before the target engine.
+ for (i = NUM_TRAIN_ENGINES - 1; i > 0; i--) {
+ engine_list_order[i] = engine_list_order[i - 1];
+ if (engine_list_order[i] == target) {
+ engine_list_order[i - 1] = engine;
+ break;
+ }
+ }
+}