From 533e9379267fcb69117a69349156d6e0809db1c7 Mon Sep 17 00:00:00 2001 From: Michael Steenbeek Date: Mon, 17 Sep 2018 14:10:05 +0200 Subject: [PATCH] Create slope and colour functions for WallElement --- src/openrct2/world/TileElement.cpp | 5 --- src/openrct2/world/TileElement.h | 18 ++++++++++- src/openrct2/world/Wall.cpp | 50 ++++++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 6 deletions(-) diff --git a/src/openrct2/world/TileElement.cpp b/src/openrct2/world/TileElement.cpp index 62ec8c6dd9..5d35b4d67f 100644 --- a/src/openrct2/world/TileElement.cpp +++ b/src/openrct2/world/TileElement.cpp @@ -54,11 +54,6 @@ bool TileElementBase::IsGhost() const return (this->flags & TILE_ELEMENT_FLAG_GHOST) != 0; } -uint8_t WallElement::GetSlope() const -{ - return (this->type & TILE_ELEMENT_QUADRANT_MASK) >> 6; -} - bool tile_element_is_underground(rct_tile_element* tileElement) { do diff --git a/src/openrct2/world/TileElement.h b/src/openrct2/world/TileElement.h index 87a55b6577..96d06d1160 100644 --- a/src/openrct2/world/TileElement.h +++ b/src/openrct2/world/TileElement.h @@ -297,10 +297,26 @@ assert_struct_size(LargeSceneryElement, 8); struct WallElement : TileElementBase { - rct_tile_element_wall_properties temp; +//private: + uint8_t entryIndex; // 4 + union + { + uint8_t colour_3; // 5 + BannerIndex banner_index; // 5 + }; + uint8_t colour_1; // 6 0b_2221_1111 2 = colour_2 (uses flags for rest of colour2), 1 = colour_1 + uint8_t animation; // 7 0b_dfff_ft00 d = direction, f = frame num, t = across track flag (not used) public: uint8_t GetSlope() const; + void SetSlope(uint8_t newslope); + + colour_t GetPrimaryColour() const; + void SetPrimaryColour(colour_t newColour); + colour_t GetSecondaryColour() const; + void SetSecondaryColour(colour_t newColour); + colour_t GetTertiaryColour() const; + void SetTertiaryColour(colour_t newColour); }; assert_struct_size(WallElement, 8); diff --git a/src/openrct2/world/Wall.cpp b/src/openrct2/world/Wall.cpp index 7f58052342..008e7f4cbb 100644 --- a/src/openrct2/world/Wall.cpp +++ b/src/openrct2/world/Wall.cpp @@ -749,3 +749,53 @@ void game_command_set_wall_colour( *eax & 0xFFFF, *ecx & 0xFFFF, (*edx >> 8) & 0xFF, *edx & 0xFF, (*ebx >> 8) & 0xFF, *ebp & 0xFF, (*ebp >> 8) & 0xFF, *ebx & 0xFF); } + +uint8_t WallElement::GetSlope() const +{ + return (type & TILE_ELEMENT_QUADRANT_MASK) >> 6; +} + +void WallElement::SetSlope(uint8_t newSlope) +{ + type &= ~TILE_ELEMENT_QUADRANT_MASK; + type |= (newSlope << 6); +} + +colour_t WallElement::GetPrimaryColour() const +{ + return colour_1 & TILE_ELEMENT_COLOUR_MASK; +} + +colour_t WallElement::GetSecondaryColour() const +{ + uint8_t secondaryColour = (colour_1 & ~TILE_ELEMENT_COLOUR_MASK) >> 5; + secondaryColour |= (flags & 0x60) >> 2; + return secondaryColour; +} + +colour_t WallElement::GetTertiaryColour() const +{ + return colour_3 & TILE_ELEMENT_COLOUR_MASK; +} + +void WallElement::SetPrimaryColour(colour_t newColour) +{ + assert(newColour <= 31); + colour_1 &= ~TILE_ELEMENT_COLOUR_MASK; + colour_1 |= newColour; +} + +void WallElement::SetSecondaryColour(colour_t newColour) +{ + colour_1 &= TILE_ELEMENT_COLOUR_MASK; + colour_1 |= (newColour & 0x7) << 5; + flags &= ~0x60; + flags |= (newColour & 0x18) << 2; +} + +void WallElement::SetTertiaryColour(colour_t newColour) +{ + assert(newColour <= 31); + colour_3 &= ~TILE_ELEMENT_COLOUR_MASK; + colour_3 |= newColour; +} \ No newline at end of file