From f2ac6589351c408f3fc2e6b854c427ba31d29a17 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Wed, 26 May 2021 16:43:51 +0200 Subject: [PATCH] Show tracks list of music styles in Object Selection --- data/language/en-GB.txt | 3 ++ .../windows/EditorObjectSelection.cpp | 30 +++++++++++++++---- src/openrct2/localisation/StringIds.h | 4 +++ src/openrct2/object/MusicObject.cpp | 1 + src/openrct2/object/MusicObject.h | 1 + 5 files changed, 33 insertions(+), 6 deletions(-) diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index bebb127725..dcfacab5ab 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3691,6 +3691,9 @@ STR_6445 :Footpath Railings STR_6446 :{WINDOW_COLOUR_2}Surface name: {BLACK}{STRINGID} STR_6447 :{WINDOW_COLOUR_2}Railing name: {BLACK}{STRINGID} STR_6448 :Unsupported object format +STR_6449 :{WINDOW_COLOUR_2}Tracks: +STR_6450 :{BLACK}“{STRING}” +STR_6451 :{BLACK}“{STRING}” - {STRING} ############# # Scenarios # diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index 2e4e11589e..da0923d98c 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -1059,7 +1060,9 @@ static void window_editor_object_selection_paint(rct_window* w, rct_drawpixelinf DrawTextEllipsised(dpi, screenPos, width, STR_WINDOW_COLOUR_2_STRINGID, ft, { TextAlignment::CENTRE }); } - // Draw description of object + auto screenPos = w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_LIST].right + 4, widget->bottom + 23 }; + width = w->windowPos.x + w->width - screenPos.x - 4; + auto description = object_get_description(_loadedObject.get()); if (!description.empty()) { @@ -1067,14 +1070,29 @@ static void window_editor_object_selection_paint(rct_window* w, rct_drawpixelinf ft.Add(STR_STRING); ft.Add(description.c_str()); - auto screenPos = w->windowPos + ScreenCoordsXY{ w->widgets[WIDX_LIST].right + 4, widget->bottom + 18 }; - width = w->windowPos.x + w->width - screenPos.x - 4; - - DrawTextWrapped(dpi, screenPos + ScreenCoordsXY{ 0, 5 }, width, STR_WINDOW_COLOUR_2_STRINGID, ft); + screenPos.y += DrawTextWrapped(dpi, screenPos, width, STR_WINDOW_COLOUR_2_STRINGID, ft); } - auto screenPos = w->windowPos + ScreenCoordsXY{ w->width - 5, w->height - (LIST_ROW_HEIGHT * 5) }; + if (get_selected_object_type(w) == ObjectType::Music) + { + screenPos.y += DrawTextWrapped(dpi, screenPos, width, STR_MUSIC_OBJECT_TRACK_HEADER) + 2; + const auto* musicObject = reinterpret_cast(_loadedObject.get()); + for (size_t i = 0; i < musicObject->GetTrackCount(); i++) + { + const auto* track = musicObject->GetTrack(i); + if (track->Name.empty()) + continue; + auto stringId = track->Composer.empty() ? STR_MUSIC_OBJECT_TRACK_LIST_ITEM + : STR_MUSIC_OBJECT_TRACK_LIST_ITEM_WITH_COMPOSER; + auto ft = Formatter(); + ft.Add(track->Name.c_str()); + ft.Add(track->Composer.c_str()); + screenPos.y += DrawTextWrapped(dpi, screenPos + ScreenCoordsXY{ 10, 0 }, width, stringId, ft); + } + } + + screenPos = w->windowPos + ScreenCoordsXY{ w->width - 5, w->height - (LIST_ROW_HEIGHT * 5) }; // Draw ride type. if (get_selected_object_type(w) == ObjectType::Ride) { diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index 94b2634465..9e0d9af272 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -3943,6 +3943,10 @@ enum STR_VIEWPORT_TRANSPARENT_WATER = 6440, + STR_MUSIC_OBJECT_TRACK_HEADER = 6449, + STR_MUSIC_OBJECT_TRACK_LIST_ITEM = 6450, + STR_MUSIC_OBJECT_TRACK_LIST_ITEM_WITH_COMPOSER = 6451, + // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working /* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings }; diff --git a/src/openrct2/object/MusicObject.cpp b/src/openrct2/object/MusicObject.cpp index 825ef6098c..f61b6f65b2 100644 --- a/src/openrct2/object/MusicObject.cpp +++ b/src/openrct2/object/MusicObject.cpp @@ -106,6 +106,7 @@ void MusicObject::ParseTracks(IReadObjectContext& context, json_t& jTracks) { MusicObjectTrack track; track.Name = Json::GetString(jTrack["name"]); + track.Composer = Json::GetString(jTrack["composer"]); auto source = Json::GetString(jTrack["source"]); if (source.empty()) { diff --git a/src/openrct2/object/MusicObject.h b/src/openrct2/object/MusicObject.h index f25c448b00..43b519fadd 100644 --- a/src/openrct2/object/MusicObject.h +++ b/src/openrct2/object/MusicObject.h @@ -18,6 +18,7 @@ class MusicObjectTrack { public: std::string Name; + std::string Composer; ObjectAsset Asset; /**