1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 11:03:00 +01:00

Fix track design mini preview enlarged UI position

This commit is contained in:
mix
2025-11-09 00:20:34 +00:00
committed by GitHub
parent 6f24577027
commit ed25fbcb3a
2 changed files with 19 additions and 14 deletions

View File

@@ -7,6 +7,7 @@
- Fix: [#25461] Path connections in raised track designs are sometimes broken when placed.
- Fix: [#25467] Paths are not connected together correctly in track design previews.
- Fix: [#25476] When both RCT2 and RCT1 are present, autodetection fails.
- Fix: [#25480] The mini track design preview and price are misaligned in Enlarged UI mode.
0.4.28 (2025-11-01)
------------------------------------------------------------------------

View File

@@ -45,9 +45,7 @@ namespace OpenRCT2::Ui::Windows
{
static constexpr StringId kWindowTitle = STR_STRING;
static constexpr ScreenSize kWindowSize = { 200, 124 };
constexpr int16_t kTrackMiniPreviewWidth = 168;
constexpr int16_t kTrackMiniPreviewHeight = 78;
constexpr uint16_t kTrackMiniPreviewSize = kTrackMiniPreviewWidth * kTrackMiniPreviewHeight;
static constexpr ScreenSize kTrackMiniPreviewSize = { 168, 78 };
static constexpr uint8_t kPaletteIndexColourEntrance = PaletteIndex::pi20; // White
static constexpr uint8_t kPaletteIndexColourExit = PaletteIndex::pi10; // Black
@@ -62,7 +60,8 @@ namespace OpenRCT2::Ui::Windows
WIDX_ROTATE,
WIDX_MIRROR,
WIDX_SELECT_DIFFERENT_DESIGN,
WIDX_PRICE
WIDX_PRICE,
WIDX_PREVIEW,
};
VALIDATE_GLOBAL_WIDX(WC_TRACK_DESIGN_PLACE, WIDX_ROTATE);
@@ -70,10 +69,11 @@ namespace OpenRCT2::Ui::Windows
// clang-format off
static constexpr auto _trackPlaceWidgets = makeWidgets(
makeWindowShim(kWindowTitle, kWindowSize),
makeWidget({173, 83}, { 24, 24}, WidgetType::flatBtn, WindowColour::primary, ImageId(SPR_ROTATE_ARROW), STR_ROTATE_90_TIP ),
makeWidget({173, 59}, { 24, 24}, WidgetType::flatBtn, WindowColour::primary, ImageId(SPR_MIRROR_ARROW), STR_MIRROR_IMAGE_TIP ),
makeWidget({ 4, 109}, {192, 12}, WidgetType::button, WindowColour::primary, STR_SELECT_A_DIFFERENT_DESIGN, STR_GO_BACK_TO_DESIGN_SELECTION_WINDOW_TIP),
makeWidget({ 0, 0}, { 1, 1}, WidgetType::empty, WindowColour::primary)
makeWidget({173, 83}, { 24, 24}, WidgetType::flatBtn, WindowColour::primary, ImageId(SPR_ROTATE_ARROW), STR_ROTATE_90_TIP ),
makeWidget({173, 59}, { 24, 24}, WidgetType::flatBtn, WindowColour::primary, ImageId(SPR_MIRROR_ARROW), STR_MIRROR_IMAGE_TIP ),
makeWidget({ 4, 109}, {192, 12}, WidgetType::button, WindowColour::primary, STR_SELECT_A_DIFFERENT_DESIGN, STR_GO_BACK_TO_DESIGN_SELECTION_WINDOW_TIP),
makeWidget({ 88, 93}, { 1, 1}, WidgetType::empty, WindowColour::primary),
makeWidget({ 4, 17}, kTrackMiniPreviewSize, WidgetType::empty, WindowColour::primary)
);
// clang-format on
@@ -111,7 +111,7 @@ namespace OpenRCT2::Ui::Windows
gInputFlags.set(InputFlag::unk6);
WindowPushOthersRight(*this);
ShowGridlines();
_miniPreview.resize(kTrackMiniPreviewSize);
_miniPreview.resize(kTrackMiniPreviewSize.width * kTrackMiniPreviewSize.height);
_placementCost = kMoney64Undefined;
_placementLoc.SetNull();
_currentTrackPieceDirection = (2 - GetCurrentRotation()) & 3;
@@ -360,12 +360,14 @@ namespace OpenRCT2::Ui::Windows
// Draw mini tile preview
RenderTarget clippedRT;
if (ClipDrawPixelInfo(clippedRT, rt, this->windowPos + ScreenCoordsXY{ 4, 18 }, 168, 78))
const auto& previewWidget = widgets[WIDX_PREVIEW];
const auto previewCoords = windowPos + ScreenCoordsXY{ previewWidget.left, previewWidget.top };
if (ClipDrawPixelInfo(clippedRT, rt, previewCoords, previewWidget.width(), previewWidget.height()))
{
G1Element g1temp = {};
g1temp.offset = _miniPreview.data();
g1temp.width = kTrackMiniPreviewWidth;
g1temp.height = kTrackMiniPreviewHeight;
g1temp.width = kTrackMiniPreviewSize.width;
g1temp.height = kTrackMiniPreviewSize.height;
GfxSetG1Element(SPR_TEMP, &g1temp);
DrawingEngineInvalidateImage(SPR_TEMP);
GfxDrawSprite(clippedRT, ImageId(SPR_TEMP, this->colours[0].colour), { 0, 0 });
@@ -376,7 +378,9 @@ namespace OpenRCT2::Ui::Windows
{
ft = Formatter();
ft.Add<money64>(_placementCost);
DrawTextBasic(rt, this->windowPos + ScreenCoordsXY{ 88, 94 }, STR_COST_LABEL, ft, { TextAlignment::centre });
const auto& priceWidget = widgets[WIDX_PRICE];
const auto priceCoords = windowPos + ScreenCoordsXY{ priceWidget.left, priceWidget.top };
DrawTextBasic(rt, priceCoords, STR_COST_LABEL, ft, { TextAlignment::centre });
}
}
@@ -735,7 +739,7 @@ namespace OpenRCT2::Ui::Windows
uint8_t* DrawMiniPreviewGetPixelPtr(const ScreenCoordsXY& pixel)
{
return &_miniPreview[pixel.y * kTrackMiniPreviewWidth + pixel.x];
return &_miniPreview[pixel.y * kTrackMiniPreviewSize.width + pixel.x];
}
GameActions::Result FindValidTrackDesignPlaceHeight(CoordsXYZ& loc, uint32_t newFlags)