Allow viewports to have an independent rotation

This commit is contained in:
ζeh Matt 2024-03-02 11:27:17 +02:00
parent c87b82d75e
commit 425c4cf04e
No known key found for this signature in database
GPG Key ID: 18CE582C71A225B0
3 changed files with 41 additions and 32 deletions

View File

@ -95,7 +95,7 @@ public:
savedViewPos = { x - (viewport->view_width / 2), y - (viewport->view_height / 2) };
}
viewport->flags |= VIEWPORT_FLAG_SOUND_ON;
viewport->flags |= VIEWPORT_FLAG_SOUND_ON | VIEWPORT_FLAG_INDEPEDENT_ROTATION;
min_width = WW;
min_height = WH;
@ -111,7 +111,7 @@ public:
if (viewport != nullptr && viewport->flags != mainWindow->viewport->flags)
{
viewport->flags = mainWindow->viewport->flags;
viewport->flags = mainWindow->viewport->flags | VIEWPORT_FLAG_INDEPEDENT_ROTATION;
Invalidate();
}

View File

@ -890,7 +890,14 @@ void ViewportRotateSingle(WindowBase* window, int32_t direction)
void ViewportRotateAll(int32_t direction)
{
WindowVisitEach([direction](WindowBase* w) { ViewportRotateSingleInternal(*w, direction); });
WindowVisitEach([direction](WindowBase* w) {
auto* viewport = w->viewport;
if (viewport == nullptr)
return;
if (viewport->flags & VIEWPORT_FLAG_INDEPEDENT_ROTATION)
return;
ViewportRotateSingleInternal(*w, direction);
});
ResetAllSpriteQuadrantPlacements();
}

View File

@ -28,40 +28,42 @@ struct PaintEntry;
// Flags must currenly retain their values to avoid breaking plugins.
// Values can be changed when plugins move to using named constants.
enum
enum : uint32_t
{
VIEWPORT_FLAG_GRIDLINES = (1 << 7),
VIEWPORT_FLAG_UNDERGROUND_INSIDE = (1 << 0),
VIEWPORT_FLAG_HIDE_BASE = (1 << 12),
VIEWPORT_FLAG_HIDE_VERTICAL = (1 << 13),
VIEWPORT_FLAG_GRIDLINES = (1U << 7),
VIEWPORT_FLAG_UNDERGROUND_INSIDE = (1U << 0),
VIEWPORT_FLAG_HIDE_BASE = (1U << 12),
VIEWPORT_FLAG_HIDE_VERTICAL = (1U << 13),
VIEWPORT_FLAG_SOUND_ON = (1 << 10),
VIEWPORT_FLAG_LAND_OWNERSHIP = (1 << 8),
VIEWPORT_FLAG_CONSTRUCTION_RIGHTS = (1 << 9),
VIEWPORT_FLAG_HIDE_ENTITIES = (1 << 14),
VIEWPORT_FLAG_CLIP_VIEW = (1 << 17),
VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES = (1 << 18),
VIEWPORT_FLAG_TRANSPARENT_BACKGROUND = (1 << 19),
VIEWPORT_FLAG_SOUND_ON = (1U << 10),
VIEWPORT_FLAG_LAND_OWNERSHIP = (1U << 8),
VIEWPORT_FLAG_CONSTRUCTION_RIGHTS = (1U << 9),
VIEWPORT_FLAG_HIDE_ENTITIES = (1U << 14),
VIEWPORT_FLAG_CLIP_VIEW = (1U << 17),
VIEWPORT_FLAG_HIGHLIGHT_PATH_ISSUES = (1U << 18),
VIEWPORT_FLAG_TRANSPARENT_BACKGROUND = (1U << 19),
VIEWPORT_FLAG_LAND_HEIGHTS = (1 << 4),
VIEWPORT_FLAG_TRACK_HEIGHTS = (1 << 5),
VIEWPORT_FLAG_PATH_HEIGHTS = (1 << 6),
VIEWPORT_FLAG_LAND_HEIGHTS = (1U << 4),
VIEWPORT_FLAG_TRACK_HEIGHTS = (1U << 5),
VIEWPORT_FLAG_PATH_HEIGHTS = (1U << 6),
VIEWPORT_FLAG_HIDE_RIDES = (1 << 1),
VIEWPORT_FLAG_HIDE_VEHICLES = (1 << 20),
VIEWPORT_FLAG_HIDE_VEGETATION = (1 << 21),
VIEWPORT_FLAG_HIDE_SCENERY = (1 << 2),
VIEWPORT_FLAG_HIDE_PATHS = (1 << 16),
VIEWPORT_FLAG_HIDE_SUPPORTS = (1 << 3),
VIEWPORT_FLAG_HIDE_GUESTS = (1 << 11),
VIEWPORT_FLAG_HIDE_STAFF = (1 << 23),
VIEWPORT_FLAG_HIDE_RIDES = (1U << 1),
VIEWPORT_FLAG_HIDE_VEHICLES = (1U << 20),
VIEWPORT_FLAG_HIDE_VEGETATION = (1U << 21),
VIEWPORT_FLAG_HIDE_SCENERY = (1U << 2),
VIEWPORT_FLAG_HIDE_PATHS = (1U << 16),
VIEWPORT_FLAG_HIDE_SUPPORTS = (1U << 3),
VIEWPORT_FLAG_HIDE_GUESTS = (1U << 11),
VIEWPORT_FLAG_HIDE_STAFF = (1U << 23),
VIEWPORT_FLAG_INVISIBLE_RIDES = (1 << 24),
VIEWPORT_FLAG_INVISIBLE_VEHICLES = (1 << 25),
VIEWPORT_FLAG_INVISIBLE_VEGETATION = (1 << 26),
VIEWPORT_FLAG_INVISIBLE_SCENERY = (1 << 27),
VIEWPORT_FLAG_INVISIBLE_PATHS = (1 << 28),
VIEWPORT_FLAG_INVISIBLE_SUPPORTS = (1 << 29),
VIEWPORT_FLAG_INVISIBLE_RIDES = (1U << 24),
VIEWPORT_FLAG_INVISIBLE_VEHICLES = (1U << 25),
VIEWPORT_FLAG_INVISIBLE_VEGETATION = (1U << 26),
VIEWPORT_FLAG_INVISIBLE_SCENERY = (1U << 27),
VIEWPORT_FLAG_INVISIBLE_PATHS = (1U << 28),
VIEWPORT_FLAG_INVISIBLE_SUPPORTS = (1U << 29),
VIEWPORT_FLAG_INDEPEDENT_ROTATION = (1U << 30),
};
enum class VisibilityKind