From 4e9ca39c4ae544cb947d9ebbb0f48a36b4fd0b7c Mon Sep 17 00:00:00 2001 From: Ted John Date: Sat, 4 Dec 2021 04:09:19 +0000 Subject: [PATCH] Refactor station covers to use ImageId --- src/openrct2/object/StationObject.cpp | 4 +-- src/openrct2/object/StationObject.h | 5 +-- src/openrct2/ride/TrackPaint.cpp | 50 +++++++-------------------- 3 files changed, 18 insertions(+), 41 deletions(-) diff --git a/src/openrct2/object/StationObject.cpp b/src/openrct2/object/StationObject.cpp index 8e386294ad..0fcd5b4907 100644 --- a/src/openrct2/object/StationObject.cpp +++ b/src/openrct2/object/StationObject.cpp @@ -41,8 +41,8 @@ void StationObject::Unload() gfx_object_free_images(BaseImageId, GetImageTable().GetCount()); NameStringId = 0; - BaseImageId = 0; - ShelterImageId = 0; + BaseImageId = ImageIndexUndefined; + ShelterImageId = ImageIndexUndefined; } void StationObject::DrawPreview(rct_drawpixelinfo* dpi, int32_t width, int32_t height) const diff --git a/src/openrct2/object/StationObject.h b/src/openrct2/object/StationObject.h index 45f4e8350b..a335e918ea 100644 --- a/src/openrct2/object/StationObject.h +++ b/src/openrct2/object/StationObject.h @@ -9,6 +9,7 @@ #pragma once +#include "../drawing/ImageId.hpp" #include "Object.h" namespace STATION_OBJECT_FLAGS @@ -24,8 +25,8 @@ class StationObject final : public Object { public: rct_string_id NameStringId{}; - uint32_t BaseImageId{}; - uint32_t ShelterImageId{}; + ImageIndex BaseImageId = ImageIndexUndefined; + ImageIndex ShelterImageId = ImageIndexUndefined; uint32_t Flags{}; int32_t Height{}; uint8_t ScrollingMode{}; diff --git a/src/openrct2/ride/TrackPaint.cpp b/src/openrct2/ride/TrackPaint.cpp index 1b135afaad..908021c998 100644 --- a/src/openrct2/ride/TrackPaint.cpp +++ b/src/openrct2/ride/TrackPaint.cpp @@ -796,23 +796,16 @@ bool track_paint_util_draw_station_covers_2( return false; } + auto baseImageIndex = stationObject->ShelterImageId; + if (baseImageIndex == ImageIndexUndefined) + return false; + static constexpr const int16_t heights[][2] = { { 22, 0 }, { 30, 0 }, { 46, 0 }, }; - uint32_t imageId; - uint32_t baseImageId = stationObject->ShelterImageId; - if (stationObject->Flags & STATION_OBJECT_FLAGS::HAS_SECONDARY_COLOUR) - { - baseImageId |= IMAGE_TYPE_REMAP_2_PLUS; - } - if (stationObject->Flags & STATION_OBJECT_FLAGS::IS_TRANSPARENT) - { - baseImageId |= IMAGE_TYPE_TRANSPARENT; - } - int32_t imageOffset = 0; CoordsXYZ bounds, boundsOffset; CoordsXYZ offset = CoordsXYZ(0, 0, height); @@ -840,38 +833,21 @@ bool track_paint_util_draw_station_covers_2( break; } - if (session->TrackColours[SCHEME_MISC] != IMAGE_TYPE_REMAP) - { - baseImageId &= 0x7FFFF; - } - - if (baseImageId <= 0x20) - { - return false; - } - if (stationVariant == STATION_VARIANT_TALL) { imageOffset += SPR_STATION_COVER_OFFSET_TALL; } - if (baseImageId & IMAGE_TYPE_TRANSPARENT) - { - imageId = (baseImageId & ~IMAGE_TYPE_TRANSPARENT) + imageOffset; - PaintAddImageAsParent(session, imageId, offset, bounds, boundsOffset); - - uint32_t edi = session->TrackColours[SCHEME_TRACK] & (0b11111 << 19); - - // weird jump - imageId = (baseImageId | edi) + ((1 << 23) | (1 << 24) | (1 << 25)) + imageOffset + 12; - PaintAddImageAsChild( - session, imageId, static_cast(offset.x), static_cast(offset.y), bounds.x, bounds.y, - static_cast(bounds.z), offset.z, boundsOffset.x, boundsOffset.y, boundsOffset.z); - return true; - } - - imageId = (baseImageId + imageOffset) | session->TrackColours[SCHEME_TRACK]; + auto imageTemplate = ImageId::FromUInt32(session->TrackColours[SCHEME_TRACK]); + auto imageId = imageTemplate.WithIndex(baseImageIndex + imageOffset); PaintAddImageAsParent(session, imageId, offset, bounds, boundsOffset); + + // Glass + if (session->TrackColours[SCHEME_MISC] == IMAGE_TYPE_REMAP && (stationObject->Flags & STATION_OBJECT_FLAGS::IS_TRANSPARENT)) + { + imageId = ImageId(baseImageIndex + imageOffset + 12).WithTransparancy(imageTemplate.GetPrimary()); + PaintAddImageAsChild(session, imageId, offset, bounds, boundsOffset); + } return true; }