1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-24 08:12:53 +01:00

Show tracks list of music styles in Object Selection

This commit is contained in:
Gymnasiast
2021-05-26 16:43:51 +02:00
parent 4be838a9b8
commit f2ac658935
5 changed files with 33 additions and 6 deletions

View File

@@ -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 #

View File

@@ -23,6 +23,7 @@
#include <openrct2/core/String.hpp>
#include <openrct2/drawing/Drawing.h>
#include <openrct2/localisation/Localisation.h>
#include <openrct2/object/MusicObject.h>
#include <openrct2/object/ObjectList.h>
#include <openrct2/object/ObjectManager.h>
#include <openrct2/object/ObjectRepository.h>
@@ -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<rct_string_id>(STR_STRING);
ft.Add<const char*>(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<MusicObject*>(_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<const char*>(track->Name.c_str());
ft.Add<const char*>(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)
{

View File

@@ -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
};

View File

@@ -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())
{

View File

@@ -18,6 +18,7 @@ class MusicObjectTrack
{
public:
std::string Name;
std::string Composer;
ObjectAsset Asset;
/**