Mercurial > hg > openttd
changeset 17129:703380c6e064 draft
(svn r21866) -Feature [FS#4394]: [NewGRF] Rail type property to influence sorting of rail types in the drop down list
author | rubidium <rubidium@openttd.org> |
---|---|
date | Thu, 20 Jan 2011 12:22:38 +0000 |
parents | e71b7d776112 |
children | 97e8cda8fc10 |
files | src/newgrf.cpp src/rail.h src/rail_cmd.cpp src/table/railtypes.h src/toolbar_gui.cpp |
diffstat | 5 files changed, 42 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/newgrf.cpp +++ b/src/newgrf.cpp @@ -3263,6 +3263,10 @@ rti->introduction_date = buf->ReadDWord(); break; + case 0x1A: // Sort order + rti->sorting_order = buf->ReadByte(); + break; + default: ret = CIR_UNKNOWN; break; @@ -3320,6 +3324,7 @@ case 0x12: // Station graphic case 0x15: // Acceleration model case 0x16: // Map colour + case 0x1A: // Sort order buf->ReadByte(); break;
--- a/src/rail.h +++ b/src/rail.h @@ -238,6 +238,11 @@ RailTypes introduces_railtypes; /** + * The sorting order of this railtype for the toolbar dropdown. + */ + byte sorting_order; + + /** * Sprite groups for resolving sprites */ const SpriteGroup *group[RTSG_END];
--- a/src/rail_cmd.cpp +++ b/src/rail_cmd.cpp @@ -106,6 +106,14 @@ /* We also introduce ourself. */ rti->introduces_railtypes = (RailTypes)(1 << rt); + + /* Default sort order; order of allocation, but with some + * offsets so it's easier for NewGRF to pick a spot without + * changing the order of other (original) rail types. + * The << is so you can place other railtypes in between the + * other railtypes, the 7 is to be able to place something + * before the first (default) rail type. */ + rti->sorting_order = rt << 4 | 7; return rt; } }
--- a/src/table/railtypes.h +++ b/src/table/railtypes.h @@ -104,6 +104,9 @@ /* introduction rail types */ RAILTYPES_RAIL, + /* sort order */ + 0 << 4 | 7, + { NULL }, }, @@ -196,6 +199,9 @@ /* introduction rail types */ RAILTYPES_ELECTRIC, + /* sort order */ + 1 << 4 | 7, + { NULL }, }, @@ -284,6 +290,9 @@ /* introduction rail types */ RAILTYPES_MONO, + /* sort order */ + 2 << 4 | 7, + { NULL }, }, @@ -372,6 +381,9 @@ /* introduction rail types */ RAILTYPES_MAGLEV, + /* sort order */ + 3 << 4 | 7, + { NULL }, }, };
--- a/src/toolbar_gui.cpp +++ b/src/toolbar_gui.cpp @@ -691,6 +691,17 @@ /* --- Rail button menu --- */ +/** + * 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 bool CompareRailTypes(const DropDownListItem *first, const DropDownListItem *second) +{ + return GetRailTypeInfo((RailType)first->result)->sorting_order < GetRailTypeInfo((RailType)second->result)->sorting_order; +} + static CallBackFunction ToolbarBuildRailClick(Window *w) { RailTypes used_railtypes = RAILTYPES_NONE; @@ -722,6 +733,7 @@ item->SetParam(1, rti->max_speed); list->push_back(item); } + list->sort(CompareRailTypes); ShowDropDownList(w, list, _last_built_railtype, TBN_RAILS, 140, true, true); SndPlayFx(SND_15_BEEP); return CBF_NONE;