From 919533d7c274fc0f19fd236596824de1a7af21dd Mon Sep 17 00:00:00 2001 From: Michael Steenbeek Date: Wed, 21 Mar 2018 12:52:39 +0100 Subject: [PATCH] Show ride and vehicle names in research list --- data/language/en-GB.txt | 4 ++ .../windows/EditorInventionsList.cpp | 71 ++++++++++++++++--- src/openrct2/localisation/StringIds.h | 4 ++ src/openrct2/management/Research.cpp | 2 +- src/openrct2/management/Research.h | 2 +- 5 files changed, 71 insertions(+), 12 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 098bf3fb7e..c4c9ea4cd2 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4535,6 +4535,10 @@ STR_6225 :Not supported with OpenGL renderer STR_6226 :Enable early scenario completion STR_6227 :{SMALLFONT}{BLACK}Triggers scenario completion when all scenario goals are met before the target date. STR_6228 :Scenario Options +STR_6229 :{WINDOW_COLOUR_2}{STRINGID}: {STRINGID} +STR_6230 :{STRINGID}: {MOVE_X}{185}{STRINGID} +STR_6231 :{WINDOW_COLOUR_2}{STRINGID}: {MOVE_X}{185}{STRINGID} + ############# # Scenarios # diff --git a/src/openrct2-ui/windows/EditorInventionsList.cpp b/src/openrct2-ui/windows/EditorInventionsList.cpp index 9b79111560..6ca5c6cd5e 100644 --- a/src/openrct2-ui/windows/EditorInventionsList.cpp +++ b/src/openrct2-ui/windows/EditorInventionsList.cpp @@ -30,6 +30,7 @@ #include #include #include +#include #pragma region Widgets @@ -87,6 +88,8 @@ static void window_editor_inventions_list_drag_cursor(rct_window *w, rct_widgeti static void window_editor_inventions_list_drag_moved(rct_window* w, sint32 x, sint32 y); static void window_editor_inventions_list_drag_paint(rct_window *w, rct_drawpixelinfo *dpi); +static rct_string_id window_editor_inventions_list_prepare_name(const rct_research_item * researchItem, bool withGap); + // 0x0098177C static rct_window_event_list window_editor_inventions_list_events = { window_editor_inventions_list_close, @@ -711,8 +714,9 @@ static void window_editor_inventions_list_paint(rct_window *w, rct_drawpixelinfo x = w->x + ((widget->left + widget->right) / 2) + 1; y = w->y + widget->bottom + 3; width = w->width - w->widgets[WIDX_RESEARCH_ORDER_SCROLL].right - 6; - stringId = research_item_get_name(researchItem); - gfx_draw_string_centred_clipped(dpi, STR_WINDOW_COLOUR_2_STRINGID, &stringId, COLOUR_BLACK, x, y, width); + + rct_string_id drawString = window_editor_inventions_list_prepare_name(researchItem, false); + gfx_draw_string_centred_clipped(dpi, drawString, gCommonFormatArgs, COLOUR_BLACK, x, y, width); y += 15; // Item category @@ -780,6 +784,7 @@ static void window_editor_inventions_list_scrollpaint(rct_window *w, rct_drawpix continue; disableItemMovement = research_item_is_always_researched(researchItem); + stringId = research_item_get_name(researchItem); ptr = buffer; @@ -787,7 +792,19 @@ static void window_editor_inventions_list_scrollpaint(rct_window *w, rct_drawpix ptr = utf8_write_codepoint(ptr, colour); } - format_string(ptr, 256, stringId, nullptr); + if (researchItem->type == RESEARCH_ENTRY_TYPE_RIDE && !RideGroupManager::RideTypeIsIndependent(researchItem->baseRideType)) + { + const rct_string_id rideGroupName = get_ride_naming(researchItem->baseRideType, get_ride_entry(researchItem->entryIndex)).name; + rct_string_id args[] = { + rideGroupName, + stringId + }; + format_string(ptr, 256, STR_INVENTIONS_LIST_RIDE_AND_VEHICLE_NAME, &args); + } + else + { + format_string(ptr, 256, stringId, nullptr); + } if (disableItemMovement) { gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM_DARK; @@ -814,16 +831,29 @@ static void window_editor_inventions_list_scrollpaint(rct_window *w, rct_drawpix */ static void window_editor_inventions_list_drag_open(rct_research_item *researchItem) { - char buffer[256]; + char buffer[256], *ptr; sint32 stringWidth; - rct_string_id stringId; rct_window *w; window_close_by_class(WC_EDITOR_INVENTION_LIST_DRAG); _editorInventionsListDraggedItem = researchItem; + rct_string_id stringId = research_item_get_name(researchItem); + + ptr = buffer; + if (researchItem->type == RESEARCH_ENTRY_TYPE_RIDE && !RideGroupManager::RideTypeIsIndependent(researchItem->baseRideType)) + { + const rct_string_id rideGroupName = get_ride_naming(researchItem->baseRideType, get_ride_entry(researchItem->entryIndex)).name; + rct_string_id args[] = { + rideGroupName, + stringId + }; + format_string(ptr, 256, STR_INVENTIONS_LIST_RIDE_AND_VEHICLE_NAME, &args); + } + else + { + format_string(ptr, 256, stringId, nullptr); + } - stringId = research_item_get_name(researchItem); - format_string(buffer, 256, stringId, nullptr); stringWidth = gfx_get_string_width(buffer); window_editor_inventions_list_drag_widgets[0].right = stringWidth; @@ -882,13 +912,34 @@ static void window_editor_inventions_list_drag_moved(rct_window* w, sint32 x, si */ static void window_editor_inventions_list_drag_paint(rct_window *w, rct_drawpixelinfo *dpi) { - rct_string_id stringId; + rct_string_id drawString; sint32 x, y; x = w->x; y = w->y + 2; - stringId = research_item_get_name(_editorInventionsListDraggedItem); - gfx_draw_string_left(dpi, STR_WINDOW_COLOUR_2_STRINGID, &stringId, COLOUR_BLACK | COLOUR_FLAG_OUTLINE, x, y); + drawString = window_editor_inventions_list_prepare_name(_editorInventionsListDraggedItem, true); + gfx_draw_string_left(dpi, drawString, gCommonFormatArgs, COLOUR_BLACK | COLOUR_FLAG_OUTLINE, x, y); +} + +static rct_string_id window_editor_inventions_list_prepare_name(const rct_research_item * researchItem, bool withGap) +{ + rct_string_id drawString; + rct_string_id stringId = research_item_get_name(researchItem); + + if (researchItem->type == RESEARCH_ENTRY_TYPE_RIDE && !RideGroupManager::RideTypeIsIndependent(researchItem->baseRideType)) + { + drawString = withGap ? STR_INVENTIONS_LIST_RIDE_AND_VEHICLE_NAME_DRAG : STR_WINDOW_COLOUR_2_STRINGID_STRINGID; + rct_string_id rideGroupName = get_ride_naming(researchItem->baseRideType, get_ride_entry(researchItem->entryIndex)).name; + set_format_arg(0, rct_string_id, rideGroupName); + set_format_arg(2, rct_string_id, stringId); + } + else + { + drawString = STR_WINDOW_COLOUR_2_STRINGID; + set_format_arg(0, rct_string_id, stringId); + } + + return drawString; } #pragma endregion diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index eafa4fdb3e..a2fffce9a5 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -3891,6 +3891,10 @@ enum { STR_EARLY_COMPLETION_TIP = 6227, STR_SCENARIO_OPTIONS = 6228, + STR_WINDOW_COLOUR_2_STRINGID_STRINGID = 6229, + STR_INVENTIONS_LIST_RIDE_AND_VEHICLE_NAME = 6230, + STR_INVENTIONS_LIST_RIDE_AND_VEHICLE_NAME_DRAG = 6231, + // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working STR_COUNT = 32768 }; diff --git a/src/openrct2/management/Research.cpp b/src/openrct2/management/Research.cpp index 0518d327b3..7f5693f631 100644 --- a/src/openrct2/management/Research.cpp +++ b/src/openrct2/management/Research.cpp @@ -775,7 +775,7 @@ void set_every_ride_entry_not_invented() * * rct2: 0x0068563D */ -rct_string_id research_item_get_name(rct_research_item * researchItem) +rct_string_id research_item_get_name(const rct_research_item * researchItem) { if (researchItem->type == RESEARCH_ENTRY_TYPE_RIDE) diff --git a/src/openrct2/management/Research.h b/src/openrct2/management/Research.h index bc40e9a698..b7b2e708b2 100644 --- a/src/openrct2/management/Research.h +++ b/src/openrct2/management/Research.h @@ -139,7 +139,7 @@ void set_every_ride_type_invented(); void set_every_ride_type_not_invented(); void set_every_ride_entry_invented(); void set_every_ride_entry_not_invented(); -rct_string_id research_item_get_name(rct_research_item * researchItem); +rct_string_id research_item_get_name(const rct_research_item * researchItem); rct_string_id research_get_friendly_base_ride_type_name(uint8 trackType, rct_ride_entry * rideEntry); void research_remove_flags(); void research_fix();