1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-30 02:05:13 +01:00

Create slope and colour functions for WallElement

This commit is contained in:
Michael Steenbeek
2018-09-17 14:10:05 +02:00
parent c7632f29a0
commit 533e937926
3 changed files with 67 additions and 6 deletions

View File

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

View File

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

View File

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