mirror of https://github.com/OpenRCT2/OpenRCT2.git
Move where templates are specialised to workaround gcc bug
This commit is contained in:
parent
2ea6a81ca4
commit
8a37a011f9
|
@ -765,91 +765,6 @@ namespace OpenRCT2
|
||||||
cs.ReadWrite(entity.sprite_direction);
|
cs.ReadWrite(entity.sprite_direction);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<> static void ReadWriteEntity(OrcaStream::ChunkStream& cs, Vehicle& entity)
|
|
||||||
{
|
|
||||||
ReadWriteEntityCommon(cs, entity);
|
|
||||||
auto ride = entity.GetRide();
|
|
||||||
cs.ReadWrite(entity.SubType);
|
|
||||||
cs.ReadWrite(entity.vehicle_sprite_type);
|
|
||||||
cs.ReadWrite(entity.bank_rotation);
|
|
||||||
cs.ReadWrite(entity.remaining_distance);
|
|
||||||
cs.ReadWrite(entity.velocity);
|
|
||||||
cs.ReadWrite(entity.acceleration);
|
|
||||||
cs.ReadWrite(entity.ride);
|
|
||||||
cs.ReadWrite(entity.vehicle_type);
|
|
||||||
cs.ReadWrite(entity.colours);
|
|
||||||
cs.ReadWrite(entity.track_progress);
|
|
||||||
if (ride != nullptr && ride->mode == RideMode::BoatHire && entity.status == Vehicle::Status::TravellingBoat)
|
|
||||||
{
|
|
||||||
cs.ReadWrite(entity.BoatLocation);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Track direction and type are in the same field
|
|
||||||
cs.ReadWrite(entity.TrackTypeAndDirection);
|
|
||||||
}
|
|
||||||
cs.ReadWrite(entity.TrackLocation.x);
|
|
||||||
cs.ReadWrite(entity.TrackLocation.y);
|
|
||||||
cs.ReadWrite(entity.TrackLocation.z);
|
|
||||||
cs.ReadWrite(entity.next_vehicle_on_train);
|
|
||||||
cs.ReadWrite(entity.prev_vehicle_on_ride);
|
|
||||||
cs.ReadWrite(entity.next_vehicle_on_ride);
|
|
||||||
cs.ReadWrite(entity.var_44);
|
|
||||||
cs.ReadWrite(entity.mass);
|
|
||||||
cs.ReadWrite(entity.update_flags);
|
|
||||||
cs.ReadWrite(entity.SwingSprite);
|
|
||||||
cs.ReadWrite(entity.current_station);
|
|
||||||
cs.ReadWrite(entity.current_time);
|
|
||||||
cs.ReadWrite(entity.crash_z);
|
|
||||||
cs.ReadWrite(entity.status);
|
|
||||||
cs.ReadWrite(entity.sub_state);
|
|
||||||
for (size_t i = 0; i < std::size(entity.peep); i++)
|
|
||||||
{
|
|
||||||
cs.ReadWrite(entity.peep[i]);
|
|
||||||
cs.ReadWrite(entity.peep_tshirt_colours[i]);
|
|
||||||
}
|
|
||||||
cs.ReadWrite(entity.num_seats);
|
|
||||||
cs.ReadWrite(entity.num_peeps);
|
|
||||||
cs.ReadWrite(entity.next_free_seat);
|
|
||||||
cs.ReadWrite(entity.restraints_position);
|
|
||||||
cs.ReadWrite(entity.crash_x);
|
|
||||||
cs.ReadWrite(entity.sound2_flags);
|
|
||||||
cs.ReadWrite(entity.spin_sprite);
|
|
||||||
cs.ReadWrite(entity.sound1_id);
|
|
||||||
cs.ReadWrite(entity.sound1_volume);
|
|
||||||
cs.ReadWrite(entity.sound2_id);
|
|
||||||
cs.ReadWrite(entity.sound2_volume);
|
|
||||||
cs.ReadWrite(entity.sound_vector_factor);
|
|
||||||
cs.ReadWrite(entity.time_waiting);
|
|
||||||
cs.ReadWrite(entity.speed);
|
|
||||||
cs.ReadWrite(entity.powered_acceleration);
|
|
||||||
cs.ReadWrite(entity.dodgems_collision_direction);
|
|
||||||
cs.ReadWrite(entity.animation_frame);
|
|
||||||
cs.ReadWrite(entity.var_C8);
|
|
||||||
cs.ReadWrite(entity.var_CA);
|
|
||||||
cs.ReadWrite(entity.scream_sound_id);
|
|
||||||
cs.ReadWrite(entity.TrackSubposition);
|
|
||||||
cs.ReadWrite(entity.var_CE);
|
|
||||||
cs.ReadWrite(entity.var_CF);
|
|
||||||
cs.ReadWrite(entity.lost_time_out);
|
|
||||||
cs.ReadWrite(entity.vertical_drop_countdown);
|
|
||||||
cs.ReadWrite(entity.var_D3);
|
|
||||||
cs.ReadWrite(entity.mini_golf_current_animation);
|
|
||||||
cs.ReadWrite(entity.mini_golf_flags);
|
|
||||||
cs.ReadWrite(entity.ride_subtype);
|
|
||||||
cs.ReadWrite(entity.colours_extended);
|
|
||||||
cs.ReadWrite(entity.seat_rotation);
|
|
||||||
cs.ReadWrite(entity.target_seat_rotation);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<> static void ReadWriteEntity(OrcaStream::ChunkStream& cs, Guest& entity)
|
|
||||||
{
|
|
||||||
ReadWritePeep(cs, entity);
|
|
||||||
}
|
|
||||||
template<> static void ReadWriteEntity(OrcaStream::ChunkStream& cs, Staff& entity)
|
|
||||||
{
|
|
||||||
ReadWritePeep(cs, entity);
|
|
||||||
}
|
|
||||||
static void ReadWritePeep(OrcaStream::ChunkStream& cs, Peep& entity)
|
static void ReadWritePeep(OrcaStream::ChunkStream& cs, Peep& entity)
|
||||||
{
|
{
|
||||||
ReadWriteEntityCommon(cs, entity);
|
ReadWriteEntityCommon(cs, entity);
|
||||||
|
@ -966,146 +881,15 @@ namespace OpenRCT2
|
||||||
cs.ReadWrite(entity.FavouriteRideRating);
|
cs.ReadWrite(entity.FavouriteRideRating);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<> static void ReadWriteEntity(OrcaStream::ChunkStream& cs, SteamParticle& steamParticle)
|
|
||||||
{
|
|
||||||
ReadWriteEntityCommon(cs, steamParticle);
|
|
||||||
cs.ReadWrite(steamParticle.time_to_move);
|
|
||||||
cs.ReadWrite(steamParticle.frame);
|
|
||||||
}
|
|
||||||
template<> static void ReadWriteEntity(OrcaStream::ChunkStream& cs, MoneyEffect& moneyEffect)
|
|
||||||
{
|
|
||||||
ReadWriteEntityCommon(cs, moneyEffect);
|
|
||||||
cs.ReadWrite(moneyEffect.MoveDelay);
|
|
||||||
cs.ReadWrite(moneyEffect.NumMovements);
|
|
||||||
cs.ReadWrite(moneyEffect.Vertical);
|
|
||||||
cs.ReadWrite(moneyEffect.Value);
|
|
||||||
cs.ReadWrite(moneyEffect.OffsetX);
|
|
||||||
cs.ReadWrite(moneyEffect.Wiggle);
|
|
||||||
}
|
|
||||||
template<> static void ReadWriteEntity(OrcaStream::ChunkStream& cs, VehicleCrashParticle& vehicleCrashParticle)
|
|
||||||
{
|
|
||||||
ReadWriteEntityCommon(cs, vehicleCrashParticle);
|
|
||||||
cs.ReadWrite(vehicleCrashParticle.frame);
|
|
||||||
cs.ReadWrite(vehicleCrashParticle.time_to_live);
|
|
||||||
cs.ReadWrite(vehicleCrashParticle.frame);
|
|
||||||
cs.ReadWrite(vehicleCrashParticle.colour[0]);
|
|
||||||
cs.ReadWrite(vehicleCrashParticle.colour[1]);
|
|
||||||
cs.ReadWrite(vehicleCrashParticle.crashed_sprite_base);
|
|
||||||
cs.ReadWrite(vehicleCrashParticle.velocity_x);
|
|
||||||
cs.ReadWrite(vehicleCrashParticle.velocity_y);
|
|
||||||
cs.ReadWrite(vehicleCrashParticle.velocity_z);
|
|
||||||
cs.ReadWrite(vehicleCrashParticle.acceleration_x);
|
|
||||||
cs.ReadWrite(vehicleCrashParticle.acceleration_y);
|
|
||||||
cs.ReadWrite(vehicleCrashParticle.acceleration_z);
|
|
||||||
}
|
|
||||||
template<> static void ReadWriteEntity(OrcaStream::ChunkStream& cs, ExplosionCloud& entity)
|
|
||||||
{
|
|
||||||
ReadWriteEntityCommon(cs, entity);
|
|
||||||
cs.ReadWrite(entity.frame);
|
|
||||||
}
|
|
||||||
template<> static void ReadWriteEntity(OrcaStream::ChunkStream& cs, CrashSplashParticle& entity)
|
|
||||||
{
|
|
||||||
ReadWriteEntityCommon(cs, entity);
|
|
||||||
cs.ReadWrite(entity.frame);
|
|
||||||
}
|
|
||||||
template<> static void ReadWriteEntity(OrcaStream::ChunkStream& cs, ExplosionFlare& entity)
|
|
||||||
{
|
|
||||||
ReadWriteEntityCommon(cs, entity);
|
|
||||||
cs.ReadWrite(entity.frame);
|
|
||||||
}
|
|
||||||
template<> static void ReadWriteEntity(OrcaStream::ChunkStream& cs, JumpingFountain& fountain)
|
|
||||||
{
|
|
||||||
ReadWriteEntityCommon(cs, fountain);
|
|
||||||
cs.ReadWrite(fountain.NumTicksAlive);
|
|
||||||
cs.ReadWrite(fountain.frame);
|
|
||||||
cs.ReadWrite(fountain.FountainFlags);
|
|
||||||
cs.ReadWrite(fountain.TargetX);
|
|
||||||
cs.ReadWrite(fountain.TargetY);
|
|
||||||
cs.ReadWrite(fountain.TargetY);
|
|
||||||
cs.ReadWrite(fountain.Iteration);
|
|
||||||
}
|
|
||||||
template<> static void ReadWriteEntity(OrcaStream::ChunkStream& cs, Balloon& balloon)
|
|
||||||
{
|
|
||||||
ReadWriteEntityCommon(cs, balloon);
|
|
||||||
cs.ReadWrite(balloon.popped);
|
|
||||||
cs.ReadWrite(balloon.time_to_move);
|
|
||||||
cs.ReadWrite(balloon.frame);
|
|
||||||
cs.ReadWrite(balloon.colour);
|
|
||||||
}
|
|
||||||
template<> static void ReadWriteEntity(OrcaStream::ChunkStream& cs, Duck& duck)
|
|
||||||
{
|
|
||||||
ReadWriteEntityCommon(cs, duck);
|
|
||||||
cs.ReadWrite(duck.frame);
|
|
||||||
cs.ReadWrite(duck.target_x);
|
|
||||||
cs.ReadWrite(duck.target_y);
|
|
||||||
cs.ReadWrite(duck.state);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ReadWriteEntity(OrcaStream::ChunkStream& cs, Litter& entity)
|
template<typename T> void WriteEntitiesOfType(OrcaStream::ChunkStream& cs);
|
||||||
{
|
template<typename... T> void WriteEntitiesOfTypes(OrcaStream::ChunkStream& cs);
|
||||||
ReadWriteEntityCommon(cs, entity);
|
|
||||||
cs.ReadWrite(entity.SubType);
|
|
||||||
cs.ReadWrite(entity.creationTick);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T> void WriteEntitiesOfType(OrcaStream::ChunkStream& cs)
|
template<typename T> void ReadEntitiesOfType(OrcaStream::ChunkStream& cs);
|
||||||
{
|
|
||||||
uint16_t count = GetEntityListCount(T::cEntityType);
|
|
||||||
cs.Write(T::cEntityType);
|
|
||||||
cs.Write(count);
|
|
||||||
for (auto* ent : EntityList<T>())
|
|
||||||
{
|
|
||||||
cs.Write(ent->sprite_index);
|
|
||||||
ReadWriteEntity(cs, *ent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename... T> void WriteEntitiesOfTypes(OrcaStream::ChunkStream& cs)
|
template<typename... T> void ReadEntitiesOfTypes(OrcaStream::ChunkStream& cs);
|
||||||
{
|
|
||||||
(WriteEntitiesOfType<T>(cs), ...);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T> void ReadEntitiesOfType(OrcaStream::ChunkStream& cs)
|
void ReadWriteEntitiesChunk(OrcaStream& os);
|
||||||
{
|
|
||||||
auto t = cs.Read<EntityType>();
|
|
||||||
assert(t == T::cEntityType);
|
|
||||||
auto count = cs.Read<uint16_t>();
|
|
||||||
for (auto i = 0; i < count; ++i)
|
|
||||||
{
|
|
||||||
auto index = cs.Read<uint16_t>();
|
|
||||||
auto* ent = CreateEntityAt<T>(index);
|
|
||||||
ReadWriteEntity(cs, *ent);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename... T> void ReadEntitiesOfTypes(OrcaStream::ChunkStream& cs)
|
|
||||||
{
|
|
||||||
(ReadEntitiesOfType<T>(cs), ...);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ReadWriteEntitiesChunk(OrcaStream& os)
|
|
||||||
{
|
|
||||||
os.ReadWriteChunk(ParkFileChunkType::ENTITIES, [this](OrcaStream::ChunkStream& cs) {
|
|
||||||
if (cs.GetMode() == OrcaStream::Mode::READING)
|
|
||||||
{
|
|
||||||
reset_sprite_list();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<uint16_t> entityIndices;
|
|
||||||
if (cs.GetMode() == OrcaStream::Mode::READING)
|
|
||||||
{
|
|
||||||
ReadEntitiesOfTypes<
|
|
||||||
Vehicle, Guest, Staff, Litter, SteamParticle, MoneyEffect, VehicleCrashParticle, ExplosionCloud,
|
|
||||||
CrashSplashParticle, ExplosionFlare, JumpingFountain, Balloon, Duck>(cs);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
WriteEntitiesOfTypes<
|
|
||||||
Vehicle, Guest, Staff, Litter, SteamParticle, MoneyEffect, VehicleCrashParticle, ExplosionCloud,
|
|
||||||
CrashSplashParticle, ExplosionFlare, JumpingFountain, Balloon, Duck>(cs);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void AutoDeriveVariables()
|
void AutoDeriveVariables()
|
||||||
{
|
{
|
||||||
|
@ -1164,6 +948,232 @@ namespace OpenRCT2
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<> static void ParkFile::ReadWriteEntity(OrcaStream::ChunkStream& cs, Vehicle& entity)
|
||||||
|
{
|
||||||
|
ReadWriteEntityCommon(cs, entity);
|
||||||
|
auto ride = entity.GetRide();
|
||||||
|
cs.ReadWrite(entity.SubType);
|
||||||
|
cs.ReadWrite(entity.vehicle_sprite_type);
|
||||||
|
cs.ReadWrite(entity.bank_rotation);
|
||||||
|
cs.ReadWrite(entity.remaining_distance);
|
||||||
|
cs.ReadWrite(entity.velocity);
|
||||||
|
cs.ReadWrite(entity.acceleration);
|
||||||
|
cs.ReadWrite(entity.ride);
|
||||||
|
cs.ReadWrite(entity.vehicle_type);
|
||||||
|
cs.ReadWrite(entity.colours);
|
||||||
|
cs.ReadWrite(entity.track_progress);
|
||||||
|
if (ride != nullptr && ride->mode == RideMode::BoatHire && entity.status == Vehicle::Status::TravellingBoat)
|
||||||
|
{
|
||||||
|
cs.ReadWrite(entity.BoatLocation);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Track direction and type are in the same field
|
||||||
|
cs.ReadWrite(entity.TrackTypeAndDirection);
|
||||||
|
}
|
||||||
|
cs.ReadWrite(entity.TrackLocation.x);
|
||||||
|
cs.ReadWrite(entity.TrackLocation.y);
|
||||||
|
cs.ReadWrite(entity.TrackLocation.z);
|
||||||
|
cs.ReadWrite(entity.next_vehicle_on_train);
|
||||||
|
cs.ReadWrite(entity.prev_vehicle_on_ride);
|
||||||
|
cs.ReadWrite(entity.next_vehicle_on_ride);
|
||||||
|
cs.ReadWrite(entity.var_44);
|
||||||
|
cs.ReadWrite(entity.mass);
|
||||||
|
cs.ReadWrite(entity.update_flags);
|
||||||
|
cs.ReadWrite(entity.SwingSprite);
|
||||||
|
cs.ReadWrite(entity.current_station);
|
||||||
|
cs.ReadWrite(entity.current_time);
|
||||||
|
cs.ReadWrite(entity.crash_z);
|
||||||
|
cs.ReadWrite(entity.status);
|
||||||
|
cs.ReadWrite(entity.sub_state);
|
||||||
|
for (size_t i = 0; i < std::size(entity.peep); i++)
|
||||||
|
{
|
||||||
|
cs.ReadWrite(entity.peep[i]);
|
||||||
|
cs.ReadWrite(entity.peep_tshirt_colours[i]);
|
||||||
|
}
|
||||||
|
cs.ReadWrite(entity.num_seats);
|
||||||
|
cs.ReadWrite(entity.num_peeps);
|
||||||
|
cs.ReadWrite(entity.next_free_seat);
|
||||||
|
cs.ReadWrite(entity.restraints_position);
|
||||||
|
cs.ReadWrite(entity.crash_x);
|
||||||
|
cs.ReadWrite(entity.sound2_flags);
|
||||||
|
cs.ReadWrite(entity.spin_sprite);
|
||||||
|
cs.ReadWrite(entity.sound1_id);
|
||||||
|
cs.ReadWrite(entity.sound1_volume);
|
||||||
|
cs.ReadWrite(entity.sound2_id);
|
||||||
|
cs.ReadWrite(entity.sound2_volume);
|
||||||
|
cs.ReadWrite(entity.sound_vector_factor);
|
||||||
|
cs.ReadWrite(entity.time_waiting);
|
||||||
|
cs.ReadWrite(entity.speed);
|
||||||
|
cs.ReadWrite(entity.powered_acceleration);
|
||||||
|
cs.ReadWrite(entity.dodgems_collision_direction);
|
||||||
|
cs.ReadWrite(entity.animation_frame);
|
||||||
|
cs.ReadWrite(entity.var_C8);
|
||||||
|
cs.ReadWrite(entity.var_CA);
|
||||||
|
cs.ReadWrite(entity.scream_sound_id);
|
||||||
|
cs.ReadWrite(entity.TrackSubposition);
|
||||||
|
cs.ReadWrite(entity.var_CE);
|
||||||
|
cs.ReadWrite(entity.var_CF);
|
||||||
|
cs.ReadWrite(entity.lost_time_out);
|
||||||
|
cs.ReadWrite(entity.vertical_drop_countdown);
|
||||||
|
cs.ReadWrite(entity.var_D3);
|
||||||
|
cs.ReadWrite(entity.mini_golf_current_animation);
|
||||||
|
cs.ReadWrite(entity.mini_golf_flags);
|
||||||
|
cs.ReadWrite(entity.ride_subtype);
|
||||||
|
cs.ReadWrite(entity.colours_extended);
|
||||||
|
cs.ReadWrite(entity.seat_rotation);
|
||||||
|
cs.ReadWrite(entity.target_seat_rotation);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<> static void ParkFile::ReadWriteEntity(OrcaStream::ChunkStream& cs, Guest& entity)
|
||||||
|
{
|
||||||
|
ReadWritePeep(cs, entity);
|
||||||
|
}
|
||||||
|
template<> static void ParkFile::ReadWriteEntity(OrcaStream::ChunkStream& cs, Staff& entity)
|
||||||
|
{
|
||||||
|
ReadWritePeep(cs, entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<> static void ParkFile::ReadWriteEntity(OrcaStream::ChunkStream& cs, SteamParticle& steamParticle)
|
||||||
|
{
|
||||||
|
ReadWriteEntityCommon(cs, steamParticle);
|
||||||
|
cs.ReadWrite(steamParticle.time_to_move);
|
||||||
|
cs.ReadWrite(steamParticle.frame);
|
||||||
|
}
|
||||||
|
template<> static void ParkFile::ReadWriteEntity(OrcaStream::ChunkStream& cs, MoneyEffect& moneyEffect)
|
||||||
|
{
|
||||||
|
ReadWriteEntityCommon(cs, moneyEffect);
|
||||||
|
cs.ReadWrite(moneyEffect.MoveDelay);
|
||||||
|
cs.ReadWrite(moneyEffect.NumMovements);
|
||||||
|
cs.ReadWrite(moneyEffect.Vertical);
|
||||||
|
cs.ReadWrite(moneyEffect.Value);
|
||||||
|
cs.ReadWrite(moneyEffect.OffsetX);
|
||||||
|
cs.ReadWrite(moneyEffect.Wiggle);
|
||||||
|
}
|
||||||
|
template<> static void ParkFile::ReadWriteEntity(OrcaStream::ChunkStream& cs, VehicleCrashParticle& vehicleCrashParticle)
|
||||||
|
{
|
||||||
|
ReadWriteEntityCommon(cs, vehicleCrashParticle);
|
||||||
|
cs.ReadWrite(vehicleCrashParticle.frame);
|
||||||
|
cs.ReadWrite(vehicleCrashParticle.time_to_live);
|
||||||
|
cs.ReadWrite(vehicleCrashParticle.frame);
|
||||||
|
cs.ReadWrite(vehicleCrashParticle.colour[0]);
|
||||||
|
cs.ReadWrite(vehicleCrashParticle.colour[1]);
|
||||||
|
cs.ReadWrite(vehicleCrashParticle.crashed_sprite_base);
|
||||||
|
cs.ReadWrite(vehicleCrashParticle.velocity_x);
|
||||||
|
cs.ReadWrite(vehicleCrashParticle.velocity_y);
|
||||||
|
cs.ReadWrite(vehicleCrashParticle.velocity_z);
|
||||||
|
cs.ReadWrite(vehicleCrashParticle.acceleration_x);
|
||||||
|
cs.ReadWrite(vehicleCrashParticle.acceleration_y);
|
||||||
|
cs.ReadWrite(vehicleCrashParticle.acceleration_z);
|
||||||
|
}
|
||||||
|
template<> static void ParkFile::ReadWriteEntity(OrcaStream::ChunkStream& cs, ExplosionCloud& entity)
|
||||||
|
{
|
||||||
|
ReadWriteEntityCommon(cs, entity);
|
||||||
|
cs.ReadWrite(entity.frame);
|
||||||
|
}
|
||||||
|
template<> static void ParkFile::ReadWriteEntity(OrcaStream::ChunkStream& cs, CrashSplashParticle& entity)
|
||||||
|
{
|
||||||
|
ReadWriteEntityCommon(cs, entity);
|
||||||
|
cs.ReadWrite(entity.frame);
|
||||||
|
}
|
||||||
|
template<> static void ParkFile::ReadWriteEntity(OrcaStream::ChunkStream& cs, ExplosionFlare& entity)
|
||||||
|
{
|
||||||
|
ReadWriteEntityCommon(cs, entity);
|
||||||
|
cs.ReadWrite(entity.frame);
|
||||||
|
}
|
||||||
|
template<> static void ParkFile::ReadWriteEntity(OrcaStream::ChunkStream& cs, JumpingFountain& fountain)
|
||||||
|
{
|
||||||
|
ReadWriteEntityCommon(cs, fountain);
|
||||||
|
cs.ReadWrite(fountain.NumTicksAlive);
|
||||||
|
cs.ReadWrite(fountain.frame);
|
||||||
|
cs.ReadWrite(fountain.FountainFlags);
|
||||||
|
cs.ReadWrite(fountain.TargetX);
|
||||||
|
cs.ReadWrite(fountain.TargetY);
|
||||||
|
cs.ReadWrite(fountain.TargetY);
|
||||||
|
cs.ReadWrite(fountain.Iteration);
|
||||||
|
}
|
||||||
|
template<> static void ParkFile::ReadWriteEntity(OrcaStream::ChunkStream& cs, Balloon& balloon)
|
||||||
|
{
|
||||||
|
ReadWriteEntityCommon(cs, balloon);
|
||||||
|
cs.ReadWrite(balloon.popped);
|
||||||
|
cs.ReadWrite(balloon.time_to_move);
|
||||||
|
cs.ReadWrite(balloon.frame);
|
||||||
|
cs.ReadWrite(balloon.colour);
|
||||||
|
}
|
||||||
|
template<> static void ParkFile::ReadWriteEntity(OrcaStream::ChunkStream& cs, Duck& duck)
|
||||||
|
{
|
||||||
|
ReadWriteEntityCommon(cs, duck);
|
||||||
|
cs.ReadWrite(duck.frame);
|
||||||
|
cs.ReadWrite(duck.target_x);
|
||||||
|
cs.ReadWrite(duck.target_y);
|
||||||
|
cs.ReadWrite(duck.state);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<> static void ParkFile::ReadWriteEntity(OrcaStream::ChunkStream& cs, Litter& entity)
|
||||||
|
{
|
||||||
|
ReadWriteEntityCommon(cs, entity);
|
||||||
|
cs.ReadWrite(entity.SubType);
|
||||||
|
cs.ReadWrite(entity.creationTick);
|
||||||
|
}
|
||||||
|
template<typename T> void ParkFile::WriteEntitiesOfType(OrcaStream::ChunkStream& cs)
|
||||||
|
{
|
||||||
|
uint16_t count = GetEntityListCount(T::cEntityType);
|
||||||
|
cs.Write(T::cEntityType);
|
||||||
|
cs.Write(count);
|
||||||
|
for (auto* ent : EntityList<T>())
|
||||||
|
{
|
||||||
|
cs.Write(ent->sprite_index);
|
||||||
|
ReadWriteEntity(cs, *ent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename... T> void ParkFile::WriteEntitiesOfTypes(OrcaStream::ChunkStream& cs)
|
||||||
|
{
|
||||||
|
(WriteEntitiesOfType<T>(cs), ...);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename T> void ParkFile::ReadEntitiesOfType(OrcaStream::ChunkStream& cs)
|
||||||
|
{
|
||||||
|
auto t = cs.Read<EntityType>();
|
||||||
|
assert(t == T::cEntityType);
|
||||||
|
auto count = cs.Read<uint16_t>();
|
||||||
|
for (auto i = 0; i < count; ++i)
|
||||||
|
{
|
||||||
|
auto index = cs.Read<uint16_t>();
|
||||||
|
auto* ent = CreateEntityAt<T>(index);
|
||||||
|
ReadWriteEntity(cs, *ent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename... T> void ParkFile::ReadEntitiesOfTypes(OrcaStream::ChunkStream& cs)
|
||||||
|
{
|
||||||
|
(ReadEntitiesOfType<T>(cs), ...);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ParkFile::ReadWriteEntitiesChunk(OrcaStream& os)
|
||||||
|
{
|
||||||
|
os.ReadWriteChunk(ParkFileChunkType::ENTITIES, [this](OrcaStream::ChunkStream& cs) {
|
||||||
|
if (cs.GetMode() == OrcaStream::Mode::READING)
|
||||||
|
{
|
||||||
|
reset_sprite_list();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<uint16_t> entityIndices;
|
||||||
|
if (cs.GetMode() == OrcaStream::Mode::READING)
|
||||||
|
{
|
||||||
|
ReadEntitiesOfTypes<
|
||||||
|
Vehicle, Guest, Staff, Litter, SteamParticle, MoneyEffect, VehicleCrashParticle, ExplosionCloud,
|
||||||
|
CrashSplashParticle, ExplosionFlare, JumpingFountain, Balloon, Duck>(cs);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
WriteEntitiesOfTypes<
|
||||||
|
Vehicle, Guest, Staff, Litter, SteamParticle, MoneyEffect, VehicleCrashParticle, ExplosionCloud,
|
||||||
|
CrashSplashParticle, ExplosionFlare, JumpingFountain, Balloon, Duck>(cs);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
} // namespace OpenRCT2
|
} // namespace OpenRCT2
|
||||||
|
|
||||||
enum : uint32_t
|
enum : uint32_t
|
||||||
|
|
Loading…
Reference in New Issue