diff options
Diffstat (limited to 'src/rail_cmd.cpp')
-rw-r--r-- | src/rail_cmd.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/rail_cmd.cpp b/src/rail_cmd.cpp index 743e6e193..2010f9b30 100644 --- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -44,6 +44,8 @@ typedef SmallVector<Train *, 16> TrainList; RailtypeInfo _railtypes[RAILTYPE_END]; +RailType _sorted_railtypes[RAILTYPE_END]; +uint8 _sorted_railtypes_size; assert_compile(sizeof(_original_railtypes) <= sizeof(_railtypes)); @@ -110,6 +112,17 @@ void ResolveRailTypeGUISprites(RailtypeInfo *rti) } /** + * Compare railtypes based on their sorting order. + * @param first The railtype to compare to. + * @param second The railtype to compare. + * @return True iff the first should be sorted before the second. + */ +static int CDECL CompareRailTypes(const RailType *first, const RailType *second) +{ + return GetRailTypeInfo(*first)->sorting_order - GetRailTypeInfo(*second)->sorting_order; +} + +/** * Resolve sprites of custom rail types */ void InitRailTypes() @@ -118,6 +131,14 @@ void InitRailTypes() RailtypeInfo *rti = &_railtypes[rt]; ResolveRailTypeGUISprites(rti); } + + _sorted_railtypes_size = 0; + for (RailType rt = RAILTYPE_BEGIN; rt != RAILTYPE_END; rt++) { + if (_railtypes[rt].label != 0) { + _sorted_railtypes[_sorted_railtypes_size++] = rt; + } + } + QSortT(_sorted_railtypes, _sorted_railtypes_size, CompareRailTypes); } /** |