From 4698ddc5f5d6973002f524ee69e6109679e5fec8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Fri, 12 Sep 2025 14:40:01 +0300 Subject: [PATCH] Add a cast method for entities, sometimes we know the type --- src/openrct2/entity/EntityBase.h | 12 ++++++++++++ src/openrct2/paint/Paint.Entity.cpp | 26 +++++++++++++------------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/openrct2/entity/EntityBase.h b/src/openrct2/entity/EntityBase.h index 56918a6006..7e38d30c87 100644 --- a/src/openrct2/entity/EntityBase.h +++ b/src/openrct2/entity/EntityBase.h @@ -80,6 +80,18 @@ struct EntityBase return Is() ? reinterpret_cast(this) : nullptr; } + template + T* cast() + { + return reinterpret_cast(this); + } + + template + const T* cast() const + { + return reinterpret_cast(this); + } + void Serialise(class DataSerialiser& stream); void Paint() const; diff --git a/src/openrct2/paint/Paint.Entity.cpp b/src/openrct2/paint/Paint.Entity.cpp index c6be9767ef..ce91548854 100644 --- a/src/openrct2/paint/Paint.Entity.cpp +++ b/src/openrct2/paint/Paint.Entity.cpp @@ -131,45 +131,45 @@ void EntityPaintSetup(PaintSession& session, const CoordsXY& pos) switch (entity->Type) { case EntityType::Vehicle: - entity->As()->Paint(session, image_direction); + entity->cast()->Paint(session, image_direction); if (LightFx::ForVehiclesIsAvailable()) { - LightFx::AddLightsMagicVehicle(entity->As()); + LightFx::AddLightsMagicVehicle(entity->cast()); } break; case EntityType::Guest: case EntityType::Staff: - entity->As()->Paint(session, image_direction); + entity->cast()->Paint(session, image_direction); break; case EntityType::SteamParticle: - entity->As()->Paint(session, image_direction); + entity->cast()->Paint(session, image_direction); break; case EntityType::MoneyEffect: - entity->As()->Paint(session, image_direction); + entity->cast()->Paint(session, image_direction); break; case EntityType::CrashedVehicleParticle: - entity->As()->Paint(session, image_direction); + entity->cast()->Paint(session, image_direction); break; case EntityType::ExplosionCloud: - entity->As()->Paint(session, image_direction); + entity->cast()->Paint(session, image_direction); break; case EntityType::CrashSplash: - entity->As()->Paint(session, image_direction); + entity->cast()->Paint(session, image_direction); break; case EntityType::ExplosionFlare: - entity->As()->Paint(session, image_direction); + entity->cast()->Paint(session, image_direction); break; case EntityType::JumpingFountain: - entity->As()->Paint(session, image_direction); + entity->cast()->Paint(session, image_direction); break; case EntityType::Balloon: - entity->As()->Paint(session, image_direction); + entity->cast()->Paint(session, image_direction); break; case EntityType::Duck: - entity->As()->Paint(session, image_direction); + entity->cast()->Paint(session, image_direction); break; case EntityType::Litter: - entity->As()->Paint(session, image_direction); + entity->cast()->Paint(session, image_direction); break; default: assert(false);