summaryrefslogtreecommitdiff
path: root/newgrf_engine.c
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2006-10-11 18:35:40 +0000
committerpeter1138 <peter1138@openttd.org>2006-10-11 18:35:40 +0000
commit8d2bf451234790c08fe42303fe02337791f52913 (patch)
tree5f007a3618fce7bff0ae340e351ffd681a1fb43f /newgrf_engine.c
parent0ad5dbfdb94af54d88c2796b847f4acaf5c5131f (diff)
downloadopenttd-8d2bf451234790c08fe42303fe02337791f52913.tar.xz
(svn r6736) - Add a function to get the list position of an engine ID, for use with sorting. This is basically a reversed version of GetRailVehAtPosition()
Diffstat (limited to 'newgrf_engine.c')
-rw-r--r--newgrf_engine.c28
1 files changed, 27 insertions, 1 deletions
diff --git a/newgrf_engine.c b/newgrf_engine.c
index eddcc0d3c..cbc8844db 100644
--- a/newgrf_engine.c
+++ b/newgrf_engine.c
@@ -1124,6 +1124,7 @@ StringID GetCustomEngineName(EngineID engine)
// 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];
+static byte _engine_list_position[NUM_TRAIN_ENGINES];
void ResetEngineListOrder(void)
{
@@ -1131,12 +1132,32 @@ void ResetEngineListOrder(void)
for (i = 0; i < NUM_TRAIN_ENGINES; i++) {
_engine_list_order[i] = i;
+ _engine_list_position[i] = i;
}
}
+/**
+ * Get the EngineID at position pos.
+ * Used when drawing a(n unsorted) list of engines.
+ * @param pos List position/
+ * @return The EngineID at the requested position.
+ */
EngineID GetRailVehAtPosition(EngineID pos)
{
- return _engine_list_order[pos];
+ if (pos < NUM_TRAIN_ENGINES) return _engine_list_order[pos];
+ return pos;
+}
+
+/**
+ * Get the list position of an engine.
+ * Used when sorting a list of engines.
+ * @param engine ID of the engine.
+ * @return The list position of the engine.
+ */
+uint16 ListPositionOfEngine(EngineID engine)
+{
+ if (engine < NUM_TRAIN_ENGINES) return _engine_list_position[engine];
+ return engine;
}
void AlterRailVehListOrder(EngineID engine, EngineID target)
@@ -1160,4 +1181,9 @@ void AlterRailVehListOrder(EngineID engine, EngineID target)
break;
}
}
+
+ // Update the engine list position (a reverse of engine list order)
+ for (i = 0; i < NUM_TRAIN_ENGINES; i++) {
+ _engine_list_position[_engine_list_order[i]] = i;
+ }
}