1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-24 15:24:30 +01:00

Apply review suggestions

This commit is contained in:
ζeh Matt
2021-09-11 17:10:11 +03:00
parent 50d7b8bb1c
commit c9e2c9f4d2
2 changed files with 30 additions and 28 deletions

View File

@@ -255,15 +255,17 @@ static void scenario_fix_ghosts(rct_s6_data* s6)
}
}
template<typename T> static void ExportObjectList(IObjectManager& objMgr, T& objects, ObjectType type, size_t maxEntries)
template<ObjectType TObjectType, size_t TMaxEntries, typename T>
static void ExportObjectList(IObjectManager& objMgr, T& objects)
{
for (size_t i = 0; i < maxEntries; i++)
for (size_t i = 0; i < TMaxEntries; i++)
{
auto& dst = objects[i];
auto* object = objMgr.GetLoadedObject(type, i);
const auto* object = objMgr.GetLoadedObject(TObjectType, i);
if (object == nullptr || object->GetObjectEntry() == nullptr)
{
// The sv6 format expects null/invalid entries to be filled with 0xFF.
std::memset(&dst, 0xFF, sizeof(dst));
}
else
@@ -297,17 +299,17 @@ void S6Exporter::Export()
uint32_t researchedTrackPiecesB[128] = {};
auto& objectMgr = OpenRCT2::GetContext()->GetObjectManager();
ExportObjectList(objectMgr, _s6.RideObjects, ObjectType::Ride, RCT12_MAX_RIDE_OBJECTS);
ExportObjectList(objectMgr, _s6.SceneryObjects, ObjectType::SmallScenery, RCT2_MAX_SMALL_SCENERY_OBJECTS);
ExportObjectList(objectMgr, _s6.LargeSceneryObjects, ObjectType::LargeScenery, RCT2_MAX_LARGE_SCENERY_OBJECTS);
ExportObjectList(objectMgr, _s6.WallSceneryObjects, ObjectType::Walls, RCT2_MAX_WALL_SCENERY_OBJECTS);
ExportObjectList(objectMgr, _s6.BannerObjects, ObjectType::Banners, RCT2_MAX_BANNER_OBJECTS);
ExportObjectList(objectMgr, _s6.PathObjects, ObjectType::Paths, RCT2_MAX_PATH_OBJECTS);
ExportObjectList(objectMgr, _s6.PathAdditionObjects, ObjectType::PathBits, RCT2_MAX_PATH_ADDITION_OBJECTS);
ExportObjectList(objectMgr, _s6.SceneryGroupObjects, ObjectType::SceneryGroup, RCT2_MAX_SCENERY_GROUP_OBJECTS);
ExportObjectList(objectMgr, _s6.ParkEntranceObjects, ObjectType::ParkEntrance, RCT2_MAX_PARK_ENTRANCE_OBJECTS);
ExportObjectList(objectMgr, _s6.WaterObjects, ObjectType::Water, RCT2_MAX_WATER_OBJECTS);
ExportObjectList(objectMgr, _s6.ScenarioTextObjects, ObjectType::ScenarioText, RCT2_MAX_SCENARIO_TEXT_OBJECTS);
ExportObjectList<ObjectType::Ride, RCT12_MAX_RIDE_OBJECTS>(objectMgr, _s6.RideObjects);
ExportObjectList<ObjectType::SmallScenery, RCT2_MAX_SMALL_SCENERY_OBJECTS>(objectMgr, _s6.SceneryObjects);
ExportObjectList<ObjectType::LargeScenery, RCT2_MAX_LARGE_SCENERY_OBJECTS>(objectMgr, _s6.LargeSceneryObjects);
ExportObjectList<ObjectType::Walls, RCT2_MAX_WALL_SCENERY_OBJECTS>(objectMgr, _s6.WallSceneryObjects);
ExportObjectList<ObjectType::Banners, RCT2_MAX_BANNER_OBJECTS>(objectMgr, _s6.BannerObjects);
ExportObjectList<ObjectType::Paths, RCT2_MAX_PATH_OBJECTS>(objectMgr, _s6.PathObjects);
ExportObjectList<ObjectType::PathBits, RCT2_MAX_PATH_ADDITION_OBJECTS>(objectMgr, _s6.PathAdditionObjects);
ExportObjectList<ObjectType::SceneryGroup, RCT2_MAX_SCENERY_GROUP_OBJECTS>(objectMgr, _s6.SceneryGroupObjects);
ExportObjectList<ObjectType::ParkEntrance, RCT2_MAX_PARK_ENTRANCE_OBJECTS>(objectMgr, _s6.ParkEntranceObjects);
ExportObjectList<ObjectType::Water, RCT2_MAX_WATER_OBJECTS>(objectMgr, _s6.WaterObjects);
ExportObjectList<ObjectType::ScenarioText, RCT2_MAX_SCENARIO_TEXT_OBJECTS>(objectMgr, _s6.ScenarioTextObjects);
_s6.elapsed_months = static_cast<uint16_t>(gDateMonthsElapsed);
_s6.current_day = gDateMonthTicks;

View File

@@ -1563,8 +1563,8 @@ public:
return justText.data();
}
template<typename T>
static void AddRequiredObjects(std::vector<rct_object_entry>& required, const T& list, size_t internalLimit)
template<size_t TInternalLimit, typename T>
static void AddRequiredObjects(std::vector<rct_object_entry>& required, const T& list)
{
rct_object_entry nullEntry = {};
std::memset(&nullEntry, 0xFF, sizeof(nullEntry));
@@ -1576,7 +1576,7 @@ public:
// NOTE: The segment of this object type needs to be filled to the internal limit
// the object manager currently expects this.
for (size_t i = std::size(list); i < internalLimit; i++)
for (size_t i = std::size(list); i < TInternalLimit; i++)
{
required.push_back(nullEntry);
}
@@ -1586,17 +1586,17 @@ public:
{
std::vector<rct_object_entry> result;
AddRequiredObjects(result, _s6.RideObjects, MAX_RIDE_OBJECTS);
AddRequiredObjects(result, _s6.SceneryObjects, MAX_SMALL_SCENERY_OBJECTS);
AddRequiredObjects(result, _s6.LargeSceneryObjects, MAX_LARGE_SCENERY_OBJECTS);
AddRequiredObjects(result, _s6.WallSceneryObjects, MAX_WALL_SCENERY_OBJECTS);
AddRequiredObjects(result, _s6.BannerObjects, MAX_BANNER_OBJECTS);
AddRequiredObjects(result, _s6.PathObjects, MAX_PATH_OBJECTS);
AddRequiredObjects(result, _s6.PathAdditionObjects, MAX_PATH_ADDITION_OBJECTS);
AddRequiredObjects(result, _s6.SceneryGroupObjects, MAX_SCENERY_GROUP_OBJECTS);
AddRequiredObjects(result, _s6.ParkEntranceObjects, MAX_PARK_ENTRANCE_OBJECTS);
AddRequiredObjects(result, _s6.WaterObjects, MAX_WATER_OBJECTS);
AddRequiredObjects(result, _s6.ScenarioTextObjects, MAX_SCENARIO_TEXT_OBJECTS);
AddRequiredObjects<MAX_RIDE_OBJECTS>(result, _s6.RideObjects);
AddRequiredObjects<MAX_SMALL_SCENERY_OBJECTS>(result, _s6.SceneryObjects);
AddRequiredObjects<MAX_LARGE_SCENERY_OBJECTS>(result, _s6.LargeSceneryObjects);
AddRequiredObjects<MAX_WALL_SCENERY_OBJECTS>(result, _s6.WallSceneryObjects);
AddRequiredObjects<MAX_BANNER_OBJECTS>(result, _s6.BannerObjects);
AddRequiredObjects<MAX_PATH_OBJECTS>(result, _s6.PathObjects);
AddRequiredObjects<MAX_PATH_ADDITION_OBJECTS>(result, _s6.PathAdditionObjects);
AddRequiredObjects<MAX_SCENERY_GROUP_OBJECTS>(result, _s6.SceneryGroupObjects);
AddRequiredObjects<MAX_PARK_ENTRANCE_OBJECTS>(result, _s6.ParkEntranceObjects);
AddRequiredObjects<MAX_WATER_OBJECTS>(result, _s6.WaterObjects);
AddRequiredObjects<MAX_SCENARIO_TEXT_OBJECTS>(result, _s6.ScenarioTextObjects);
return result;
}