diff --git a/src/openrct2-ui/windows/EditorInventionsList.cpp b/src/openrct2-ui/windows/EditorInventionsList.cpp index bc81650b1b..749f1cb23f 100644 --- a/src/openrct2-ui/windows/EditorInventionsList.cpp +++ b/src/openrct2-ui/windows/EditorInventionsList.cpp @@ -82,7 +82,7 @@ static Widget _inventionListDragWidgets[] = { static void ResearchRidesSetup() { // Reset all objects to not required - for (auto objectType : TransientObjectTypes) + for (auto objectType : getTransientObjectTypes()) { auto maxObjects = object_entry_group_counts[EnumValue(objectType)]; for (int32_t i = 0; i < maxObjects; i++) diff --git a/src/openrct2/EditorObjectSelectionSession.cpp b/src/openrct2/EditorObjectSelectionSession.cpp index a54958c3a2..951d7df7a1 100644 --- a/src/openrct2/EditorObjectSelectionSession.cpp +++ b/src/openrct2/EditorObjectSelectionSession.cpp @@ -125,7 +125,7 @@ void SetupInUseSelectionFlags() { auto& objectMgr = OpenRCT2::GetContext()->GetObjectManager(); - for (auto objectType : TransientObjectTypes) + for (auto objectType : getTransientObjectTypes()) { for (int32_t i = 0; i < object_entry_group_counts[EnumValue(objectType)]; i++) { diff --git a/src/openrct2/object/ObjectTypes.cpp b/src/openrct2/object/ObjectTypes.cpp index 8d7fc157ad..24f5a2f758 100644 --- a/src/openrct2/object/ObjectTypes.cpp +++ b/src/openrct2/object/ObjectTypes.cpp @@ -7,24 +7,45 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ +#include "ObjectTypes.h" + +#include "../util/Util.h" #include "Object.h" #include +// Object types that can be saved in a park file. +static constexpr std::array kTransientObjectTypes = { + ObjectType::Ride, ObjectType::SmallScenery, ObjectType::LargeScenery, ObjectType::Walls, + ObjectType::Banners, ObjectType::Paths, ObjectType::PathAdditions, ObjectType::SceneryGroup, + ObjectType::ParkEntrance, ObjectType::Water, ObjectType::TerrainSurface, ObjectType::TerrainEdge, + ObjectType::Station, ObjectType::Music, ObjectType::FootpathSurface, ObjectType::FootpathRailings, +}; + +// Object types that cannot be saved in a park file. +static constexpr std::array kIntransientObjectTypes = { + ObjectType::ScenarioText, + ObjectType::Audio, +}; + +static_assert(kNumTransientObjectTypes + kNumIntransientObjectTypes == static_cast(ObjectType::Count)); + bool ObjectTypeIsTransient(ObjectType type) { - return std::find(TransientObjectTypes.begin(), TransientObjectTypes.end(), type) != std::end(TransientObjectTypes); + return std::find(kTransientObjectTypes.begin(), kTransientObjectTypes.end(), type) != std::end(kTransientObjectTypes); } bool ObjectTypeIsIntransient(ObjectType type) { - return std::find(IntransientObjectTypes.begin(), IntransientObjectTypes.end(), type) != std::end(IntransientObjectTypes); + return std::find(kIntransientObjectTypes.begin(), kIntransientObjectTypes.end(), type) != std::end(kIntransientObjectTypes); } -size_t GetObjectTypeLimit(ObjectType type) +std::span getTransientObjectTypes() { - auto index = EnumValue(type); - if (index >= EnumValue(ObjectType::Count)) - return 0; - return static_cast(object_entry_group_counts[index]); + return kTransientObjectTypes; +} + +std::span getIntransientObjectTypes() +{ + return kIntransientObjectTypes; } diff --git a/src/openrct2/object/ObjectTypes.h b/src/openrct2/object/ObjectTypes.h index adb9e4854c..317edb18fc 100644 --- a/src/openrct2/object/ObjectTypes.h +++ b/src/openrct2/object/ObjectTypes.h @@ -13,6 +13,7 @@ #include #include #include +#include using ObjectEntryIndex = uint16_t; constexpr ObjectEntryIndex OBJECT_ENTRY_INDEX_NULL = std::numeric_limits::max(); @@ -66,17 +67,10 @@ constexpr std::array ObjectTypes = { // Not using EnumValue to reduce header includes static_assert(ObjectTypes.size() == static_cast(ObjectType::Count)); -// Object types that can be saved in a park file. -constexpr std::array TransientObjectTypes = { - ObjectType::Ride, ObjectType::SmallScenery, ObjectType::LargeScenery, ObjectType::Walls, - ObjectType::Banners, ObjectType::Paths, ObjectType::PathAdditions, ObjectType::SceneryGroup, - ObjectType::ParkEntrance, ObjectType::Water, ObjectType::TerrainSurface, ObjectType::TerrainEdge, - ObjectType::Station, ObjectType::Music, ObjectType::FootpathSurface, ObjectType::FootpathRailings, -}; - -// Object types that cannot be saved in a park file. -constexpr std::array IntransientObjectTypes = { ObjectType::ScenarioText, ObjectType::Audio }; +static constexpr size_t kNumTransientObjectTypes = 16; +static constexpr size_t kNumIntransientObjectTypes = 2; bool ObjectTypeIsTransient(ObjectType type); bool ObjectTypeIsIntransient(ObjectType type); -size_t GetObjectTypeLimit(ObjectType type); +std::span getTransientObjectTypes(); +std::span getIntransientObjectTypes(); diff --git a/src/openrct2/park/ParkFile.cpp b/src/openrct2/park/ParkFile.cpp index fe205516e6..9e9ae0e17f 100644 --- a/src/openrct2/park/ParkFile.cpp +++ b/src/openrct2/park/ParkFile.cpp @@ -382,8 +382,8 @@ namespace OpenRCT2 auto objectList = objManager.GetLoadedObjects(); // Write number of object sub lists - cs.Write(static_cast(TransientObjectTypes.size())); - for (auto objectType : TransientObjectTypes) + cs.Write(static_cast(getTransientObjectTypes().size())); + for (auto objectType : getTransientObjectTypes()) { // Write sub list const auto& list = objectList.GetList(objectType);