1
0
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:
Aaron van Geffen
2025-03-25 08:59:30 +01:00
committed by GitHub
parent 70bdddcf36
commit 7efb6e7835
5 changed files with 96 additions and 75 deletions

View File

@@ -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).

View File

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

View File

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

View File

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

View File

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