From 0300c58f69da8301bb261ac9788eada83f8079f7 Mon Sep 17 00:00:00 2001 From: David Schoemehl Date: Mon, 6 Feb 2023 23:02:07 -0600 Subject: [PATCH 1/3] enum - QuadrantFlags Conversion --- src/OpenLoco/src/Paint/Paint.cpp | 14 +++++++------- src/OpenLoco/src/Paint/Paint.h | 17 ++++++++++++----- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/OpenLoco/src/Paint/Paint.cpp b/src/OpenLoco/src/Paint/Paint.cpp index 298d2ec04d..74e6ef24c8 100644 --- a/src/OpenLoco/src/Paint/Paint.cpp +++ b/src/OpenLoco/src/Paint/Paint.cpp @@ -599,7 +599,7 @@ namespace OpenLoco::Paint } template - static PaintStruct* arrangeStructsHelperRotation(PaintStruct* psNext, const uint16_t quadrantIndex, const uint8_t flag) + static PaintStruct* arrangeStructsHelperRotation(PaintStruct* psNext, const uint16_t quadrantIndex, const QuadrantFlags flag) { PaintStruct* ps = nullptr; @@ -656,12 +656,12 @@ namespace OpenLoco::Paint // End of the current list. return psQuadrantEntry; } - if (psNext->quadrantFlags & QuadrantFlags::outsideQuadrant) + if (psNext->hasFlags(QuadrantFlags::outsideQuadrant)) { // Reached point outside of specified quadrant. return psQuadrantEntry; } - if (psNext->quadrantFlags & QuadrantFlags::pendingVisit) + if (psNext->hasFlags(QuadrantFlags::pendingVisit)) { // Found node to check on. break; @@ -681,9 +681,9 @@ namespace OpenLoco::Paint psNext = psNext->nextQuadrantPS; if (psNext == nullptr) break; - if (psNext->quadrantFlags & QuadrantFlags::outsideQuadrant) + if (psNext->hasFlags(QuadrantFlags::outsideQuadrant)) break; - if (!(psNext->quadrantFlags & QuadrantFlags::neighbour)) + if (!psNext->hasFlags(QuadrantFlags::neighbour)) continue; const PaintStructBoundBox& currentBBox = psNext->bounds; @@ -705,7 +705,7 @@ namespace OpenLoco::Paint } } - static PaintStruct* arrangeStructsHelper(PaintStruct* psNext, uint16_t quadrantIndex, uint8_t flag, uint8_t rotation) + static PaintStruct* arrangeStructsHelper(PaintStruct* psNext, uint16_t quadrantIndex, QuadrantFlags flag, uint8_t rotation) { switch (rotation) { @@ -757,7 +757,7 @@ namespace OpenLoco::Paint quadrantIndex = _quadrantBackIndex; while (++quadrantIndex < _quadrantFrontIndex) { - psCache = arrangeStructsHelper(psCache, quadrantIndex & 0xFFFF, 0, currentRotation); + psCache = arrangeStructsHelper(psCache, quadrantIndex & 0xFFFF, QuadrantFlags::none, currentRotation); } } diff --git a/src/OpenLoco/src/Paint/Paint.h b/src/OpenLoco/src/Paint/Paint.h index c9967eef1e..117879d9b0 100644 --- a/src/OpenLoco/src/Paint/Paint.h +++ b/src/OpenLoco/src/Paint/Paint.h @@ -3,6 +3,7 @@ #include "Map/Map.hpp" #include "Types.hpp" #include "Ui/UiTypes.hpp" +#include #include namespace OpenLoco::Map @@ -83,12 +84,14 @@ namespace OpenLoco::Paint int16_t yEnd; // 0x12 }; - namespace QuadrantFlags + enum class QuadrantFlags : uint8_t { - constexpr uint8_t pendingVisit = (1 << 0); - constexpr uint8_t outsideQuadrant = (1 << 7); - constexpr uint8_t neighbour = (1 << 1); + none = 0U, + pendingVisit = 1U << 0, + outsideQuadrant = 1U << 7, + neighbour = 1U << 1, }; + OPENLOCO_ENABLE_ENUM_OPERATORS(QuadrantFlags); struct PaintStruct { @@ -98,7 +101,7 @@ namespace OpenLoco::Paint Ui::Point vpPos; // 0x14 uint16_t quadrantIndex; // 0x18 uint8_t flags; // 0x1A - uint8_t quadrantFlags; // 0x1B + QuadrantFlags quadrantFlags; // 0x1B AttachedPaintStruct* attachedPS; // 0x1C PaintStruct* children; // 0x20 PaintStruct* nextQuadrantPS; // 0x24 @@ -111,6 +114,10 @@ namespace OpenLoco::Paint Map::TileElement* tileElement; // 0x30 (or entity pointer) EntityBase* entity; // 0x30 }; + constexpr bool hasFlags(QuadrantFlags flagsToTest) const + { + return (quadrantFlags & flagsToTest) != QuadrantFlags::none; + } }; assert_struct_size(PaintStruct, 0x34); From 394931d4dae865dc142975e1f2c324f1ffecb6f7 Mon Sep 17 00:00:00 2001 From: David Schoemehl Date: Mon, 6 Feb 2023 23:08:49 -0600 Subject: [PATCH 2/3] enum - PaintStructFlags Conversion --- src/OpenLoco/src/Paint/Paint.cpp | 2 +- src/OpenLoco/src/Paint/Paint.h | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/OpenLoco/src/Paint/Paint.cpp b/src/OpenLoco/src/Paint/Paint.cpp index 74e6ef24c8..9ef1042b3e 100644 --- a/src/OpenLoco/src/Paint/Paint.cpp +++ b/src/OpenLoco/src/Paint/Paint.cpp @@ -514,7 +514,7 @@ namespace OpenLoco::Paint ps->bounds.x = rotBoundBoxOffset.x + getSpritePosition().x; ps->bounds.y = rotBoundBoxOffset.y + getSpritePosition().y; ps->bounds.z = rotBoundBoxOffset.z; - ps->flags = 0; + ps->flags = PaintStructFlags::none; ps->attachedPS = nullptr; ps->children = nullptr; ps->type = _itemType; diff --git a/src/OpenLoco/src/Paint/Paint.h b/src/OpenLoco/src/Paint/Paint.h index 117879d9b0..a5a3a93088 100644 --- a/src/OpenLoco/src/Paint/Paint.h +++ b/src/OpenLoco/src/Paint/Paint.h @@ -45,19 +45,21 @@ namespace OpenLoco::Paint } // Used by both AttachedPaintStruct and PaintStruct - namespace PaintStructFlags + enum class PaintStructFlags : uint8_t { - constexpr uint8_t hasMaskedImage = (1 << 0); - } + none = 0U, + hasMaskedImage = 1 << 0, + }; + OPENLOCO_ENABLE_ENUM_OPERATORS(PaintStructFlags); #pragma pack(push, 1) /* size 0x12 */ struct AttachedPaintStruct { - ImageId imageId; // 0x00 - ImageId maskedImageId; // 0x04 - Ui::Point vpPos; // 0x08 - uint8_t flags; // 0x0C + ImageId imageId; // 0x00 + ImageId maskedImageId; // 0x04 + Ui::Point vpPos; // 0x08 + PaintStructFlags flags; // 0x0C uint8_t pad_0D; AttachedPaintStruct* next; // 0x0E }; @@ -100,7 +102,7 @@ namespace OpenLoco::Paint PaintStructBoundBox bounds; // 0x08 Ui::Point vpPos; // 0x14 uint16_t quadrantIndex; // 0x18 - uint8_t flags; // 0x1A + PaintStructFlags flags; // 0x1A QuadrantFlags quadrantFlags; // 0x1B AttachedPaintStruct* attachedPS; // 0x1C PaintStruct* children; // 0x20 From a897c9c1d4219e05ea86c65ad5dc56b537db4046 Mon Sep 17 00:00:00 2001 From: David Schoemehl Date: Tue, 7 Feb 2023 06:29:28 -0600 Subject: [PATCH 3/3] Changing hasFlags to hasQuadrantFlags --- src/OpenLoco/src/Paint/Paint.cpp | 8 ++++---- src/OpenLoco/src/Paint/Paint.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/OpenLoco/src/Paint/Paint.cpp b/src/OpenLoco/src/Paint/Paint.cpp index 9ef1042b3e..c5f31aed36 100644 --- a/src/OpenLoco/src/Paint/Paint.cpp +++ b/src/OpenLoco/src/Paint/Paint.cpp @@ -656,12 +656,12 @@ namespace OpenLoco::Paint // End of the current list. return psQuadrantEntry; } - if (psNext->hasFlags(QuadrantFlags::outsideQuadrant)) + if (psNext->hasQuadrantFlags(QuadrantFlags::outsideQuadrant)) { // Reached point outside of specified quadrant. return psQuadrantEntry; } - if (psNext->hasFlags(QuadrantFlags::pendingVisit)) + if (psNext->hasQuadrantFlags(QuadrantFlags::pendingVisit)) { // Found node to check on. break; @@ -681,9 +681,9 @@ namespace OpenLoco::Paint psNext = psNext->nextQuadrantPS; if (psNext == nullptr) break; - if (psNext->hasFlags(QuadrantFlags::outsideQuadrant)) + if (psNext->hasQuadrantFlags(QuadrantFlags::outsideQuadrant)) break; - if (!psNext->hasFlags(QuadrantFlags::neighbour)) + if (!psNext->hasQuadrantFlags(QuadrantFlags::neighbour)) continue; const PaintStructBoundBox& currentBBox = psNext->bounds; diff --git a/src/OpenLoco/src/Paint/Paint.h b/src/OpenLoco/src/Paint/Paint.h index a5a3a93088..3d06f37bce 100644 --- a/src/OpenLoco/src/Paint/Paint.h +++ b/src/OpenLoco/src/Paint/Paint.h @@ -116,7 +116,7 @@ namespace OpenLoco::Paint Map::TileElement* tileElement; // 0x30 (or entity pointer) EntityBase* entity; // 0x30 }; - constexpr bool hasFlags(QuadrantFlags flagsToTest) const + constexpr bool hasQuadrantFlags(QuadrantFlags flagsToTest) const { return (quadrantFlags & flagsToTest) != QuadrantFlags::none; }