From afe266e2fe568fef8dcb23233036e9f444313505 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Sun, 18 Feb 2024 03:30:49 +0200 Subject: [PATCH] Recalculate the screen position for entities when painting --- src/openrct2/paint/Paint.Entity.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/openrct2/paint/Paint.Entity.cpp b/src/openrct2/paint/Paint.Entity.cpp index be86e4e3a5..a1b351119c 100644 --- a/src/openrct2/paint/Paint.Entity.cpp +++ b/src/openrct2/paint/Paint.Entity.cpp @@ -94,10 +94,15 @@ void EntityPaintSetup(PaintSession& session, const CoordsXY& pos) } } - if (session.DPI.y + session.DPI.height <= spr->SpriteData.SpriteRect.GetTop() - || spr->SpriteData.SpriteRect.GetBottom() <= session.DPI.y - || session.DPI.x + session.DPI.width <= spr->SpriteData.SpriteRect.GetLeft() - || spr->SpriteData.SpriteRect.GetRight() <= session.DPI.x) + auto screenCoords = Translate3DTo2DWithZ(session.CurrentRotation, spr->GetLocation()); + auto spriteRect = ScreenRect( + screenCoords - ScreenCoordsXY{ spr->SpriteData.Width, spr->SpriteData.HeightMin }, + screenCoords + ScreenCoordsXY{ spr->SpriteData.Width, spr->SpriteData.HeightMax }); + + if (session.DPI.y + session.DPI.height <= spriteRect.GetTop() + || spriteRect.GetBottom() <= session.DPI.y + || session.DPI.x + session.DPI.width <= spriteRect.GetLeft() + || spriteRect.GetRight() <= session.DPI.x) { continue; }