mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-22 23:33:04 +01:00
Use the rotation from the Viewport where applicable
This commit is contained in:
@@ -111,7 +111,12 @@ namespace OpenRCT2::Scripting
|
|||||||
|
|
||||||
int32_t rotation_get() const
|
int32_t rotation_get() const
|
||||||
{
|
{
|
||||||
return GetCurrentRotation();
|
auto viewport = GetViewport();
|
||||||
|
if (viewport != nullptr)
|
||||||
|
{
|
||||||
|
return viewport->rotation;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
void rotation_set(int32_t value)
|
void rotation_set(int32_t value)
|
||||||
{
|
{
|
||||||
@@ -120,7 +125,7 @@ namespace OpenRCT2::Scripting
|
|||||||
auto w = GetWindow();
|
auto w = GetWindow();
|
||||||
if (w != nullptr)
|
if (w != nullptr)
|
||||||
{
|
{
|
||||||
while (GetCurrentRotation() != value)
|
while (w->viewport->rotation != value)
|
||||||
{
|
{
|
||||||
WindowRotateCamera(*w, 1);
|
WindowRotateCamera(*w, 1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2584,7 +2584,7 @@ private:
|
|||||||
TileElement tempSideTrackTileElement{ 0x80, 0x8F, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
TileElement tempSideTrackTileElement{ 0x80, 0x8F, 128, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||||
TileElement tempTrackTileElement{};
|
TileElement tempTrackTileElement{};
|
||||||
TileElement* backupTileElementArrays[5]{};
|
TileElement* backupTileElementArrays[5]{};
|
||||||
PaintSession* session = PaintSessionAlloc(dpi, 0);
|
PaintSession* session = PaintSessionAlloc(dpi, 0, GetCurrentRotation());
|
||||||
trackDirection &= 3;
|
trackDirection &= 3;
|
||||||
|
|
||||||
auto currentRide = GetRide(rideIndex);
|
auto currentRide = GetRide(rideIndex);
|
||||||
|
|||||||
@@ -305,7 +305,7 @@ void LightFXPrepareLightList()
|
|||||||
dpi.zoom_level = _current_view_zoom_front;
|
dpi.zoom_level = _current_view_zoom_front;
|
||||||
dpi.width = 1;
|
dpi.width = 1;
|
||||||
|
|
||||||
PaintSession* session = PaintSessionAlloc(dpi, w->viewport->flags);
|
PaintSession* session = PaintSessionAlloc(dpi, w->viewport->flags, w->viewport->rotation);
|
||||||
PaintSessionGenerate(*session);
|
PaintSessionGenerate(*session);
|
||||||
PaintSessionArrange(*session);
|
PaintSessionArrange(*session);
|
||||||
auto info = SetInteractionInfoFromPaintSession(session, w->viewport->flags, ViewportInteractionItemAll);
|
auto info = SetInteractionInfoFromPaintSession(session, w->viewport->flags, ViewportInteractionItemAll);
|
||||||
@@ -437,7 +437,7 @@ void LightFXUpdateViewportSettings()
|
|||||||
Viewport* viewport = WindowGetViewport(mainWindow);
|
Viewport* viewport = WindowGetViewport(mainWindow);
|
||||||
_current_view_x_back = viewport->viewPos.x;
|
_current_view_x_back = viewport->viewPos.x;
|
||||||
_current_view_y_back = viewport->viewPos.y;
|
_current_view_y_back = viewport->viewPos.y;
|
||||||
_current_view_rotation_back = GetCurrentRotation();
|
_current_view_rotation_back = viewport->rotation;
|
||||||
_current_view_zoom_back = viewport->zoom;
|
_current_view_zoom_back = viewport->zoom;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ std::optional<ScreenCoordsXY> centre_2d_coordinates(const CoordsXYZ& loc, Viewpo
|
|||||||
return std::nullopt;
|
return std::nullopt;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto screenCoord = Translate3DTo2DWithZ(GetCurrentRotation(), loc);
|
auto screenCoord = Translate3DTo2DWithZ(viewport->rotation, loc);
|
||||||
screenCoord.x -= viewport->view_width / 2;
|
screenCoord.x -= viewport->view_width / 2;
|
||||||
screenCoord.y -= viewport->view_height / 2;
|
screenCoord.y -= viewport->view_height / 2;
|
||||||
return { screenCoord };
|
return { screenCoord };
|
||||||
@@ -962,7 +962,7 @@ static void ViewportPaint(const Viewport* viewport, DrawPixelInfo& dpi, const Sc
|
|||||||
// Generate and sort columns.
|
// Generate and sort columns.
|
||||||
for (x = alignedX; x < rightBorder; x += 32)
|
for (x = alignedX; x < rightBorder; x += 32)
|
||||||
{
|
{
|
||||||
PaintSession* session = PaintSessionAlloc(dpi1, viewFlags);
|
PaintSession* session = PaintSessionAlloc(dpi1, viewFlags, viewport->rotation);
|
||||||
_paintColumns.push_back(session);
|
_paintColumns.push_back(session);
|
||||||
|
|
||||||
DrawPixelInfo& dpi2 = session->DPI;
|
DrawPixelInfo& dpi2 = session->DPI;
|
||||||
@@ -1829,31 +1829,31 @@ InteractionInfo GetMapCoordinatesFromPosWindow(WindowBase* window, const ScreenC
|
|||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
Viewport* myviewport = window->viewport;
|
Viewport* viewport = window->viewport;
|
||||||
auto viewLoc = screenCoords;
|
auto viewLoc = screenCoords;
|
||||||
viewLoc -= myviewport->pos;
|
viewLoc -= viewport->pos;
|
||||||
if (viewLoc.x >= 0 && viewLoc.x < static_cast<int32_t>(myviewport->width) && viewLoc.y >= 0
|
if (viewLoc.x >= 0 && viewLoc.x < static_cast<int32_t>(viewport->width) && viewLoc.y >= 0
|
||||||
&& viewLoc.y < static_cast<int32_t>(myviewport->height))
|
&& viewLoc.y < static_cast<int32_t>(viewport->height))
|
||||||
{
|
{
|
||||||
viewLoc.x = myviewport->zoom.ApplyTo(viewLoc.x);
|
viewLoc.x = viewport->zoom.ApplyTo(viewLoc.x);
|
||||||
viewLoc.y = myviewport->zoom.ApplyTo(viewLoc.y);
|
viewLoc.y = viewport->zoom.ApplyTo(viewLoc.y);
|
||||||
viewLoc += myviewport->viewPos;
|
viewLoc += viewport->viewPos;
|
||||||
if (myviewport->zoom > ZoomLevel{ 0 })
|
if (viewport->zoom > ZoomLevel{ 0 })
|
||||||
{
|
{
|
||||||
viewLoc.x &= myviewport->zoom.ApplyTo(0xFFFFFFFF) & 0xFFFFFFFF;
|
viewLoc.x &= viewport->zoom.ApplyTo(0xFFFFFFFF) & 0xFFFFFFFF;
|
||||||
viewLoc.y &= myviewport->zoom.ApplyTo(0xFFFFFFFF) & 0xFFFFFFFF;
|
viewLoc.y &= viewport->zoom.ApplyTo(0xFFFFFFFF) & 0xFFFFFFFF;
|
||||||
}
|
}
|
||||||
DrawPixelInfo dpi;
|
DrawPixelInfo dpi;
|
||||||
dpi.x = viewLoc.x;
|
dpi.x = viewLoc.x;
|
||||||
dpi.y = viewLoc.y;
|
dpi.y = viewLoc.y;
|
||||||
dpi.height = 1;
|
dpi.height = 1;
|
||||||
dpi.zoom_level = myviewport->zoom;
|
dpi.zoom_level = viewport->zoom;
|
||||||
dpi.width = 1;
|
dpi.width = 1;
|
||||||
|
|
||||||
PaintSession* session = PaintSessionAlloc(dpi, myviewport->flags);
|
PaintSession* session = PaintSessionAlloc(dpi, viewport->flags, viewport->rotation);
|
||||||
PaintSessionGenerate(*session);
|
PaintSessionGenerate(*session);
|
||||||
PaintSessionArrange(*session);
|
PaintSessionArrange(*session);
|
||||||
info = SetInteractionInfoFromPaintSession(session, myviewport->flags, flags & 0xFFFF);
|
info = SetInteractionInfoFromPaintSession(session, viewport->flags, flags & 0xFFFF);
|
||||||
PaintSessionFree(session);
|
PaintSessionFree(session);
|
||||||
}
|
}
|
||||||
return info;
|
return info;
|
||||||
@@ -2097,7 +2097,7 @@ void ViewportSetSavedView()
|
|||||||
gameState.SavedView = ScreenCoordsXY{ viewport->view_width / 2, viewport->view_height / 2 } + viewport->viewPos;
|
gameState.SavedView = ScreenCoordsXY{ viewport->view_width / 2, viewport->view_height / 2 } + viewport->viewPos;
|
||||||
|
|
||||||
gameState.SavedViewZoom = viewport->zoom;
|
gameState.SavedViewZoom = viewport->zoom;
|
||||||
gameState.SavedViewRotation = GetCurrentRotation();
|
gameState.SavedViewRotation = viewport->rotation;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -836,7 +836,7 @@ void WindowScrollToLocation(WindowBase& w, const CoordsXYZ& coords)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
auto screenCoords = Translate3DTo2DWithZ(GetCurrentRotation(), coords);
|
auto screenCoords = Translate3DTo2DWithZ(w.viewport->rotation, coords);
|
||||||
|
|
||||||
int32_t i = 0;
|
int32_t i = 0;
|
||||||
if (!(gScreenFlags & SCREEN_FLAGS_TITLE_DEMO))
|
if (!(gScreenFlags & SCREEN_FLAGS_TITLE_DEMO))
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ bool gPaintBoundingBoxes;
|
|||||||
bool gPaintBlockedTiles;
|
bool gPaintBlockedTiles;
|
||||||
|
|
||||||
static void PaintAttachedPS(DrawPixelInfo& dpi, PaintStruct* ps, uint32_t viewFlags);
|
static void PaintAttachedPS(DrawPixelInfo& dpi, PaintStruct* ps, uint32_t viewFlags);
|
||||||
static void PaintPSImageWithBoundingBoxes(DrawPixelInfo& dpi, PaintStruct* ps, ImageId imageId, int32_t x, int32_t y);
|
static void PaintPSImageWithBoundingBoxes(PaintSession& session, PaintStruct* ps, ImageId imageId, int32_t x, int32_t y);
|
||||||
static ImageId PaintPSColourifyImage(const PaintStruct* ps, ImageId imageId, uint32_t viewFlags);
|
static ImageId PaintPSColourifyImage(const PaintStruct* ps, ImageId imageId, uint32_t viewFlags);
|
||||||
|
|
||||||
static int32_t RemapPositionToQuadrant(const PaintStruct& ps, uint8_t rotation)
|
static int32_t RemapPositionToQuadrant(const PaintStruct& ps, uint8_t rotation)
|
||||||
@@ -243,7 +243,6 @@ template<uint8_t direction> void PaintSessionGenerateRotate(PaintSession& sessio
|
|||||||
*/
|
*/
|
||||||
void PaintSessionGenerate(PaintSession& session)
|
void PaintSessionGenerate(PaintSession& session)
|
||||||
{
|
{
|
||||||
session.CurrentRotation = GetCurrentRotation();
|
|
||||||
switch (DirectionFlipXAxis(session.CurrentRotation))
|
switch (DirectionFlipXAxis(session.CurrentRotation))
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
@@ -533,7 +532,7 @@ static void PaintDrawStruct(PaintSession& session, PaintStruct* ps)
|
|||||||
auto imageId = PaintPSColourifyImage(ps, ps->image_id, session.ViewFlags);
|
auto imageId = PaintPSColourifyImage(ps, ps->image_id, session.ViewFlags);
|
||||||
if (gPaintBoundingBoxes && session.DPI.zoom_level == ZoomLevel{ 0 })
|
if (gPaintBoundingBoxes && session.DPI.zoom_level == ZoomLevel{ 0 })
|
||||||
{
|
{
|
||||||
PaintPSImageWithBoundingBoxes(session.DPI, ps, imageId, screenPos.x, screenPos.y);
|
PaintPSImageWithBoundingBoxes(session, ps, imageId, screenPos.x, screenPos.y);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -588,10 +587,12 @@ static void PaintAttachedPS(DrawPixelInfo& dpi, PaintStruct* ps, uint32_t viewFl
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void PaintPSImageWithBoundingBoxes(DrawPixelInfo& dpi, PaintStruct* ps, ImageId imageId, int32_t x, int32_t y)
|
static void PaintPSImageWithBoundingBoxes(PaintSession& session, PaintStruct* ps, ImageId imageId, int32_t x, int32_t y)
|
||||||
{
|
{
|
||||||
|
auto& dpi = session.DPI;
|
||||||
|
|
||||||
const uint8_t colour = BoundBoxDebugColours[EnumValue(ps->InteractionItem)];
|
const uint8_t colour = BoundBoxDebugColours[EnumValue(ps->InteractionItem)];
|
||||||
const uint8_t rotation = GetCurrentRotation();
|
const uint8_t rotation = session.CurrentRotation;
|
||||||
|
|
||||||
const CoordsXYZ frontTop = {
|
const CoordsXYZ frontTop = {
|
||||||
ps->Bounds.x_end,
|
ps->Bounds.x_end,
|
||||||
@@ -688,9 +689,9 @@ static ImageId PaintPSColourifyImage(const PaintStruct* ps, ImageId imageId, uin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PaintSession* PaintSessionAlloc(DrawPixelInfo& dpi, uint32_t viewFlags)
|
PaintSession* PaintSessionAlloc(DrawPixelInfo& dpi, uint32_t viewFlags, uint8_t rotation)
|
||||||
{
|
{
|
||||||
return GetContext()->GetPainter()->CreateSession(dpi, viewFlags);
|
return GetContext()->GetPainter()->CreateSession(dpi, viewFlags, rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PaintSessionFree(PaintSession* session)
|
void PaintSessionFree(PaintSession* session)
|
||||||
|
|||||||
@@ -338,7 +338,7 @@ void PaintFloatingMoneyEffect(
|
|||||||
PaintSession& session, money64 amount, StringId string_id, int32_t y, int32_t z, int8_t y_offsets[], int32_t offset_x,
|
PaintSession& session, money64 amount, StringId string_id, int32_t y, int32_t z, int8_t y_offsets[], int32_t offset_x,
|
||||||
uint32_t rotation);
|
uint32_t rotation);
|
||||||
|
|
||||||
PaintSession* PaintSessionAlloc(DrawPixelInfo& dpi, uint32_t viewFlags);
|
PaintSession* PaintSessionAlloc(DrawPixelInfo& dpi, uint32_t viewFlags, uint8_t rotation);
|
||||||
void PaintSessionFree(PaintSession* session);
|
void PaintSessionFree(PaintSession* session);
|
||||||
void PaintSessionGenerate(PaintSession& session);
|
void PaintSessionGenerate(PaintSession& session);
|
||||||
void PaintSessionArrange(PaintSessionCore& session);
|
void PaintSessionArrange(PaintSessionCore& session);
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ void Painter::MeasureFPS()
|
|||||||
_lastSecond = currentTime;
|
_lastSecond = currentTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
PaintSession* Painter::CreateSession(DrawPixelInfo& dpi, uint32_t viewFlags)
|
PaintSession* Painter::CreateSession(DrawPixelInfo& dpi, uint32_t viewFlags, uint8_t rotation)
|
||||||
{
|
{
|
||||||
PROFILED_FUNCTION();
|
PROFILED_FUNCTION();
|
||||||
|
|
||||||
@@ -160,6 +160,7 @@ PaintSession* Painter::CreateSession(DrawPixelInfo& dpi, uint32_t viewFlags)
|
|||||||
session->QuadrantFrontIndex = 0;
|
session->QuadrantFrontIndex = 0;
|
||||||
session->PaintEntryChain = _paintStructPool.Create();
|
session->PaintEntryChain = _paintStructPool.Create();
|
||||||
session->Flags = 0;
|
session->Flags = 0;
|
||||||
|
session->CurrentRotation = rotation;
|
||||||
|
|
||||||
std::fill(std::begin(session->Quadrants), std::end(session->Quadrants), nullptr);
|
std::fill(std::begin(session->Quadrants), std::end(session->Quadrants), nullptr);
|
||||||
session->PaintHead = nullptr;
|
session->PaintHead = nullptr;
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ namespace OpenRCT2
|
|||||||
explicit Painter(const std::shared_ptr<Ui::IUiContext>& uiContext);
|
explicit Painter(const std::shared_ptr<Ui::IUiContext>& uiContext);
|
||||||
void Paint(Drawing::IDrawingEngine& de);
|
void Paint(Drawing::IDrawingEngine& de);
|
||||||
|
|
||||||
PaintSession* CreateSession(DrawPixelInfo& dpi, uint32_t viewFlags);
|
PaintSession* CreateSession(DrawPixelInfo& dpi, uint32_t viewFlags, uint8_t rotation);
|
||||||
void ReleaseSession(PaintSession* session);
|
void ReleaseSession(PaintSession* session);
|
||||||
~Painter();
|
~Painter();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user