mirror of https://github.com/OpenRCT2/OpenRCT2.git
Move build menu preference to objects themselves
This commit is contained in:
parent
e2b187c24a
commit
c77d500394
|
@ -347,18 +347,13 @@ static RideSelection* window_new_ride_iterate_over_ride_group(
|
||||||
bool buttonForRideTypeCreated = false;
|
bool buttonForRideTypeCreated = false;
|
||||||
bool allowDrawingOverLastButton = false;
|
bool allowDrawingOverLastButton = false;
|
||||||
|
|
||||||
char preferredVehicleName[DAT_NAME_LENGTH + 1];
|
uint8_t highestVehiclePriority = 0;
|
||||||
safe_strcpy(preferredVehicleName, " ", sizeof(preferredVehicleName));
|
|
||||||
|
|
||||||
// For each ride entry for this ride type
|
// For each ride entry for this ride type
|
||||||
auto& objManager = OpenRCT2::GetContext()->GetObjectManager();
|
auto& objManager = OpenRCT2::GetContext()->GetObjectManager();
|
||||||
auto& rideEntries = objManager.GetAllRideEntries(rideType);
|
auto& rideEntries = objManager.GetAllRideEntries(rideType);
|
||||||
for (auto rideEntryIndex : rideEntries)
|
for (auto rideEntryIndex : rideEntries)
|
||||||
{
|
{
|
||||||
char rideEntryName[DAT_NAME_LENGTH + 1];
|
|
||||||
std::memcpy(rideEntryName, object_entry_get_entry(OBJECT_TYPE_RIDE, rideEntryIndex)->name, 8);
|
|
||||||
rideEntryName[DAT_NAME_LENGTH] = 0;
|
|
||||||
|
|
||||||
// Skip if vehicle type is not invented yet
|
// Skip if vehicle type is not invented yet
|
||||||
if (!ride_entry_is_invented(rideEntryIndex) && !gCheatsIgnoreResearchStatus)
|
if (!ride_entry_is_invented(rideEntryIndex) && !gCheatsIgnoreResearchStatus)
|
||||||
continue;
|
continue;
|
||||||
|
@ -376,26 +371,12 @@ static RideSelection* window_new_ride_iterate_over_ride_group(
|
||||||
}
|
}
|
||||||
|
|
||||||
// Skip if the vehicle isn't the preferred vehicle for this generic track type
|
// Skip if the vehicle isn't the preferred vehicle for this generic track type
|
||||||
if (!RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY))
|
if (!RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY)
|
||||||
|
&& highestVehiclePriority > rideEntry->BuildMenuPriority)
|
||||||
{
|
{
|
||||||
if (strcmp(preferredVehicleName, " \0") == 0)
|
continue;
|
||||||
{
|
|
||||||
safe_strcpy(preferredVehicleName, rideEntryName, sizeof(preferredVehicleName));
|
|
||||||
preferredVehicleName[DAT_NAME_LENGTH] = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (RideGroupManager::VehiclePreferenceCompare(rideType, preferredVehicleName, rideEntryName) == 1)
|
|
||||||
{
|
|
||||||
safe_strcpy(preferredVehicleName, rideEntryName, sizeof(preferredVehicleName));
|
|
||||||
preferredVehicleName[DAT_NAME_LENGTH] = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
highestVehiclePriority = rideEntry->BuildMenuPriority;
|
||||||
|
|
||||||
// Determines how and where to draw a button for this ride type/vehicle.
|
// Determines how and where to draw a button for this ride type/vehicle.
|
||||||
if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY))
|
if (RideTypeDescriptors[rideType].HasFlag(RIDE_TYPE_FLAG_LIST_VEHICLES_SEPARATELY))
|
||||||
|
|
|
@ -50,7 +50,11 @@ void RideObject::ReadLegacy(IReadObjectContext* context, IStream* stream)
|
||||||
_legacyType.second_vehicle = stream->ReadValue<uint8_t>();
|
_legacyType.second_vehicle = stream->ReadValue<uint8_t>();
|
||||||
_legacyType.rear_vehicle = stream->ReadValue<uint8_t>();
|
_legacyType.rear_vehicle = stream->ReadValue<uint8_t>();
|
||||||
_legacyType.third_vehicle = stream->ReadValue<uint8_t>();
|
_legacyType.third_vehicle = stream->ReadValue<uint8_t>();
|
||||||
_legacyType.pad_019 = stream->ReadValue<uint8_t>();
|
|
||||||
|
_legacyType.BuildMenuPriority = 0;
|
||||||
|
// Skip pad_019
|
||||||
|
stream->Seek(1, STREAM_SEEK_CURRENT);
|
||||||
|
|
||||||
for (auto& vehicleEntry : _legacyType.vehicles)
|
for (auto& vehicleEntry : _legacyType.vehicles)
|
||||||
{
|
{
|
||||||
ReadLegacyVehicle(context, stream, &vehicleEntry);
|
ReadLegacyVehicle(context, stream, &vehicleEntry);
|
||||||
|
@ -621,6 +625,7 @@ void RideObject::ReadJson(IReadObjectContext* context, const json_t* root)
|
||||||
auto availableTrackPieces = ObjectJsonHelpers::GetJsonStringArray(json_object_get(properties, "availableTrackPieces"));
|
auto availableTrackPieces = ObjectJsonHelpers::GetJsonStringArray(json_object_get(properties, "availableTrackPieces"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_legacyType.BuildMenuPriority = ObjectJsonHelpers::GetInteger(properties, "buildMenuPriority", 0);
|
||||||
_legacyType.flags |= ObjectJsonHelpers::GetFlags<uint32_t>(
|
_legacyType.flags |= ObjectJsonHelpers::GetFlags<uint32_t>(
|
||||||
properties,
|
properties,
|
||||||
{
|
{
|
||||||
|
|
|
@ -117,7 +117,7 @@ struct rct_ride_entry
|
||||||
uint8_t second_vehicle;
|
uint8_t second_vehicle;
|
||||||
uint8_t rear_vehicle;
|
uint8_t rear_vehicle;
|
||||||
uint8_t third_vehicle;
|
uint8_t third_vehicle;
|
||||||
uint8_t pad_019;
|
uint8_t BuildMenuPriority;
|
||||||
rct_ride_entry_vehicle vehicles[RCT2_MAX_VEHICLES_PER_RIDE_ENTRY];
|
rct_ride_entry_vehicle vehicles[RCT2_MAX_VEHICLES_PER_RIDE_ENTRY];
|
||||||
vehicle_colour_preset_list* vehicle_preset_list;
|
vehicle_colour_preset_list* vehicle_preset_list;
|
||||||
int8_t excitement_multiplier;
|
int8_t excitement_multiplier;
|
||||||
|
|
|
@ -245,127 +245,3 @@ const RideGroup* RideGroupManager::RideGroupFind(const uint8_t rideType, const u
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::vector<const char*> RideGroupManager::GetPreferredRideEntryOrder(const uint8_t rideType)
|
|
||||||
{
|
|
||||||
// clang-format off
|
|
||||||
static const std::vector<const char *> preferredRideEntryOrder[] =
|
|
||||||
{
|
|
||||||
{ "SPDRCR " }, // RIDE_TYPE_SPIRAL_ROLLER_COASTER
|
|
||||||
{ "TOGST " }, // RIDE_TYPE_STAND_UP_ROLLER_COASTER
|
|
||||||
{ "ARRSW1 ", "VEKVAMP ", "ARRSW2 " }, // RIDE_TYPE_SUSPENDED_SWINGING_COASTER
|
|
||||||
{ "NEMT " }, // RIDE_TYPE_INVERTED_ROLLER_COASTER
|
|
||||||
{ "ZLDB ", "ZLOG ", "ZPANDA " }, // RIDE_TYPE_JUNIOR_ROLLER_COASTER
|
|
||||||
{ "NRL ", "NRL2 ", "AML1 ", "TRAM1 " }, // RIDE_TYPE_MINIATURE_RAILWAY
|
|
||||||
{ "MONO1 ", "MONO2 ", "MONO3 " }, // RIDE_TYPE_MONORAIL
|
|
||||||
{ "BATFL ", "SKYTR "}, // RIDE_TYPE_MINI_SUSPENDED_COASTER
|
|
||||||
{ "RBOAT ", "BBOAT ", "CBOAT ", "SWANS ", "TRIKE ", "JSKI " }, // RIDE_TYPE_BOAT_HIRE
|
|
||||||
{ "WMOUSE ", "WMMINE "}, // RIDE_TYPE_WOODEN_WILD_MOUSE
|
|
||||||
{ "STEEP1 ", "STEEP2 ", "SBOX " }, // RIDE_TYPE_STEEPLECHASE
|
|
||||||
{ "SPCAR ", "RCR ", "TRUCK1 ", "VCR ", "CTCAR " }, // RIDE_TYPE_CAR_RIDE
|
|
||||||
{ "SSC1 " }, // RIDE_TYPE_LAUNCHED_FREEFALL
|
|
||||||
{ "BOB1 ", "INTBOB " }, // RIDE_TYPE_BOBSLEIGH_COASTER
|
|
||||||
{ "OBS1 ", "OBS2 " }, // RIDE_TYPE_OBSERVATION_TOWER
|
|
||||||
{ "SCHT1 " }, // RIDE_TYPE_LOOPING_ROLLER_COASTER
|
|
||||||
{ "DING1 " }, // RIDE_TYPE_DINGHY_SLIDE
|
|
||||||
{ "AMT1 " }, // RIDE_TYPE_MINE_TRAIN_COASTER
|
|
||||||
{ "CLIFT1 ", "CLIFT2 " }, // RIDE_TYPE_CHAIRLIFT
|
|
||||||
{ "ARRT1 ", "ARRT2 " }, // RIDE_TYPE_CORKSCREW_ROLLER_COASTER
|
|
||||||
{ }, // RIDE_TYPE_MAZE
|
|
||||||
{ }, // RIDE_TYPE_SPIRAL_SLIDE
|
|
||||||
{ "KART1 " }, // RIDE_TYPE_GO_KARTS
|
|
||||||
{ "LFB1 " }, // RIDE_TYPE_LOG_FLUME
|
|
||||||
{ "RAPBOAT " }, // RIDE_TYPE_RIVER_RAPIDS
|
|
||||||
{ }, // RIDE_TYPE_DODGEMS
|
|
||||||
{ }, // RIDE_TYPE_SWINGING_SHIP
|
|
||||||
{ }, // RIDE_TYPE_SWINGING_INVERTER_SHIP
|
|
||||||
{ }, // RIDE_TYPE_FOOD_STALL
|
|
||||||
{ }, // RIDE_TYPE_1D
|
|
||||||
{ }, // RIDE_TYPE_DRINK_STALL
|
|
||||||
{ }, // RIDE_TYPE_1F
|
|
||||||
{ }, // RIDE_TYPE_SHOP
|
|
||||||
{ }, // RIDE_TYPE_MERRY_GO_ROUND
|
|
||||||
{ }, // RIDE_TYPE_22
|
|
||||||
{ }, // RIDE_TYPE_INFORMATION_KIOSK
|
|
||||||
{ }, // RIDE_TYPE_TOILETS
|
|
||||||
{ }, // RIDE_TYPE_FERRIS_WHEEL
|
|
||||||
{ }, // RIDE_TYPE_MOTION_SIMULATOR
|
|
||||||
{ }, // RIDE_TYPE_3D_CINEMA
|
|
||||||
{ }, // RIDE_TYPE_TOP_SPIN
|
|
||||||
{ }, // RIDE_TYPE_SPACE_RINGS
|
|
||||||
{ "REVF1 " }, // RIDE_TYPE_REVERSE_FREEFALL_COASTER
|
|
||||||
{ "LIFT1 " }, // RIDE_TYPE_LIFT
|
|
||||||
{ "BMVD " }, // RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER
|
|
||||||
{ }, // RIDE_TYPE_CASH_MACHINE
|
|
||||||
{ }, // RIDE_TYPE_TWIST
|
|
||||||
{ }, // RIDE_TYPE_HAUNTED_HOUSE
|
|
||||||
{ }, // RIDE_TYPE_FIRST_AID
|
|
||||||
{ }, // RIDE_TYPE_CIRCUS
|
|
||||||
{ "GTC ", "HMCAR " }, // RIDE_TYPE_GHOST_TRAIN
|
|
||||||
{ "BMSD ", "BMSU ", "BMFL ", "BMRB ", "GOLTR " }, // RIDE_TYPE_TWISTER_ROLLER_COASTER
|
|
||||||
{ "PTCT1 ", "MFT ", "PTCT2 " }, // RIDE_TYPE_WOODEN_ROLLER_COASTER
|
|
||||||
{ "SFRIC1 " }, // RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER
|
|
||||||
{ "SMC1 ", "SMC2 ", "WMSPIN " }, // RIDE_TYPE_STEEL_WILD_MOUSE
|
|
||||||
{ "ARRX " }, // RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER
|
|
||||||
{ }, // RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER_ALT
|
|
||||||
{ "BMAIR " }, // RIDE_TYPE_FLYING_ROLLER_COASTER
|
|
||||||
{ }, // RIDE_TYPE_FLYING_ROLLER_COASTER_ALT
|
|
||||||
{ "VREEL " }, // RIDE_TYPE_VIRGINIA_REEL
|
|
||||||
{ "SPBOAT " }, // RIDE_TYPE_SPLASH_BOATS
|
|
||||||
{ "HELICAR " }, // RIDE_TYPE_MINI_HELICOPTERS
|
|
||||||
{ "VEKST " }, // RIDE_TYPE_LAY_DOWN_ROLLER_COASTER
|
|
||||||
{ "SMONO " }, // RIDE_TYPE_SUSPENDED_MONORAIL
|
|
||||||
{ }, // RIDE_TYPE_LAY_DOWN_ROLLER_COASTER_ALT
|
|
||||||
{ "REVCAR " }, // RIDE_TYPE_REVERSER_ROLLER_COASTER
|
|
||||||
{ "UTCAR ", "UTCARR " }, // RIDE_TYPE_HEARTLINE_TWISTER_COASTER
|
|
||||||
{ }, // RIDE_TYPE_MINI_GOLF
|
|
||||||
{ "INTST " }, // RIDE_TYPE_GIGA_COASTER
|
|
||||||
{ "GDROP1 " }, // RIDE_TYPE_ROTO_DROP
|
|
||||||
{ }, // RIDE_TYPE_FLYING_SAUCERS
|
|
||||||
{ }, // RIDE_TYPE_CROOKED_HOUSE
|
|
||||||
{ "MONBK " }, // RIDE_TYPE_MONORAIL_CYCLES
|
|
||||||
{ "SLCT ", "SLCFO ", "VEKDV " }, // RIDE_TYPE_COMPACT_INVERTED_COASTER
|
|
||||||
{ "CSTBOAT " }, // RIDE_TYPE_WATER_COASTER
|
|
||||||
{ "THCAR " }, // RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER
|
|
||||||
{ "IVMC1 " }, // RIDE_TYPE_INVERTED_HAIRPIN_COASTER
|
|
||||||
{ }, // RIDE_TYPE_MAGIC_CARPET
|
|
||||||
{ "SUBMAR " }, // RIDE_TYPE_SUBMARINE_RIDE
|
|
||||||
{ "RFTBOAT " }, // RIDE_TYPE_RIVER_RAFTS
|
|
||||||
{ }, // RIDE_TYPE_50
|
|
||||||
{ }, // RIDE_TYPE_ENTERPRISE
|
|
||||||
{ }, // RIDE_TYPE_52
|
|
||||||
{ }, // RIDE_TYPE_53
|
|
||||||
{ }, // RIDE_TYPE_54
|
|
||||||
{ }, // RIDE_TYPE_55
|
|
||||||
{ "INTINV " }, // RIDE_TYPE_INVERTED_IMPULSE_COASTER
|
|
||||||
{ "WCATC ", "RCKC ", "JSTAR1 " }, // RIDE_TYPE_MINI_ROLLER_COASTER
|
|
||||||
{ "PMT1 " }, // RIDE_TYPE_MINE_RIDE
|
|
||||||
{ }, // RIDE_TYPE_59
|
|
||||||
{ "PREMT1 " }, // RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER
|
|
||||||
};
|
|
||||||
// clang-format on
|
|
||||||
return preferredRideEntryOrder[rideType];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This function keeps a list of the preferred vehicle for every generic track
|
|
||||||
* type, out of the available vehicle types in the current game. It determines
|
|
||||||
* which picture is shown on the new ride tab and which train type is selected
|
|
||||||
* by default.
|
|
||||||
*/
|
|
||||||
int32_t RideGroupManager::VehiclePreferenceCompare(const uint8_t rideType, const char* a, const char* b)
|
|
||||||
{
|
|
||||||
std::vector<const char*> rideEntryOrder = RideGroupManager::GetPreferredRideEntryOrder(rideType);
|
|
||||||
for (const char* object : rideEntryOrder)
|
|
||||||
{
|
|
||||||
if (String::Equals(object, a, true))
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (String::Equals(object, b, true))
|
|
||||||
{
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
|
@ -33,9 +33,6 @@ class RideGroupManager
|
||||||
public:
|
public:
|
||||||
static const RideGroup* GetRideGroup(const uint8_t trackType, const rct_ride_entry* rideEntry);
|
static const RideGroup* GetRideGroup(const uint8_t trackType, const rct_ride_entry* rideEntry);
|
||||||
static const RideGroup* RideGroupFind(const uint8_t rideType, const uint8_t index);
|
static const RideGroup* RideGroupFind(const uint8_t rideType, const uint8_t index);
|
||||||
|
|
||||||
static const std::vector<const char*> GetPreferredRideEntryOrder(const uint8_t rideType);
|
|
||||||
static int32_t VehiclePreferenceCompare(const uint8_t rideType, const char* a, const char* b);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum RideGroupFlags : uint8_t
|
enum RideGroupFlags : uint8_t
|
||||||
|
|
Loading…
Reference in New Issue