mirror of https://github.com/OpenRCT2/OpenRCT2.git
Fix merge issues add ride use history
This commit is contained in:
parent
0fae81c530
commit
0652b326e1
|
@ -33,6 +33,7 @@
|
|||
#include "object/Object.h"
|
||||
#include "object/ObjectManager.h"
|
||||
#include "object/ObjectRepository.h"
|
||||
#include "peep/RideUseSystem.h"
|
||||
#include "peep/Staff.h"
|
||||
#include "ride/ShopItem.h"
|
||||
#include "ride/Vehicle.h"
|
||||
|
@ -73,7 +74,7 @@ namespace OpenRCT2
|
|||
constexpr uint32_t PARK_FILE_MAGIC = 0x4B524150; // PARK
|
||||
|
||||
// Current version that is saved.
|
||||
constexpr uint32_t PARK_FILE_CURRENT_VERSION = 0x2;
|
||||
constexpr uint32_t PARK_FILE_CURRENT_VERSION = 0x3;
|
||||
|
||||
// The minimum version that is forwards compatible with the current version.
|
||||
constexpr uint32_t PARK_FILE_MIN_VERSION = 0x2;
|
||||
|
@ -1282,6 +1283,31 @@ namespace OpenRCT2
|
|||
cs.ReadWrite(entity.sprite_direction);
|
||||
}
|
||||
|
||||
static std::vector<ObjectEntryIndex> LegacyGetRideTypesBeenOn(const std::array<uint8_t, 16>& srcArray)
|
||||
{
|
||||
std::vector<ObjectEntryIndex> ridesTypesBeenOn;
|
||||
for (ObjectEntryIndex i = 0; i < RCT12_MAX_RIDE_OBJECTS; i++)
|
||||
{
|
||||
if (srcArray[i / 8] & (1 << (i % 8)))
|
||||
{
|
||||
ridesTypesBeenOn.push_back(i);
|
||||
}
|
||||
}
|
||||
return ridesTypesBeenOn;
|
||||
}
|
||||
static std::vector<ride_id_t> LegacyGetRidesBeenOn(const std::array<uint8_t, 32>& srcArray)
|
||||
{
|
||||
std::vector<ride_id_t> ridesBeenOn;
|
||||
for (uint16_t i = 0; i < RCT12_MAX_RIDES_IN_PARK; i++)
|
||||
{
|
||||
if (srcArray[i / 8] & (1 << (i % 8)))
|
||||
{
|
||||
ridesBeenOn.push_back(i);
|
||||
}
|
||||
}
|
||||
return ridesBeenOn;
|
||||
}
|
||||
|
||||
static void ReadWritePeep(OrcaStream& os, OrcaStream::ChunkStream& cs, Peep& entity)
|
||||
{
|
||||
auto version = os.GetHeader().TargetVersion;
|
||||
|
@ -1408,10 +1434,12 @@ namespace OpenRCT2
|
|||
if (guest != nullptr)
|
||||
{
|
||||
cs.ReadWrite(guest->PaidOnDrink);
|
||||
cs.ReadWriteArray(guest->RideTypesBeenOn, [&cs](uint8_t& rideType) {
|
||||
std::array<uint8_t, 16> rideTypeBeenOn;
|
||||
cs.ReadWriteArray(rideTypeBeenOn, [&cs](uint8_t& rideType) {
|
||||
cs.ReadWrite(rideType);
|
||||
return true;
|
||||
});
|
||||
OpenRCT2::RideUse::GetTypeHistory().Set(guest->sprite_index, LegacyGetRideTypesBeenOn(rideTypeBeenOn));
|
||||
cs.ReadWrite(guest->ItemFlags);
|
||||
cs.ReadWrite(guest->Photo2RideRef);
|
||||
cs.ReadWrite(guest->Photo3RideRef);
|
||||
|
@ -1465,10 +1493,12 @@ namespace OpenRCT2
|
|||
if (guest != nullptr)
|
||||
{
|
||||
cs.ReadWrite(guest->TimeInQueue);
|
||||
cs.ReadWriteArray(guest->RidesBeenOn, [&cs](ride_id_t& rideId) {
|
||||
cs.ReadWrite(rideId);
|
||||
std::array<uint8_t, 32> ridesBeenOn;
|
||||
cs.ReadWriteArray(ridesBeenOn, [&cs](uint8_t& rideType) {
|
||||
cs.ReadWrite(rideType);
|
||||
return true;
|
||||
});
|
||||
OpenRCT2::RideUse::GetHistory().Set(guest->sprite_index, LegacyGetRidesBeenOn(ridesBeenOn));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1770,15 +1800,62 @@ namespace OpenRCT2
|
|||
cs.Write(static_cast<uint8_t>(guest.Intensity));
|
||||
}
|
||||
cs.ReadWrite(guest.NauseaTolerance);
|
||||
cs.ReadWriteArray(guest.RideTypesBeenOn, [&cs](uint8_t& rideType) {
|
||||
cs.ReadWrite(rideType);
|
||||
return true;
|
||||
});
|
||||
|
||||
if (os.GetHeader().TargetVersion < 3)
|
||||
{
|
||||
std::array<uint8_t, 16> rideTypeBeenOn;
|
||||
cs.ReadWriteArray(rideTypeBeenOn, [&cs](uint8_t& rideType) {
|
||||
cs.ReadWrite(rideType);
|
||||
return true;
|
||||
});
|
||||
OpenRCT2::RideUse::GetTypeHistory().Set(guest.sprite_index, LegacyGetRideTypesBeenOn(rideTypeBeenOn));
|
||||
}
|
||||
|
||||
cs.ReadWrite(guest.TimeInQueue);
|
||||
cs.ReadWriteArray(guest.RidesBeenOn, [&cs](ride_id_t& rideId) {
|
||||
cs.ReadWrite(rideId);
|
||||
return true;
|
||||
});
|
||||
if (os.GetHeader().TargetVersion < 3)
|
||||
{
|
||||
std::array<uint8_t, 32> ridesBeenOn;
|
||||
cs.ReadWriteArray(ridesBeenOn, [&cs](uint8_t& rideType) {
|
||||
cs.ReadWrite(rideType);
|
||||
return true;
|
||||
});
|
||||
OpenRCT2::RideUse::GetHistory().Set(guest.sprite_index, LegacyGetRidesBeenOn(ridesBeenOn));
|
||||
}
|
||||
else
|
||||
{
|
||||
if (cs.GetMode() == OrcaStream::Mode::READING)
|
||||
{
|
||||
std::vector<ride_id_t> rideUse;
|
||||
cs.ReadWriteVector(rideUse, [&cs](ride_id_t& rideId) { cs.ReadWrite(rideId); });
|
||||
OpenRCT2::RideUse::GetHistory().Set(guest.sprite_index, std::move(rideUse));
|
||||
std::vector<ObjectEntryIndex> rideTypeUse;
|
||||
cs.ReadWriteVector(rideTypeUse, [&cs](ObjectEntryIndex& rideType) { cs.ReadWrite(rideType); });
|
||||
OpenRCT2::RideUse::GetTypeHistory().Set(guest.sprite_index, std::move(rideTypeUse));
|
||||
}
|
||||
else
|
||||
{
|
||||
auto* rideUse = OpenRCT2::RideUse::GetHistory().GetAll(guest.sprite_index);
|
||||
if (rideUse == nullptr)
|
||||
{
|
||||
std::vector<ride_id_t> empty;
|
||||
cs.ReadWriteVector(empty, [&cs](ride_id_t& rideId) { cs.ReadWrite(rideId); });
|
||||
}
|
||||
else
|
||||
{
|
||||
cs.ReadWriteVector(*rideUse, [&cs](ride_id_t& rideId) { cs.ReadWrite(rideId); });
|
||||
}
|
||||
auto* rideTypeUse = OpenRCT2::RideUse::GetTypeHistory().GetAll(guest.sprite_index);
|
||||
if (rideTypeUse == nullptr)
|
||||
{
|
||||
std::vector<ObjectEntryIndex> empty;
|
||||
cs.ReadWriteVector(empty, [&cs](ObjectEntryIndex& rideId) { cs.ReadWrite(rideId); });
|
||||
}
|
||||
else
|
||||
{
|
||||
cs.ReadWriteVector(*rideTypeUse, [&cs](ObjectEntryIndex& rideId) { cs.ReadWrite(rideId); });
|
||||
}
|
||||
}
|
||||
}
|
||||
cs.ReadWrite(guest.CashInPocket);
|
||||
cs.ReadWrite(guest.CashSpent);
|
||||
cs.ReadWrite(guest.Photo1RideRef);
|
||||
|
|
|
@ -7446,7 +7446,7 @@ void Guest::RemoveRideFromMemory(ride_id_t rideId)
|
|||
break;
|
||||
|
||||
// Ride ids and shop item ids might have the same value, look only for ride thoughts.
|
||||
if (IsThoughtShopItemRelated(entry.type) || entry.item != rideId)
|
||||
if (IsThoughtShopItemRelated(entry.type) || entry.ride != rideId)
|
||||
{
|
||||
it++;
|
||||
continue;
|
||||
|
@ -7461,6 +7461,6 @@ void Guest::RemoveRideFromMemory(ride_id_t rideId)
|
|||
// Last slot is now free.
|
||||
auto& lastEntry = Thoughts.back();
|
||||
lastEntry.type = PeepThoughtType::None;
|
||||
lastEntry.item = PEEP_THOUGHT_ITEM_NONE;
|
||||
lastEntry.argument = 0;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -44,7 +44,7 @@ constexpr const uint32_t SPATIAL_INDEX_LOCATION_NULL = SPATIAL_INDEX_SIZE - 1;
|
|||
|
||||
static std::array<std::vector<uint16_t>, SPATIAL_INDEX_SIZE> gSpriteSpatialIndex;
|
||||
|
||||
static void FreeEntity(SpriteBase* entity);
|
||||
static void FreeEntity(SpriteBase& entity);
|
||||
|
||||
constexpr size_t GetSpatialIndexOffset(int32_t x, int32_t y)
|
||||
{
|
||||
|
@ -239,7 +239,7 @@ void reset_sprite_list()
|
|||
{
|
||||
continue;
|
||||
}
|
||||
FreeEntity(spr);
|
||||
FreeEntity(*spr);
|
||||
spr->Type = EntityType::Null;
|
||||
spr->sprite_index = i;
|
||||
|
||||
|
|
Loading…
Reference in New Issue