From e7113a9f267f136b848662f09e96c7ac7245659f Mon Sep 17 00:00:00 2001 From: duncanspumpkin Date: Sat, 27 Mar 2021 09:51:15 +0000 Subject: [PATCH] Fix entity writing --- src/openrct2/ParkFile.cpp | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/src/openrct2/ParkFile.cpp b/src/openrct2/ParkFile.cpp index a70ea732fa..6f5dc649ab 100644 --- a/src/openrct2/ParkFile.cpp +++ b/src/openrct2/ParkFile.cpp @@ -750,9 +750,24 @@ namespace OpenRCT2 } } + template void WriteEntitiesOfType(OrcaStream::ChunkStream& cs) + { + auto count = GetEntityListCount(T::cEntityType); + cs.Write(T::cEntityType); + cs.Write(count); + for (auto* ent : EntityList()) + { + ReadWriteEntity(cs, *ent); + } + } + template void WriteEntitiesOfTypes(OrcaStream::ChunkStream& cs) + { + (WriteEntitiesOfType(cs), ...); + } + void ReadWriteEntitiesChunk(OrcaStream& os) { - os.ReadWriteChunk(ParkFileChunkType::ENTITIES, [](OrcaStream::ChunkStream& cs) { + os.ReadWriteChunk(ParkFileChunkType::ENTITIES, [this](OrcaStream::ChunkStream& cs) { if (cs.GetMode() == OrcaStream::Mode::READING) { reset_sprite_list(); @@ -769,19 +784,9 @@ namespace OpenRCT2 } else { - for (uint16_t i = 0; i < MAX_SPRITES; i++) - { - auto entity = get_sprite(i); - if (entity->sprite_identifier != SpriteIdentifier::Null) - { - entityIndices.push_back(i); - } - } - cs.ReadWriteVector(entityIndices, [&cs](uint16_t index) { - auto& entity = *(get_sprite(index)); - cs.ReadWrite(index); - ReadWriteEntity(cs, entity); - }); + WriteEntitiesOfTypes< + Vehicle, Guest, Staff, Litter, SteamParticle, MoneyEffect, VehicleCrashParticle, ExplosionCloud, + CrashSplashParticle, ExplosionFlare, JumpingFountain, Balloon, Duck>(cs); } }); } @@ -841,7 +846,7 @@ namespace OpenRCT2 else { // Track direction and type are in the same field - cs.ReadWrite(entity.track_direction); + cs.ReadWrite(entity.TrackTypeAndDirection); } cs.ReadWrite(entity.TrackLocation.x); cs.ReadWrite(entity.TrackLocation.y);