From dc93cacbee2cf4ba72715d9290c8e18f6e3e048b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20P=C4=99kalski?= Date: Mon, 9 Nov 2020 12:07:38 +0100 Subject: [PATCH] bugHunt: correcting code to compile code does not compile yet --- src/openrct2/Editor.cpp | 10 ++--- src/openrct2/Editor.h | 2 +- src/openrct2/EditorObjectSelectionSession.cpp | 12 +++--- src/openrct2/actions/TrackDesignAction.cpp | 4 +- src/openrct2/interface/InteractiveConsole.cpp | 2 +- src/openrct2/object/ObjectFactory.cpp | 2 +- src/openrct2/object/ObjectManager.cpp | 37 ++++++++++++++++--- src/openrct2/object/ObjectRepository.cpp | 4 +- src/openrct2/rct1/S4Importer.cpp | 8 ++-- 9 files changed, 53 insertions(+), 28 deletions(-) diff --git a/src/openrct2/Editor.cpp b/src/openrct2/Editor.cpp index f84a3dd48e..511e2669bb 100644 --- a/src/openrct2/Editor.cpp +++ b/src/openrct2/Editor.cpp @@ -47,7 +47,7 @@ using namespace OpenRCT2; namespace Editor { - static std::array, ObjectType::Count> _editorSelectedObjectFlags; + static std::array, EnumValue(ObjectType::Count)> _editorSelectedObjectFlags; static void ConvertSaveToScenarioCallback(int32_t result, const utf8* path); static void SetAllLandOwned(); @@ -530,10 +530,10 @@ namespace Editor return true; } - uint8_t GetSelectedObjectFlags(int32_t objectType, size_t index) + uint8_t GetSelectedObjectFlags(ObjectType objectType, size_t index) { uint8_t result = 0; - auto& list = _editorSelectedObjectFlags[objectType]; + auto& list = _editorSelectedObjectFlags[EnumValue(objectType)]; if (list.size() > index) { result = list[index]; @@ -543,7 +543,7 @@ namespace Editor void ClearSelectedObject(ObjectType objectType, size_t index, uint32_t flags) { - auto& list = _editorSelectedObjectFlags[objectType]; + auto& list = _editorSelectedObjectFlags[EnumValue(objectType)]; if (list.size() <= index) { list.resize(index + 1); @@ -553,7 +553,7 @@ namespace Editor void SetSelectedObject(ObjectType objectType, size_t index, uint32_t flags) { - auto& list = _editorSelectedObjectFlags[objectType]; + auto& list = _editorSelectedObjectFlags[EnumValue(objectType)]; if (list.size() <= index) { list.resize(index + 1); diff --git a/src/openrct2/Editor.h b/src/openrct2/Editor.h index 8cbc06e3d6..b9ab678119 100644 --- a/src/openrct2/Editor.h +++ b/src/openrct2/Editor.h @@ -27,7 +27,7 @@ namespace Editor void OpenWindowsForCurrentStep(); - uint8_t GetSelectedObjectFlags(int32_t objectType, size_t index); + uint8_t GetSelectedObjectFlags(ObjectType objectType, size_t index); void ClearSelectedObject(ObjectType objectType, size_t index, uint32_t flags); void SetSelectedObject(ObjectType objectType, size_t index, uint32_t flags); } // namespace Editor diff --git a/src/openrct2/EditorObjectSelectionSession.cpp b/src/openrct2/EditorObjectSelectionSession.cpp index a2502d021b..e9001e8356 100644 --- a/src/openrct2/EditorObjectSelectionSession.cpp +++ b/src/openrct2/EditorObjectSelectionSession.cpp @@ -240,7 +240,7 @@ void sub_6AB211() for (int32_t i = 0; i < numObjects; i++) { ObjectType objectType = items[i].ObjectEntry.GetType(); - _numAvailableObjectsForType[objectType]++; + _numAvailableObjectsForType[EnumValue(objectType)]++; } if (gScreenFlags & SCREEN_FLAGS_TRACK_DESIGNER) @@ -368,10 +368,10 @@ void reset_selected_object_count_and_size() const ObjectRepositoryItem* items = object_repository_get_items(); for (int32_t i = 0; i < numObjects; i++) { - uint8_t objectType = items[i].ObjectEntry.GetType(); + ObjectType objectType = items[i].ObjectEntry.GetType(); if (_objectSelectionFlags[i] & OBJECT_SELECTION_FLAG_SELECTED) { - _numSelectedObjectsForType[objectType]++; + _numSelectedObjectsForType[EnumValue(objectType)]++; } } } @@ -484,7 +484,7 @@ bool window_editor_object_selection_select_object(uint8_t isMasterObject, int32_ maxObjects = 4; } - if (maxObjects <= _numSelectedObjectsForType[objectType]) + if (maxObjects <= _numSelectedObjectsForType[EnumValue(objectType)]) { set_object_selection_error(isMasterObject, STR_OBJECT_SELECTION_ERR_TOO_MANY_OF_TYPE_SELECTED); return false; @@ -511,7 +511,7 @@ bool window_editor_object_selection_select_object(uint8_t isMasterObject, int32_ return false; } - if (maxObjects <= _numSelectedObjectsForType[objectType]) + if (maxObjects <= _numSelectedObjectsForType[EnumValue(objectType)]) { set_object_selection_error(isMasterObject, STR_OBJECT_SELECTION_ERR_TOO_MANY_OF_TYPE_SELECTED); return false; @@ -577,7 +577,7 @@ int32_t editor_remove_unused_objects() continue; } - _numSelectedObjectsForType[objectType]--; + _numSelectedObjectsForType[EnumValue(objectType)]--; _objectSelectionFlags[i] &= ~OBJECT_SELECTION_FLAG_SELECTED; numUnselectedObjects++; } diff --git a/src/openrct2/actions/TrackDesignAction.cpp b/src/openrct2/actions/TrackDesignAction.cpp index d3ca63d2bb..aa3df02c0c 100644 --- a/src/openrct2/actions/TrackDesignAction.cpp +++ b/src/openrct2/actions/TrackDesignAction.cpp @@ -43,7 +43,7 @@ GameActions::Result::Ptr TrackDesignAction::Query() const const rct_object_entry* rideEntryObject = &_td.vehicle_object; - uint8_t entryType; + ObjectType entryType; ObjectEntryIndex entryIndex; if (!find_object_in_entry_group(rideEntryObject, &entryType, &entryIndex)) { @@ -106,7 +106,7 @@ GameActions::Result::Ptr TrackDesignAction::Execute() const const rct_object_entry* rideEntryObject = &_td.vehicle_object; - uint8_t entryType; + ObjectType entryType; ObjectEntryIndex entryIndex; if (!find_object_in_entry_group(rideEntryObject, &entryType, &entryIndex)) { diff --git a/src/openrct2/interface/InteractiveConsole.cpp b/src/openrct2/interface/InteractiveConsole.cpp index 33b13d1da1..6f65219666 100644 --- a/src/openrct2/interface/InteractiveConsole.cpp +++ b/src/openrct2/interface/InteractiveConsole.cpp @@ -1129,7 +1129,7 @@ static int32_t cc_object_count(InteractiveConsole& console, [[maybe_unused]] con int32_t entryGroupIndex = 0; for (; entryGroupIndex < object_entry_group_counts[i]; entryGroupIndex++) { - if (object_entry_get_chunk(i, entryGroupIndex) == nullptr) + if (object_entry_get_chunk(static_cast(i), entryGroupIndex) == nullptr) { break; } diff --git a/src/openrct2/object/ObjectFactory.cpp b/src/openrct2/object/ObjectFactory.cpp index a2bb546448..8777e1b0fa 100644 --- a/src/openrct2/object/ObjectFactory.cpp +++ b/src/openrct2/object/ObjectFactory.cpp @@ -437,7 +437,7 @@ namespace ObjectFactory std::unique_ptr result; auto objectType = ParseObjectType(Json::GetString(jRoot["objectType"])); - if (objectType != 0xFF) + if (objectType != ObjectType::None) { auto id = Json::GetString(jRoot["id"]); diff --git a/src/openrct2/object/ObjectManager.cpp b/src/openrct2/object/ObjectManager.cpp index c9c31f77e2..fc2e921cd6 100644 --- a/src/openrct2/object/ObjectManager.cpp +++ b/src/openrct2/object/ObjectManager.cpp @@ -68,7 +68,7 @@ public: Object* GetLoadedObject(ObjectType objectType, size_t index) override { - if (index >= static_cast(object_entry_group_counts[objectType])) + if (index >= static_cast(object_entry_group_counts[EnumValue(objectType)])) { #ifdef DEBUG log_warning("Object index %u exceeds maximum for type %d.", index, objectType); @@ -110,7 +110,7 @@ public: loadedObject = ori->LoadedObject; if (loadedObject == nullptr) { - uint8_t objectType = ori->ObjectEntry.GetType(); + ObjectType objectType = ori->ObjectEntry.GetType(); int32_t slot = FindSpareSlot(objectType); if (slot != -1) { @@ -316,10 +316,10 @@ public: } private: - int32_t FindSpareSlot(uint8_t objectType) + int32_t FindSpareSlot(ObjectType objectType) { size_t firstIndex = GetIndexFromTypeEntry(objectType, 0); - size_t endIndex = firstIndex + object_entry_group_counts[objectType]; + size_t endIndex = firstIndex + object_entry_group_counts[EnumValue(objectType)]; for (size_t i = firstIndex; i < endIndex; i++) { if (_loadedObjects.size() <= i) @@ -428,29 +428,54 @@ private: switch (loadedObject->GetObjectType()) { case ObjectType::SmallScenery: + { sceneryEntry = static_cast(loadedObject->GetLegacyData()); sceneryEntry->small_scenery.scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject.get()); break; + } case ObjectType::LargeScenery: + { sceneryEntry = static_cast(loadedObject->GetLegacyData()); sceneryEntry->large_scenery.scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject.get()); break; + } case ObjectType::Walls: + { sceneryEntry = static_cast(loadedObject->GetLegacyData()); sceneryEntry->wall.scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject.get()); break; + } case ObjectType::Banners: + { sceneryEntry = static_cast(loadedObject->GetLegacyData()); sceneryEntry->banner.scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject.get()); break; + } case ObjectType::PathBits: + { sceneryEntry = static_cast(loadedObject->GetLegacyData()); sceneryEntry->path_bit.scenery_tab_id = GetPrimarySceneryGroupEntryIndex(loadedObject.get()); break; + } case ObjectType::SceneryGroup: + { auto sgObject = dynamic_cast(loadedObject.get()); sgObject->UpdateEntryIndexes(); break; + } + case ObjectType::Ride: + case ObjectType::Paths: + case ObjectType::ParkEntrance: + case ObjectType::Water: + case ObjectType::ScenarioText: + case ObjectType::TerrainSurface: + case ObjectType::TerrainEdge: + case ObjectType::Station: + case ObjectType::Music: + case ObjectType::Count: + case ObjectType::None: + //This switch handles only ObjectType for sceneries. + break; } } } @@ -721,10 +746,10 @@ private: Console::Error::WriteLine("[%s] Object could not be loaded.", objName); } - static int32_t GetIndexFromTypeEntry(int32_t objectType, size_t entryIndex) + static int32_t GetIndexFromTypeEntry(ObjectType objectType, size_t entryIndex) { int32_t result = 0; - for (int32_t i = 0; i < objectType; i++) + for (int32_t i = 0; i < EnumValue(objectType); i++) { result += object_entry_group_counts[i]; } diff --git a/src/openrct2/object/ObjectRepository.cpp b/src/openrct2/object/ObjectRepository.cpp index 4fd7c75d65..4d5e97934b 100644 --- a/src/openrct2/object/ObjectRepository.cpp +++ b/src/openrct2/object/ObjectRepository.cpp @@ -591,9 +591,9 @@ private: } // Encode data - uint8_t objectType = entry->GetType(); + ObjectType objectType = entry->GetType(); sawyercoding_chunk_header chunkHeader; - chunkHeader.encoding = object_entry_group_encoding[objectType]; + chunkHeader.encoding = object_entry_group_encoding[EnumValue(objectType)]; chunkHeader.length = static_cast(dataSize); uint8_t* encodedDataBuffer = Memory::Allocate(0x600000); size_t encodedDataSize = sawyercoding_write_chunk_buffer( diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index 3c301f7d3d..da7f452283 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -541,7 +541,7 @@ private: EntryList* entries = GetEntryList(objectType); // Check if there are spare entries available - size_t maxEntries = static_cast(object_entry_group_counts[objectType]); + size_t maxEntries = static_cast(object_entry_group_counts[EnumValue(objectType)]); if (entries != nullptr && entries->GetCount() < maxEntries) { entries->GetOrAddEntry(objectName); @@ -1921,7 +1921,7 @@ private: for (const char* objectName : entries) { rct_object_entry entry; - entry.flags = 0x00008000 + objectType; + entry.flags = 0x00008000 + EnumValue(objectType); std::copy_n(objectName, 8, entry.name); entry.checksum = 0; @@ -1947,7 +1947,7 @@ private: for (const auto objectName : objectNames) { rct_object_entry entry{}; - entry.flags = ((static_cast(ObjectSourceGame::RCT2) << 4) & 0xF0) | (objectType & 0x0F); + entry.flags = ((static_cast(ObjectSourceGame::RCT2) << 4) & 0xF0) | (EnumValue(objectType) & 0x0F); entry.SetName(objectName); entries.push_back(entry); } @@ -1988,7 +1988,7 @@ private: for (const char* objectName : entries) { rct_object_entry entry; - entry.flags = 0x00008000 + objectType; + entry.flags = 0x00008000 + EnumValue(objectType); std::copy_n(objectName, DAT_NAME_LENGTH, entry.name); entry.checksum = 0;