mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-06 06:32:56 +01:00
Generalise dropdown tooltips and add tooltips to footpath window (#24070)
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
- Change: [#23932] The land rights window now checks “Land Owned” by default.
|
||||
- Change: [#23936] The ‘guests prefer less/more intense rides’ settings have been turned into a dropdown.
|
||||
- Change: [#24067] [Plugin] Registered menu items are now listed alphabetically.
|
||||
- Change: [#24070] Footpath selection menus now show object names on hover using a tooltip.
|
||||
- Fix: [#4225] Ride Construction window offers non-existent banked sloped to level curve (original bug).
|
||||
- Fix: [#5281] Missing supports on miniature railways built backwards.
|
||||
- Fix: [#10379] Banners outside the park can be renamed and modified (original bug).
|
||||
|
||||
@@ -1237,65 +1237,6 @@ namespace OpenRCT2
|
||||
}
|
||||
}
|
||||
|
||||
const std::map<colour_t, StringId> kColourToTip = {
|
||||
{ COLOUR_BLACK, STR_COLOUR_BLACK_TIP },
|
||||
{ COLOUR_GREY, STR_COLOUR_GREY_TIP },
|
||||
{ COLOUR_WHITE, STR_COLOUR_WHITE_TIP },
|
||||
{ COLOUR_DARK_PURPLE, STR_COLOUR_DARK_PURPLE_TIP },
|
||||
{ COLOUR_LIGHT_PURPLE, STR_COLOUR_LIGHT_PURPLE_TIP },
|
||||
{ COLOUR_BRIGHT_PURPLE, STR_COLOUR_BRIGHT_PURPLE_TIP },
|
||||
{ COLOUR_DARK_BLUE, STR_COLOUR_DARK_BLUE_TIP },
|
||||
{ COLOUR_LIGHT_BLUE, STR_COLOUR_LIGHT_BLUE_TIP },
|
||||
{ COLOUR_ICY_BLUE, STR_COLOUR_ICY_BLUE_TIP },
|
||||
{ COLOUR_TEAL, STR_COLOUR_TEAL_TIP },
|
||||
{ COLOUR_AQUAMARINE, STR_COLOUR_AQUAMARINE_TIP },
|
||||
{ COLOUR_SATURATED_GREEN, STR_COLOUR_SATURATED_GREEN_TIP },
|
||||
{ COLOUR_DARK_GREEN, STR_COLOUR_DARK_GREEN_TIP },
|
||||
{ COLOUR_MOSS_GREEN, STR_COLOUR_MOSS_GREEN_TIP },
|
||||
{ COLOUR_BRIGHT_GREEN, STR_COLOUR_BRIGHT_GREEN_TIP },
|
||||
{ COLOUR_OLIVE_GREEN, STR_COLOUR_OLIVE_GREEN_TIP },
|
||||
{ COLOUR_DARK_OLIVE_GREEN, STR_COLOUR_DARK_OLIVE_GREEN_TIP },
|
||||
{ COLOUR_BRIGHT_YELLOW, STR_COLOUR_BRIGHT_YELLOW_TIP },
|
||||
{ COLOUR_YELLOW, STR_COLOUR_YELLOW_TIP },
|
||||
{ COLOUR_DARK_YELLOW, STR_COLOUR_DARK_YELLOW_TIP },
|
||||
{ COLOUR_LIGHT_ORANGE, STR_COLOUR_LIGHT_ORANGE_TIP },
|
||||
{ COLOUR_DARK_ORANGE, STR_COLOUR_DARK_ORANGE_TIP },
|
||||
{ COLOUR_LIGHT_BROWN, STR_COLOUR_LIGHT_BROWN_TIP },
|
||||
{ COLOUR_SATURATED_BROWN, STR_COLOUR_SATURATED_BROWN_TIP },
|
||||
{ COLOUR_DARK_BROWN, STR_COLOUR_DARK_BROWN_TIP },
|
||||
{ COLOUR_SALMON_PINK, STR_COLOUR_SALMON_PINK_TIP },
|
||||
{ COLOUR_BORDEAUX_RED, STR_COLOUR_BORDEAUX_RED_TIP },
|
||||
{ COLOUR_SATURATED_RED, STR_COLOUR_SATURATED_RED_TIP },
|
||||
{ COLOUR_BRIGHT_RED, STR_COLOUR_BRIGHT_RED_TIP },
|
||||
{ COLOUR_DARK_PINK, STR_COLOUR_DARK_PINK_TIP },
|
||||
{ COLOUR_BRIGHT_PINK, STR_COLOUR_BRIGHT_PINK_TIP },
|
||||
{ COLOUR_LIGHT_PINK, STR_COLOUR_LIGHT_PINK_TIP },
|
||||
{ COLOUR_DARK_OLIVE_DARK, STR_COLOUR_DARK_OLIVE_DARK_TIP },
|
||||
{ COLOUR_DARK_OLIVE_LIGHT, STR_COLOUR_DARK_OLIVE_LIGHT_TIP },
|
||||
{ COLOUR_SATURATED_BROWN_LIGHT, STR_COLOUR_SATURATED_BROWN_LIGHT_TIP },
|
||||
{ COLOUR_BORDEAUX_RED_DARK, STR_COLOUR_BORDEAUX_RED_DARK_TIP },
|
||||
{ COLOUR_BORDEAUX_RED_LIGHT, STR_COLOUR_BORDEAUX_RED_LIGHT_TIP },
|
||||
{ COLOUR_GRASS_GREEN_DARK, STR_COLOUR_GRASS_GREEN_DARK_TIP },
|
||||
{ COLOUR_GRASS_GREEN_LIGHT, STR_COLOUR_GRASS_GREEN_LIGHT_TIP },
|
||||
{ COLOUR_OLIVE_DARK, STR_COLOUR_OLIVE_DARK_TIP },
|
||||
{ COLOUR_OLIVE_LIGHT, STR_COLOUR_OLIVE_LIGHT_TIP },
|
||||
{ COLOUR_SATURATED_GREEN_LIGHT, STR_COLOUR_SATURATED_GREEN_LIGHT_TIP },
|
||||
{ COLOUR_TAN_DARK, STR_COLOUR_TAN_DARK_TIP },
|
||||
{ COLOUR_TAN_LIGHT, STR_COLOUR_TAN_LIGHT_TIP },
|
||||
{ COLOUR_DULL_PURPLE_LIGHT, STR_COLOUR_DULL_PURPLE_LIGHT_TIP },
|
||||
{ COLOUR_DULL_GREEN_DARK, STR_COLOUR_DULL_GREEN_DARK_TIP },
|
||||
{ COLOUR_DULL_GREEN_LIGHT, STR_COLOUR_DULL_GREEN_LIGHT_TIP },
|
||||
{ COLOUR_SATURATED_PURPLE_DARK, STR_COLOUR_SATURATED_PURPLE_DARK_TIP },
|
||||
{ COLOUR_SATURATED_PURPLE_LIGHT, STR_COLOUR_SATURATED_PURPLE_LIGHT_TIP },
|
||||
{ COLOUR_ORANGE_LIGHT, STR_COLOUR_ORANGE_LIGHT_TIP },
|
||||
{ COLOUR_AQUA_DARK, STR_COLOUR_AQUA_DARK_TIP },
|
||||
{ COLOUR_MAGENTA_LIGHT, STR_COLOUR_MAGENTA_LIGHT_TIP },
|
||||
{ COLOUR_DULL_BROWN_DARK, STR_COLOUR_DULL_BROWN_DARK_TIP },
|
||||
{ COLOUR_DULL_BROWN_LIGHT, STR_COLOUR_DULL_BROWN_LIGHT_TIP },
|
||||
{ COLOUR_INVISIBLE, STR_COLOUR_INVISIBLE_TIP },
|
||||
{ COLOUR_VOID, STR_COLOUR_VOID_TIP },
|
||||
};
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006E8DA7
|
||||
@@ -1505,7 +1446,7 @@ namespace OpenRCT2
|
||||
}
|
||||
return;
|
||||
}
|
||||
else if (gDropdownIsColour)
|
||||
else if (gDropdownHasTooltips)
|
||||
{
|
||||
// This is ordinarily covered in InputWidgetOver but the dropdown with colours is a special case.
|
||||
InputUpdateTooltip(w, widgetIndex, screenCoords);
|
||||
@@ -1526,13 +1467,12 @@ namespace OpenRCT2
|
||||
return;
|
||||
}
|
||||
|
||||
if (gDropdownIsColour && gDropdownLastColourHover != dropdown_index)
|
||||
if (gDropdownHasTooltips && gDropdownLastTooltipHover != dropdown_index)
|
||||
{
|
||||
gDropdownLastColourHover = dropdown_index;
|
||||
gDropdownLastTooltipHover = dropdown_index;
|
||||
WindowTooltipClose();
|
||||
|
||||
WindowTooltipShow(
|
||||
OpenRCT2String{ kColourToTip.at(ColourDropDownIndexToColour(dropdown_index)), {} }, screenCoords);
|
||||
WindowTooltipShow(OpenRCT2String{ gDropdownTooltips[dropdown_index], {} }, screenCoords);
|
||||
}
|
||||
|
||||
if (dropdown_index < Dropdown::kItemsMaxSize && Dropdown::IsDisabled(dropdown_index))
|
||||
@@ -1550,7 +1490,7 @@ namespace OpenRCT2
|
||||
}
|
||||
else
|
||||
{
|
||||
gDropdownLastColourHover = -1;
|
||||
gDropdownLastTooltipHover = -1;
|
||||
WindowTooltipClose();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <array>
|
||||
#include <openrct2-ui/UiStringIds.h>
|
||||
#include <openrct2/core/EnumUtils.hpp>
|
||||
#include <openrct2/interface/Window.h>
|
||||
@@ -28,9 +29,10 @@ namespace OpenRCT2::Dropdown
|
||||
namespace OpenRCT2::Ui::Windows
|
||||
{
|
||||
extern int32_t gDropdownNumItems;
|
||||
extern Dropdown::Item gDropdownItems[Dropdown::kItemsMaxSize];
|
||||
extern bool gDropdownIsColour;
|
||||
extern int32_t gDropdownLastColourHover;
|
||||
extern std::array<Dropdown::Item, Dropdown::kItemsMaxSize> gDropdownItems;
|
||||
extern std::array<StringId, Dropdown::kItemsMaxSize> gDropdownTooltips;
|
||||
extern bool gDropdownHasTooltips;
|
||||
extern int32_t gDropdownLastTooltipHover;
|
||||
extern int32_t gDropdownHighlightedIndex;
|
||||
extern int32_t gDropdownDefaultIndex;
|
||||
|
||||
|
||||
@@ -46,11 +46,13 @@ namespace OpenRCT2::Ui::Windows
|
||||
MakeWidget({ 0, 0 }, { 1, 1 }, WindowWidgetType::ImgBtn, WindowColour::Primary),
|
||||
};
|
||||
|
||||
std::array<Dropdown::Item, Dropdown::kItemsMaxSize> gDropdownItems;
|
||||
std::array<StringId, Dropdown::kItemsMaxSize> gDropdownTooltips;
|
||||
static std::array<ImageId, Dropdown::kItemsMaxSize> _dropdownItemsImages;
|
||||
|
||||
int32_t gDropdownNumItems;
|
||||
Dropdown::Item gDropdownItems[Dropdown::kItemsMaxSize];
|
||||
static ImageId _dropdownItemsImages[Dropdown::kItemsMaxSize];
|
||||
bool gDropdownIsColour;
|
||||
int32_t gDropdownLastColourHover;
|
||||
bool gDropdownHasTooltips;
|
||||
int32_t gDropdownLastTooltipHover;
|
||||
int32_t gDropdownHighlightedIndex;
|
||||
int32_t gDropdownDefaultIndex;
|
||||
static bool _dropdownPrepareUseImages;
|
||||
@@ -80,7 +82,7 @@ namespace OpenRCT2::Ui::Windows
|
||||
// Input state
|
||||
gDropdownHighlightedIndex = -1;
|
||||
ResetDropdownFlags();
|
||||
gDropdownIsColour = false;
|
||||
gDropdownHasTooltips = false;
|
||||
gDropdownDefaultIndex = -1;
|
||||
InputSetState(InputState::DropdownActive);
|
||||
}
|
||||
@@ -492,6 +494,71 @@ namespace OpenRCT2::Ui::Windows
|
||||
COLOUR_VOID,
|
||||
};
|
||||
|
||||
constexpr std::array kColourTooltips = {
|
||||
STR_COLOUR_BLACK_TIP,
|
||||
STR_COLOUR_SATURATED_RED_TIP,
|
||||
STR_COLOUR_DARK_ORANGE_TIP,
|
||||
STR_COLOUR_DARK_YELLOW_TIP,
|
||||
STR_COLOUR_GRASS_GREEN_DARK_TIP,
|
||||
STR_COLOUR_SATURATED_GREEN_TIP,
|
||||
STR_COLOUR_AQUA_DARK_TIP,
|
||||
STR_COLOUR_DARK_BLUE_TIP,
|
||||
STR_COLOUR_SATURATED_PURPLE_DARK_TIP,
|
||||
|
||||
STR_COLOUR_GREY_TIP,
|
||||
STR_COLOUR_BRIGHT_RED_TIP,
|
||||
STR_COLOUR_LIGHT_ORANGE_TIP,
|
||||
STR_COLOUR_YELLOW_TIP,
|
||||
STR_COLOUR_MOSS_GREEN_TIP,
|
||||
STR_COLOUR_BRIGHT_GREEN_TIP,
|
||||
STR_COLOUR_TEAL_TIP,
|
||||
STR_COLOUR_LIGHT_BLUE_TIP,
|
||||
STR_COLOUR_BRIGHT_PURPLE_TIP,
|
||||
|
||||
STR_COLOUR_WHITE_TIP,
|
||||
STR_COLOUR_LIGHT_PINK_TIP,
|
||||
STR_COLOUR_ORANGE_LIGHT_TIP,
|
||||
STR_COLOUR_BRIGHT_YELLOW_TIP,
|
||||
STR_COLOUR_GRASS_GREEN_LIGHT_TIP,
|
||||
STR_COLOUR_SATURATED_GREEN_LIGHT_TIP,
|
||||
STR_COLOUR_AQUAMARINE_TIP,
|
||||
STR_COLOUR_ICY_BLUE_TIP,
|
||||
STR_COLOUR_SATURATED_PURPLE_LIGHT_TIP,
|
||||
|
||||
STR_COLOUR_DULL_BROWN_DARK_TIP,
|
||||
STR_COLOUR_BORDEAUX_RED_DARK_TIP,
|
||||
STR_COLOUR_TAN_DARK_TIP,
|
||||
STR_COLOUR_SATURATED_BROWN_TIP,
|
||||
STR_COLOUR_DARK_OLIVE_DARK_TIP,
|
||||
STR_COLOUR_OLIVE_DARK_TIP,
|
||||
STR_COLOUR_DULL_GREEN_DARK_TIP,
|
||||
STR_COLOUR_DARK_PURPLE_TIP,
|
||||
STR_COLOUR_DARK_PINK_TIP,
|
||||
|
||||
STR_COLOUR_DARK_BROWN_TIP,
|
||||
STR_COLOUR_BORDEAUX_RED_TIP,
|
||||
STR_COLOUR_SALMON_PINK_TIP,
|
||||
STR_COLOUR_LIGHT_BROWN_TIP,
|
||||
STR_COLOUR_DARK_OLIVE_GREEN_TIP,
|
||||
STR_COLOUR_OLIVE_GREEN_TIP,
|
||||
STR_COLOUR_DARK_GREEN_TIP,
|
||||
STR_COLOUR_LIGHT_PURPLE_TIP,
|
||||
STR_COLOUR_BRIGHT_PINK_TIP,
|
||||
|
||||
STR_COLOUR_DULL_BROWN_LIGHT_TIP,
|
||||
STR_COLOUR_BORDEAUX_RED_LIGHT_TIP,
|
||||
STR_COLOUR_TAN_LIGHT_TIP,
|
||||
STR_COLOUR_SATURATED_BROWN_LIGHT_TIP,
|
||||
STR_COLOUR_DARK_OLIVE_LIGHT_TIP,
|
||||
STR_COLOUR_OLIVE_LIGHT_TIP,
|
||||
STR_COLOUR_DULL_GREEN_LIGHT_TIP,
|
||||
STR_COLOUR_DULL_PURPLE_LIGHT_TIP,
|
||||
STR_COLOUR_MAGENTA_LIGHT_TIP,
|
||||
|
||||
STR_COLOUR_INVISIBLE_TIP,
|
||||
STR_COLOUR_VOID_TIP,
|
||||
};
|
||||
|
||||
colour_t ColourDropDownIndexToColour(uint8_t ddidx)
|
||||
{
|
||||
return kColoursDropdownOrder[ddidx];
|
||||
@@ -529,8 +596,10 @@ namespace OpenRCT2::Ui::Windows
|
||||
Dropdown::Flag::StayOpen, numColours, squareSize, squareSize,
|
||||
DropdownGetAppropriateImageDropdownItemsPerRow(static_cast<uint32_t>(numColours)));
|
||||
|
||||
gDropdownIsColour = true;
|
||||
gDropdownLastColourHover = -1;
|
||||
std::copy(kColourTooltips.begin(), kColourTooltips.end(), gDropdownTooltips.begin());
|
||||
|
||||
gDropdownHasTooltips = true;
|
||||
gDropdownLastTooltipHover = -1;
|
||||
gDropdownDefaultIndex = defaultIndex;
|
||||
}
|
||||
|
||||
|
||||
@@ -705,6 +705,7 @@ namespace OpenRCT2::Ui::Windows
|
||||
}
|
||||
|
||||
gDropdownItems[numPathTypes].Format = kStringIdNone;
|
||||
gDropdownTooltips[numPathTypes] = pathType->NameStringId;
|
||||
Dropdown::SetImage(numPathTypes, ImageId(pathType->PreviewImageId));
|
||||
_dropdownEntries.push_back({ ObjectType::footpathSurface, i });
|
||||
numPathTypes++;
|
||||
@@ -730,6 +731,7 @@ namespace OpenRCT2::Ui::Windows
|
||||
}
|
||||
|
||||
gDropdownItems[numPathTypes].Format = kStringIdNone;
|
||||
gDropdownTooltips[numPathTypes] = pathEntry->string_idx;
|
||||
Dropdown::SetImage(
|
||||
numPathTypes, ImageId(showQueues ? pathEntry->GetQueuePreviewImage() : pathEntry->GetPreviewImage()));
|
||||
_dropdownEntries.push_back({ ObjectType::paths, i });
|
||||
@@ -740,6 +742,9 @@ namespace OpenRCT2::Ui::Windows
|
||||
WindowDropdownShowImage(
|
||||
windowPos.x + widget->left, windowPos.y + widget->top, widget->height() + 1, colours[1], 0, numPathTypes, 47,
|
||||
36, itemsPerRow);
|
||||
|
||||
gDropdownHasTooltips = true;
|
||||
|
||||
if (defaultIndex)
|
||||
gDropdownDefaultIndex = static_cast<int32_t>(*defaultIndex);
|
||||
}
|
||||
@@ -764,6 +769,7 @@ namespace OpenRCT2::Ui::Windows
|
||||
}
|
||||
|
||||
gDropdownItems[numRailingsTypes].Format = kStringIdNone;
|
||||
gDropdownTooltips[numRailingsTypes] = railingsEntry->NameStringId;
|
||||
Dropdown::SetImage(numRailingsTypes, ImageId(railingsEntry->PreviewImageId));
|
||||
_dropdownEntries.push_back({ ObjectType::footpathRailings, i });
|
||||
numRailingsTypes++;
|
||||
@@ -773,6 +779,9 @@ namespace OpenRCT2::Ui::Windows
|
||||
WindowDropdownShowImage(
|
||||
windowPos.x + widget->left, windowPos.y + widget->top, widget->height() + 1, colours[1], 0, numRailingsTypes,
|
||||
47, 36, itemsPerRow);
|
||||
|
||||
gDropdownHasTooltips = true;
|
||||
|
||||
if (defaultIndex)
|
||||
gDropdownDefaultIndex = static_cast<int32_t>(*defaultIndex);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user