Hide brown base on flat rides if "no platform" station style is selected

This commit is contained in:
Gymnasiast 2021-07-27 16:33:03 +02:00
parent 33ce96b6d9
commit 0de7f28c93
No known key found for this signature in database
GPG Key ID: DBFFF47AB2CA3EDD
15 changed files with 67 additions and 20 deletions

View File

@ -94,6 +94,7 @@ void StationObject::ReadJson(IReadObjectContext* context, json_t& root)
{ "hasPrimaryColour", STATION_OBJECT_FLAGS::HAS_PRIMARY_COLOUR },
{ "hasSecondaryColour", STATION_OBJECT_FLAGS::HAS_SECONDARY_COLOUR },
{ "isTransparent", STATION_OBJECT_FLAGS::IS_TRANSPARENT },
{ "noPlatforms", STATION_OBJECT_FLAGS::NO_PLATFORMS },
});
}

View File

@ -16,6 +16,7 @@ namespace STATION_OBJECT_FLAGS
const uint32_t HAS_PRIMARY_COLOUR = 1 << 0;
const uint32_t HAS_SECONDARY_COLOUR = 1 << 1;
const uint32_t IS_TRANSPARENT = 1 << 2;
const uint32_t NO_PLATFORMS = 1 << 3;
} // namespace STATION_OBJECT_FLAGS
class StationObject final : public Object

View File

@ -205,6 +205,10 @@ enum
bool track_paint_util_has_fence(
enum edge_t edge, const CoordsXY& position, const TileElement* tileElement, Ride* ride, uint8_t rotation)
{
const auto* stationObject = ride_get_station_object(ride);
if (stationObject != nullptr && stationObject->Flags & STATION_OBJECT_FLAGS::NO_PLATFORMS)
return false;
TileCoordsXY offset;
switch (edge)
{
@ -232,8 +236,12 @@ bool track_paint_util_has_fence(
}
void track_paint_util_paint_floor(
paint_session* session, uint8_t edges, uint32_t colourFlags, uint16_t height, const uint32_t floorSprites[4])
paint_session* session, uint8_t edges, uint32_t colourFlags, uint16_t height, const uint32_t floorSprites[4],
const StationObject* stationStyle)
{
if (stationStyle != nullptr && stationStyle->Flags & STATION_OBJECT_FLAGS::NO_PLATFORMS)
return;
uint32_t imageId;
if (edges & EDGE_SW && edges & EDGE_SE)

View File

@ -280,7 +280,8 @@ extern const size_t mini_golf_peep_animation_lengths[];
bool track_paint_util_has_fence(
enum edge_t edge, const CoordsXY& position, const TileElement* tileElement, Ride* ride, uint8_t rotation);
void track_paint_util_paint_floor(
paint_session* session, uint8_t edges, uint32_t colourFlags, uint16_t height, const uint32_t floorSprites[4]);
paint_session* session, uint8_t edges, uint32_t colourFlags, uint16_t height, const uint32_t floorSprites[4],
const StationObject* stationStyle);
void track_paint_util_paint_fences(
paint_session* session, uint8_t edges, const CoordsXY& position, const TileElement* tileElement, Ride* ride,
uint32_t colourFlags, uint16_t height, const uint32_t fenceSprites[4], uint8_t rotation);

View File

@ -62,9 +62,13 @@ static void paint_circus(
wooden_a_supports_paint_setup(session, (direction & 1), 0, height, session->TrackColours[SCHEME_MISC], nullptr);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork);
auto ride = get_ride(rideIndex);
StationObject* stationObject = nullptr;
if (ride != nullptr)
stationObject = ride_get_station_object(ride);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject);
if (ride != nullptr)
{
track_paint_util_paint_fences(

View File

@ -72,9 +72,13 @@ static void paint_crooked_house(
wooden_a_supports_paint_setup(session, (direction & 1), 0, height, session->TrackColours[SCHEME_MISC], nullptr);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork);
auto ride = get_ride(rideIndex);
StationObject* stationObject = nullptr;
if (ride != nullptr)
stationObject = ride_get_station_object(ride);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject);
if (ride != nullptr)
{
track_paint_util_paint_fences(

View File

@ -151,12 +151,16 @@ static void paint_ferris_wheel(
wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_MISC], nullptr);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork);
auto ride = get_ride(rideIndex);
StationObject* stationObject = nullptr;
if (ride != nullptr)
stationObject = ride_get_station_object(ride);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject);
uint32_t imageId;
uint8_t rotation = session->CurrentRotation;
uint32_t colourFlags = session->TrackColours[SCHEME_MISC];
auto ride = get_ride(rideIndex);
if (ride != nullptr)
{
if (edges & EDGE_NW && track_paint_util_has_fence(EDGE_NW, session->MapPosition, tileElement, ride, rotation))

View File

@ -104,9 +104,13 @@ static void paint_haunted_house(
wooden_a_supports_paint_setup(session, (direction & 1), 0, height, session->TrackColours[SCHEME_MISC], nullptr);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork);
auto ride = get_ride(rideIndex);
StationObject* stationObject = nullptr;
if (ride != nullptr)
stationObject = ride_get_station_object(ride);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject);
if (ride != nullptr)
{
track_paint_util_paint_fences(

View File

@ -113,9 +113,13 @@ static void paint_merry_go_round(
wooden_a_supports_paint_setup(session, (direction & 1), 0, height, session->TrackColours[SCHEME_MISC], nullptr);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork);
auto ride = get_ride(rideIndex);
StationObject* stationObject = nullptr;
if (ride != nullptr)
stationObject = ride_get_station_object(ride);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject);
if (ride != nullptr)
{
track_paint_util_paint_fences(

View File

@ -102,7 +102,8 @@ static void paint_space_rings(
wooden_a_supports_paint_setup(session, (direction & 1), 0, height, session->TrackColours[SCHEME_MISC], nullptr);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork);
StationObject* stationObject = ride_get_station_object(ride);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject);
switch (trackSequence)
{

View File

@ -62,9 +62,13 @@ static void paint_3d_cinema(
wooden_a_supports_paint_setup(session, (direction & 1), 0, height, session->TrackColours[SCHEME_MISC], nullptr);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork);
auto ride = get_ride(rideIndex);
StationObject* stationObject = nullptr;
if (ride != nullptr)
stationObject = ride_get_station_object(ride);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject);
if (ride != nullptr)
{
track_paint_util_paint_fences(

View File

@ -92,7 +92,8 @@ static void paint_enterprise(
wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_MISC], nullptr);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork);
StationObject* stationObject = ride_get_station_object(ride);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject);
track_paint_util_paint_fences(
session, edges, session->MapPosition, tileElement, ride, session->TrackColours[SCHEME_TRACK], height, fenceSpritesRope,

View File

@ -140,9 +140,14 @@ static void paint_motionsimulator(
int32_t edges = edges_2x2[trackSequence];
wooden_a_supports_paint_setup(session, (direction & 1), 0, height, session->TrackColours[SCHEME_MISC], nullptr);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork);
auto ride = get_ride(rideIndex);
StationObject* stationObject = nullptr;
if (ride != nullptr)
stationObject = ride_get_station_object(ride);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject);
if (ride != nullptr)
{
track_paint_util_paint_fences(

View File

@ -255,9 +255,13 @@ static void paint_top_spin(
wooden_a_supports_paint_setup(session, direction & 1, 0, height, session->TrackColours[SCHEME_MISC], nullptr);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork);
auto ride = get_ride(rideIndex);
StationObject* stationObject = nullptr;
if (ride != nullptr)
stationObject = ride_get_station_object(ride);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_TRACK], height, floorSpritesCork, stationObject);
if (ride != nullptr)
{
track_paint_util_paint_fences(

View File

@ -94,7 +94,8 @@ static void paint_twist(
wooden_a_supports_paint_setup(session, (direction & 1), 0, height, session->TrackColours[SCHEME_MISC], nullptr);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_MISC], height, floorSpritesCork);
StationObject* stationObject = ride_get_station_object(ride);
track_paint_util_paint_floor(session, edges, session->TrackColours[SCHEME_MISC], height, floorSpritesCork, stationObject);
switch (trackSequence)
{