Skip to content

Commit

Permalink
Remove void* obj from RideEntry
Browse files Browse the repository at this point in the history
  • Loading branch information
duncanspumpkin authored Oct 16, 2024
1 parent 9eb6ee2 commit 5934dc6
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 65 deletions.
10 changes: 5 additions & 5 deletions src/openrct2-ui/windows/EditorObjectSelection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1275,19 +1275,19 @@ namespace OpenRCT2::Ui::Windows
if (GetSelectedObjectType() == ObjectType::Ride)
{
auto* rideObject = reinterpret_cast<RideObject*>(_loadedObject.get());
const auto* rideEntry = reinterpret_cast<RideObjectEntry*>(rideObject->GetLegacyData());
if (rideEntry->shop_item[0] != ShopItem::None)
const auto& rideEntry = rideObject->GetEntry();
if (rideEntry.shop_item[0] != ShopItem::None)
{
std::string sells = "";
for (size_t i = 0; i < std::size(rideEntry->shop_item); i++)
for (size_t i = 0; i < std::size(rideEntry.shop_item); i++)
{
if (rideEntry->shop_item[i] == ShopItem::None)
if (rideEntry.shop_item[i] == ShopItem::None)
continue;

if (!sells.empty())
sells += ", ";

sells += LanguageGetString(GetShopItemDescriptor(rideEntry->shop_item[i]).Naming.Plural);
sells += LanguageGetString(GetShopItemDescriptor(rideEntry.shop_item[i]).Naming.Plural);
}
auto ft = Formatter();
ft.Add<const char*>(sells.c_str());
Expand Down
45 changes: 22 additions & 23 deletions src/openrct2-ui/windows/NewRide.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -682,22 +682,23 @@ namespace OpenRCT2::Ui::Windows
continue;

// Ride entries
const auto* rideEntry = GetRideEntryByIndex(rideEntryIndex);
auto& objMgr = OpenRCT2::GetContext()->GetObjectManager();
auto rideObj = static_cast<const RideObject*>(objMgr.GetLoadedObject(ObjectType::Ride, rideEntryIndex));

// Skip if the vehicle isn't the preferred vehicle for this generic track type
if (!Config::Get().interface.ListRideVehiclesSeparately
&& !GetRideTypeDescriptor(rideType).HasFlag(RtdFlag::listVehiclesSeparately)
&& highestVehiclePriority > rideEntry->BuildMenuPriority)
&& highestVehiclePriority > rideObj->GetEntry().BuildMenuPriority)
{
continue;
}

if (!IsFiltered(*rideEntry))
if (!IsFiltered(*rideObj))
{
continue;
}

highestVehiclePriority = rideEntry->BuildMenuPriority;
highestVehiclePriority = rideObj->GetEntry().BuildMenuPriority;

// Determines how and where to draw a button for this ride type/vehicle.
if (Config::Get().interface.ListRideVehiclesSeparately
Expand Down Expand Up @@ -729,7 +730,7 @@ namespace OpenRCT2::Ui::Windows
else if (allowDrawingOverLastButton)
{
// Non-separate, draw over previous
if (rideType == rideEntry->ride_type[0])
if (rideType == rideObj->GetEntry().ride_type[0])
{
nextListItem--;
nextListItem->Type = rideType;
Expand All @@ -742,13 +743,13 @@ namespace OpenRCT2::Ui::Windows
return nextListItem;
}

bool IsFiltered(const RideObjectEntry& rideEntry)
bool IsFiltered(const RideObject& rideObject)
{
if (_filter.empty())
return true;

return IsFilterInRideType(rideEntry) || IsFilterInRideName(rideEntry) || IsFilterInIdentifier(rideEntry)
|| IsFilterInAuthors(rideEntry) || IsFilterInFilename(rideEntry);
return IsFilterInRideType(rideObject.GetEntry()) || IsFilterInRideName(rideObject.GetEntry())
|| IsFilterInIdentifier(rideObject) || IsFilterInAuthors(rideObject) || IsFilterInFilename(rideObject);
}

bool IsFilterInRideType(const RideObjectEntry& rideEntry)
Expand All @@ -763,30 +764,27 @@ namespace OpenRCT2::Ui::Windows
return String::Contains(u8string_view(LanguageGetString(rideName)), _filter, true);
}

bool IsFilterInAuthors(const RideObjectEntry& rideEntry)
bool IsFilterInAuthors(const RideObject& rideObject)
{
auto rideObject = static_cast<RideObject*>(rideEntry.obj);
auto authors = rideObject->GetAuthors();
auto& authors = rideObject.GetAuthors();

for (auto author : authors)
for (auto& author : authors)
if (String::Contains(author, _filter, true))
return true;

return false;
}

bool IsFilterInIdentifier(const RideObjectEntry& rideEntry)
bool IsFilterInIdentifier(const RideObject& rideObject)
{
auto rideObject = static_cast<RideObject*>(rideEntry.obj);
auto objectName = rideObject->GetObjectEntry().GetName();
auto objectName = rideObject.GetObjectEntry().GetName();

return String::Contains(objectName, _filter, true);
}

bool IsFilterInFilename(const RideObjectEntry& rideEntry)
bool IsFilterInFilename(const RideObject& rideObject)
{
auto rideObject = static_cast<RideObject*>(rideEntry.obj);
auto repoItem = ObjectRepositoryFindObjectByEntry(&(rideObject->GetObjectEntry()));
auto repoItem = ObjectRepositoryFindObjectByEntry(&(rideObject.GetObjectEntry()));

return String::Contains(repoItem->Path, _filter, true);
}
Expand Down Expand Up @@ -919,8 +917,10 @@ namespace OpenRCT2::Ui::Windows

void DrawRideInformation(DrawPixelInfo& dpi, RideSelection item, const ScreenCoordsXY& screenPos, int32_t textWidth)
{
const auto* rideEntry = GetRideEntryByIndex(item.EntryIndex);
RideNaming rideNaming = GetRideNaming(item.Type, *rideEntry);
auto& objMgr = OpenRCT2::GetContext()->GetObjectManager();
auto rideObj = static_cast<const RideObject*>(objMgr.GetLoadedObject(ObjectType::Ride, item.EntryIndex));
const auto& rideEntry = rideObj->GetEntry();
RideNaming rideNaming = GetRideNaming(item.Type, rideEntry);
auto ft = Formatter();

UpdateVehicleAvailability(item.Type);
Expand All @@ -935,7 +935,7 @@ namespace OpenRCT2::Ui::Windows
if (Config::Get().interface.ListRideVehiclesSeparately)
{
ft = Formatter();
ft.Add<StringId>(rideEntry->naming.Name);
ft.Add<StringId>(rideEntry.naming.Name);
DrawTextEllipsised(
dpi, screenPos + ScreenCoordsXY{ 0, 39 }, WindowWidth - 2, STR_NEW_RIDE_VEHICLE_NAME, ft);
}
Expand Down Expand Up @@ -976,8 +976,7 @@ namespace OpenRCT2::Ui::Windows
// Draw object author(s) if debugging tools are active
if (Config::Get().general.DebuggingTools)
{
auto rideObject = static_cast<RideObject*>(rideEntry->obj);
auto repoItem = ObjectRepositoryFindObjectByEntry(&(rideObject->GetObjectEntry()));
auto repoItem = ObjectRepositoryFindObjectByEntry(&(rideObj->GetObjectEntry()));

StringId authorStringId = repoItem->Authors.size() > 1 ? STR_AUTHORS_STRING : STR_AUTHOR_STRING;

Expand Down
6 changes: 2 additions & 4 deletions src/openrct2/object/ObjectManager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -740,11 +740,9 @@ class ObjectManager final : public IObjectManager
if (rideObject == nullptr)
continue;

const auto* entry = static_cast<RideObjectEntry*>(rideObject->GetLegacyData());
if (entry == nullptr)
continue;
const auto& entry = rideObject->GetEntry();

for (auto rideType : entry->ride_type)
for (auto rideType : entry.ride_type)
{
if (rideType < _rideTypeToObjectMap.size())
{
Expand Down
2 changes: 0 additions & 2 deletions src/openrct2/object/RideObject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -265,8 +265,6 @@ void RideObject::ReadLegacy(IReadObjectContext* context, IStream* stream)

void RideObject::Load()
{
_legacyType.obj = this;

GetStringTable().Sort();
_legacyType.naming.Name = LanguageAllocateObjectString(GetName());
_legacyType.naming.Description = LanguageAllocateObjectString(GetDescription());
Expand Down
4 changes: 4 additions & 0 deletions src/openrct2/object/RideObject.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ class RideObject final : public Object
{
return &_legacyType;
}
const RideObjectEntry& GetEntry() const
{
return _legacyType;
}

void ReadJson(IReadObjectContext* context, json_t& root) override;
void ReadLegacy(IReadObjectContext* context, OpenRCT2::IStream* stream) override;
Expand Down
9 changes: 3 additions & 6 deletions src/openrct2/rct2/T6Importer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -218,12 +218,9 @@ namespace OpenRCT2::RCT2
auto rawObject = ObjectRepositoryLoadObject(&td->trackAndVehicle.vehicleObject.Entry);
if (rawObject != nullptr)
{
const auto* rideEntry = static_cast<const RideObjectEntry*>(
static_cast<RideObject*>(rawObject.get())->GetLegacyData());
if (rideEntry != nullptr)
{
td->trackAndVehicle.rtdIndex = RCT2RideTypeToOpenRCT2RideType(td->trackAndVehicle.rtdIndex, *rideEntry);
}
const auto& rideEntry = static_cast<RideObject*>(rawObject.get())->GetEntry();

td->trackAndVehicle.rtdIndex = RCT2RideTypeToOpenRCT2RideType(td->trackAndVehicle.rtdIndex, rideEntry);
rawObject->Unload();
}
}
Expand Down
1 change: 0 additions & 1 deletion src/openrct2/ride/RideEntry.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ struct RideObjectEntry
uint8_t max_height;
ShopItem shop_item[OpenRCT2::RCT2::ObjectLimits::MaxShopItemsPerRideEntry];
StringId capacity;
void* obj;
uint8_t Clearance;

const CarEntry* GetCar(size_t id) const
Expand Down
Loading

0 comments on commit 5934dc6

Please sign in to comment.