Clean up ride groups and related functions

This commit is contained in:
Michael Steenbeek 2017-11-20 11:54:55 +01:00
parent bf69b2e682
commit ed05d45072
8 changed files with 147 additions and 164 deletions

View File

@ -395,7 +395,6 @@
F76C86AD1EC4E88400FA49E2 /* PlatformEnvironment.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C84641EC4E7CC00FA49E2 /* PlatformEnvironment.cpp */; };
F76C86AF1EC4E88400FA49E2 /* S4Importer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C84671EC4E7CC00FA49E2 /* S4Importer.cpp */; };
F76C86B01EC4E88400FA49E2 /* Tables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C84681EC4E7CC00FA49E2 /* Tables.cpp */; };
F76C86B21EC4E88400FA49E2 /* rct1.c in Sources */ = {isa = PBXBuildFile; fileRef = F76C846A1EC4E7CC00FA49E2 /* rct1.c */; };
F76C86B41EC4E88400FA49E2 /* SawyerChunk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C846D1EC4E7CC00FA49E2 /* SawyerChunk.cpp */; };
F76C86B61EC4E88400FA49E2 /* SawyerChunkReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C846F1EC4E7CC00FA49E2 /* SawyerChunkReader.cpp */; };
F76C86B81EC4E88400FA49E2 /* SawyerChunkWriter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F76C84711EC4E7CC00FA49E2 /* SawyerChunkWriter.cpp */; };
@ -611,7 +610,6 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
4C31B2E61FB7352900F6A38A /* Scenery.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Scenery.h; sourceTree = "<group>"; };
4C31B2E21FB6115600F6A38A /* MapGen.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MapGen.cpp; sourceTree = "<group>"; };
4C31B2E31FB6115600F6A38A /* MapGen.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MapGen.h; sourceTree = "<group>"; };
4C31B2E51FB6116100F6A38A /* Location.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Location.h; sourceTree = "<group>"; };
@ -1289,7 +1287,6 @@
F76C84671EC4E7CC00FA49E2 /* S4Importer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = S4Importer.cpp; sourceTree = "<group>"; };
F76C84681EC4E7CC00FA49E2 /* Tables.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Tables.cpp; sourceTree = "<group>"; };
F76C84691EC4E7CC00FA49E2 /* Tables.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Tables.h; sourceTree = "<group>"; };
F76C846A1EC4E7CC00FA49E2 /* rct1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = rct1.c; sourceTree = "<group>"; };
F76C846B1EC4E7CC00FA49E2 /* rct1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rct1.h; sourceTree = "<group>"; };
F76C846D1EC4E7CC00FA49E2 /* SawyerChunk.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SawyerChunk.cpp; sourceTree = "<group>"; };
F76C846E1EC4E7CC00FA49E2 /* SawyerChunk.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SawyerChunk.h; sourceTree = "<group>"; };
@ -1905,7 +1902,6 @@
F76C84521EC4E7CC00FA49E2 /* ParkImporter.h */,
F76C84641EC4E7CC00FA49E2 /* PlatformEnvironment.cpp */,
F76C84651EC4E7CC00FA49E2 /* PlatformEnvironment.h */,
F76C846A1EC4E7CC00FA49E2 /* rct1.c */,
F76C846B1EC4E7CC00FA49E2 /* rct1.h */,
F76C84751EC4E7CC00FA49E2 /* rct12.h */,
F76C84811EC4E7CC00FA49E2 /* rct2.h */,
@ -3469,7 +3465,6 @@
F76C86AD1EC4E88400FA49E2 /* PlatformEnvironment.cpp in Sources */,
F76C86AF1EC4E88400FA49E2 /* S4Importer.cpp in Sources */,
F76C86B01EC4E88400FA49E2 /* Tables.cpp in Sources */,
F76C86B21EC4E88400FA49E2 /* rct1.c in Sources */,
F76C86B41EC4E88400FA49E2 /* SawyerChunk.cpp in Sources */,
F76C86B61EC4E88400FA49E2 /* SawyerChunkReader.cpp in Sources */,
F76C86B81EC4E88400FA49E2 /* SawyerChunkWriter.cpp in Sources */,

View File

@ -1,137 +0,0 @@
#pragma region Copyright (c) 2014-2017 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#include "config/Config.h"
#include "game.h"
#include "localisation/string_ids.h"
#include "rct1.h"
#include "util/sawyercoding.h"
#include "util/util.h"
bool rideTypeShouldLoseSeparateFlag(const rct_ride_entry *rideEntry)
{
if (!gConfigInterface.select_by_track_type) {
return false;
}
bool remove_flag = true;
for (sint32 j = 0; j < MAX_RIDE_TYPES_PER_RIDE_ENTRY; j++) {
if (rideEntry->ride_type[j] == RIDE_TYPE_NULL) {
continue;
}
if (ride_type_has_flag(rideEntry->ride_type[j], RIDE_TYPE_FLAG_FLAT_RIDE)) {
remove_flag = false;
}
if (rideEntry->ride_type[j] == RIDE_TYPE_MAZE || rideEntry->ride_type[j] == RIDE_TYPE_MINI_GOLF) {
remove_flag = false;
}
}
return remove_flag;
}
const uint8 gRideCategories[] = {
2, // Spiral Roller coaster
2, // Stand Up Coaster
2, // Suspended Swinging
2, // Inverted
2, // Steel Mini Coaster
0, // Mini Railroad
0, // Monorail
2, // Mini Suspended Coaster
4, // Boat ride
2, // Wooden Wild Mine/Mouse
2, // Steeplechase/Motorbike/Soap Box Derby
1, // Car Ride
3, // Launched Freefall
2, // Bobsleigh Coaster
1, // Observation Tower
2, // Looping Roller Coaster
4, // Dinghy Slide
2, // Mine Train Coaster
0, // Chairlift
2, // Corkscrew Roller Coaster
1, // Maze
1, // Spiral Slide
3, // Go Karts
4, // Log Flume
4, // River Rapids
1, // Dodgems
3, // Pirate Ship
3, // Swinging Inverter Ship
5, // Food Stall
255, // (none)
5, // Drink Stall
255, // (none)
5, // Shop (all types)
1, // Merry Go Round
5, // Balloon Stall (maybe)
5, // Information Kiosk
5, // Bathroom
1, // Ferris Wheel
3, // Motion Simulator
3, // 3D Cinema
3, // Top Spin
1, // Space Rings
2, // Reverse Freefall Coaster
0, // Elevator
2, // Vertical Drop Roller Coaster
5, // ATM
3, // Twist
1, // Haunted House
5, // First Aid
1, // Circus Show
1, // Ghost Train
2, // Twister Roller Coaster
2, // Wooden Roller Coaster
2, // Side-Friction Roller Coaster
2, // Wild Mouse
2, // Multi Dimension Coaster
255, // (none)
2, // Flying Roller Coaster
255, // (none)
2, // Virginia Reel
4, // Splash Boats
1, // Mini Helicopters
2, // Lay-down Roller Coaster
0, // Suspended Monorail
255, // (none)
2, // Reverser Roller Coaster
2, // Heartline Twister Roller Coaster
1, // Mini Golf
2, // Giga Coaster
3, // Roto-Drop
1, // Flying Saucers
1, // Crooked House
1, // Monorail Cycles
2, // Compact Inverted Coaster
2, // Water Coaster
2, // Air Powered Vertical Coaster
2, // Inverted Hairpin Coaster
3, // Magic Carpet
4, // Submarine Ride
4, // River Rafts
255, // (none)
3, // Enterprise
255, // (none)
255, // (none)
255, // (none)
255, // (none)
2, // Inverted Impulse Coaster
2, // Mini Roller Coaster
2, // Mine Ride
255, // 59 Unknown Ride
2 // LIM Launched Roller Coaster
};

View File

@ -1224,10 +1224,6 @@ enum {
extern "C" {
#endif
extern const uint8 gRideCategories[RIDE_TYPE_COUNT];
bool rideTypeShouldLoseSeparateFlag(const rct_ride_entry *rideEntry);
ParkLoadResult * load_from_sv4(const char *path);
ParkLoadResult * load_from_sc4(const char *path);

View File

@ -88,7 +88,7 @@ static const RideGroup junior_rc_groups[MAX_RIDE_GROUPS_PER_RIDE_TYPE] = { ride_
static const RideGroup car_ride_groups[MAX_RIDE_GROUPS_PER_RIDE_TYPE] = { ride_group_car_ride, ride_group_monster_trucks };
static const RideGroup twister_rc_groups[MAX_RIDE_GROUPS_PER_RIDE_TYPE] = { ride_group_steel_twister_rc, ride_group_hyper_twister };
const RideGroup * RideGroupManager::GetRideGroup(uint8 rideType, rct_ride_entry * rideEntry)
const RideGroup * RideGroupManager::GetRideGroup(const uint8 rideType, const rct_ride_entry * rideEntry)
{
switch (rideType) {
case RIDE_TYPE_CORKSCREW_ROLLER_COASTER:
@ -116,7 +116,7 @@ const RideGroup * RideGroupManager::GetRideGroup(uint8 rideType, rct_ride_entry
}
}
bool RideGroupManager::RideTypeHasRideGroups(uint8 rideType)
bool RideGroupManager::RideTypeHasRideGroups(const uint8 rideType)
{
if (!gConfigInterface.select_by_track_type) {
return false;
@ -134,7 +134,7 @@ bool RideGroupManager::RideTypeHasRideGroups(uint8 rideType)
}
}
const RideGroup * RideGroupManager::RideGroupFind(uint8 rideType, uint8 index)
const RideGroup * RideGroupManager::RideGroupFind(const uint8 rideType, const uint8 index)
{
RideGroup * rideGroup;
@ -195,7 +195,7 @@ bool RideGroupManager::RideGroupIsInvented(const RideGroup * rideGroup)
return false;
}
const std::vector<const char *> RideGroupManager::GetPreferredRideEntryOrder(uint8 rideType)
const std::vector<const char *> RideGroupManager::GetPreferredRideEntryOrder(const uint8 rideType)
{
static const std::vector<const char *> preferredRideEntryOrder[] =
{
@ -300,7 +300,7 @@ const std::vector<const char *> RideGroupManager::GetPreferredRideEntryOrder(uin
* which picture is shown on the new ride tab and which train type is selected
* by default.
*/
sint32 RideGroupManager::VehiclePreferenceCompare(uint8 rideType, const char * a, const char * b)
sint32 RideGroupManager::VehiclePreferenceCompare(const uint8 rideType, const char * a, const char * b)
{
std::vector<const char *> rideEntryOrder = RideGroupManager::GetPreferredRideEntryOrder(rideType);
for (const char * object : rideEntryOrder)
@ -317,15 +317,140 @@ sint32 RideGroupManager::VehiclePreferenceCompare(uint8 rideType, const char * a
return 0;
}
bool RideGroupManager::RideTypeShouldLoseSeparateFlag(const rct_ride_entry * rideEntry)
{
if (!gConfigInterface.select_by_track_type)
{
return false;
}
bool remove_flag = true;
for (size_t j = 0; j < MAX_RIDE_TYPES_PER_RIDE_ENTRY; j++)
{
if (rideEntry->ride_type[j] == RIDE_TYPE_NULL)
{
continue;
}
if (ride_type_has_flag(rideEntry->ride_type[j], RIDE_TYPE_FLAG_FLAT_RIDE))
{
remove_flag = false;
}
if (rideEntry->ride_type[j] == RIDE_TYPE_MAZE || rideEntry->ride_type[j] == RIDE_TYPE_MINI_GOLF)
{
remove_flag = false;
}
}
return remove_flag;
}
extern "C"
{
const RideGroup * get_ride_group(uint8 rideType, rct_ride_entry * rideEntry)
const RideGroup * get_ride_group(uint8 rideType, const rct_ride_entry * rideEntry)
{
return RideGroupManager::GetRideGroup(rideType, rideEntry);
}
bool ride_type_has_ride_groups(uint8 rideType)
bool ride_type_has_ride_groups(const uint8 rideType)
{
return RideGroupManager::RideTypeHasRideGroups(rideType);
}
bool rideTypeShouldLoseSeparateFlag(const rct_ride_entry * rideEntry)
{
return RideGroupManager::RideTypeShouldLoseSeparateFlag(rideEntry);
}
}
const uint8 gRideCategories[] = {
RIDE_CATEGORY_ROLLERCOASTER, // Spiral Roller coaster
RIDE_CATEGORY_ROLLERCOASTER, // Stand Up Coaster
RIDE_CATEGORY_ROLLERCOASTER, // Suspended Swinging
RIDE_CATEGORY_ROLLERCOASTER, // Inverted
RIDE_CATEGORY_ROLLERCOASTER, // Steel Mini Coaster
RIDE_CATEGORY_TRANSPORT, // Mini Railroad
RIDE_CATEGORY_TRANSPORT, // Monorail
RIDE_CATEGORY_ROLLERCOASTER, // Mini Suspended Coaster
RIDE_CATEGORY_WATER, // Boat ride
RIDE_CATEGORY_ROLLERCOASTER, // Wooden Wild Mine/Mouse
RIDE_CATEGORY_ROLLERCOASTER, // Steeplechase/Motorbike/Soap Box Derby
RIDE_CATEGORY_GENTLE, // Car Ride
RIDE_CATEGORY_THRILL, // Launched Freefall
RIDE_CATEGORY_ROLLERCOASTER, // Bobsleigh Coaster
RIDE_CATEGORY_GENTLE, // Observation Tower
RIDE_CATEGORY_ROLLERCOASTER, // Looping Roller Coaster
RIDE_CATEGORY_WATER, // Dinghy Slide
RIDE_CATEGORY_ROLLERCOASTER, // Mine Train Coaster
RIDE_CATEGORY_TRANSPORT, // Chairlift
RIDE_CATEGORY_ROLLERCOASTER, // Corkscrew Roller Coaster
RIDE_CATEGORY_GENTLE, // Maze
RIDE_CATEGORY_GENTLE, // Spiral Slide
RIDE_CATEGORY_THRILL, // Go Karts
RIDE_CATEGORY_WATER, // Log Flume
RIDE_CATEGORY_WATER, // River Rapids
RIDE_CATEGORY_GENTLE, // Dodgems
RIDE_CATEGORY_THRILL, // Pirate Ship
RIDE_CATEGORY_THRILL, // Swinging Inverter Ship
RIDE_CATEGORY_SHOP, // Food Stall
255, // (none)
RIDE_CATEGORY_SHOP, // Drink Stall
255, // (none)
RIDE_CATEGORY_SHOP, // Shop (all types)
RIDE_CATEGORY_GENTLE, // Merry Go Round
255, // Unknown
RIDE_CATEGORY_SHOP, // Information Kiosk
RIDE_CATEGORY_SHOP, // Bathroom
RIDE_CATEGORY_GENTLE, // Ferris Wheel
RIDE_CATEGORY_THRILL, // Motion Simulator
RIDE_CATEGORY_THRILL, // 3D Cinema
RIDE_CATEGORY_THRILL, // Top Spin
RIDE_CATEGORY_GENTLE, // Space Rings
RIDE_CATEGORY_ROLLERCOASTER, // Reverse Freefall Coaster
RIDE_CATEGORY_TRANSPORT, // Lift
RIDE_CATEGORY_ROLLERCOASTER, // Vertical Drop Roller Coaster
RIDE_CATEGORY_SHOP, // ATM
RIDE_CATEGORY_THRILL, // Twist
RIDE_CATEGORY_GENTLE, // Haunted House
RIDE_CATEGORY_SHOP, // First Aid
RIDE_CATEGORY_GENTLE, // Circus Show
RIDE_CATEGORY_GENTLE, // Ghost Train
RIDE_CATEGORY_ROLLERCOASTER, // Twister Roller Coaster
RIDE_CATEGORY_ROLLERCOASTER, // Wooden Roller Coaster
RIDE_CATEGORY_ROLLERCOASTER, // Side-Friction Roller Coaster
RIDE_CATEGORY_ROLLERCOASTER, // Wild Mouse
RIDE_CATEGORY_ROLLERCOASTER, // Multi Dimension Coaster
255, // (none)
RIDE_CATEGORY_ROLLERCOASTER, // Flying Roller Coaster
255, // (none)
RIDE_CATEGORY_ROLLERCOASTER, // Virginia Reel
RIDE_CATEGORY_WATER, // Splash Boats
RIDE_CATEGORY_GENTLE, // Mini Helicopters
RIDE_CATEGORY_ROLLERCOASTER, // Lay-down Roller Coaster
RIDE_CATEGORY_TRANSPORT, // Suspended Monorail
255, // (none)
RIDE_CATEGORY_ROLLERCOASTER, // Reverser Roller Coaster
RIDE_CATEGORY_ROLLERCOASTER, // Heartline Twister Roller Coaster
RIDE_CATEGORY_GENTLE, // Mini Golf
RIDE_CATEGORY_ROLLERCOASTER, // Giga Coaster
RIDE_CATEGORY_THRILL, // Roto-Drop
RIDE_CATEGORY_GENTLE, // Flying Saucers
RIDE_CATEGORY_GENTLE, // Crooked House
RIDE_CATEGORY_GENTLE, // Monorail Cycles
RIDE_CATEGORY_ROLLERCOASTER, // Compact Inverted Coaster
RIDE_CATEGORY_ROLLERCOASTER, // Water Coaster
RIDE_CATEGORY_ROLLERCOASTER, // Air Powered Vertical Coaster
RIDE_CATEGORY_ROLLERCOASTER, // Inverted Hairpin Coaster
RIDE_CATEGORY_THRILL, // Magic Carpet
RIDE_CATEGORY_WATER, // Submarine Ride
RIDE_CATEGORY_WATER, // River Rafts
255, // (none)
RIDE_CATEGORY_THRILL, // Enterprise
255, // (none)
255, // (none)
255, // (none)
255, // (none)
RIDE_CATEGORY_ROLLERCOASTER, // Inverted Impulse Coaster
RIDE_CATEGORY_ROLLERCOASTER, // Mini Roller Coaster
RIDE_CATEGORY_ROLLERCOASTER, // Mine Ride
255, // 59 Unknown Ride
RIDE_CATEGORY_ROLLERCOASTER // LIM Launched Roller Coaster
};

View File

@ -30,6 +30,8 @@ extern "C"
#define MAX_RIDE_GROUPS_PER_RIDE_TYPE 2
extern const uint8 gRideCategories[RIDE_TYPE_COUNT];
typedef struct RideGroup
{
uint8 RideType;
@ -42,22 +44,24 @@ typedef struct RideGroup
class RideGroupManager
{
public:
static const RideGroup * GetRideGroup(uint8 trackType, rct_ride_entry * rideEntry);
static bool RideTypeHasRideGroups(uint8 trackType);
static const RideGroup * RideGroupFind(uint8 rideType, uint8 index);
static const RideGroup * GetRideGroup(const uint8 trackType, const rct_ride_entry * rideEntry);
static bool RideTypeHasRideGroups(const uint8 trackType);
static const RideGroup * RideGroupFind(const uint8 rideType, const uint8 index);
static bool RideGroupsAreEqual(const RideGroup * a, const RideGroup * b);
static bool RideGroupIsInvented(const RideGroup * rideGroup);
static const std::vector<const char *> GetPreferredRideEntryOrder(uint8 rideType);
static sint32 VehiclePreferenceCompare(uint8 rideType, const char * a, const char * b);
static const std::vector<const char *> GetPreferredRideEntryOrder(const uint8 rideType);
static sint32 VehiclePreferenceCompare(const uint8 rideType, const char * a, const char * b);
static bool RideTypeShouldLoseSeparateFlag(const rct_ride_entry * rideEntry);
};
extern "C"
{
#endif
const RideGroup * get_ride_group(uint8 rideType, rct_ride_entry * rideEntry);
bool ride_type_has_ride_groups(uint8 rideType);
const RideGroup * get_ride_group(const uint8 rideType, const rct_ride_entry * rideEntry);
bool ride_type_has_ride_groups(const uint8 rideType);
bool rideTypeShouldLoseSeparateFlag(const rct_ride_entry *rideEntry);
#ifdef __cplusplus
}
#endif

View File

@ -7038,7 +7038,7 @@ uint8 ride_entry_get_vehicle_at_position(sint32 rideEntryIndex,sint32 numCarsPer
}
// Finds track pieces that a given ride entry has sprites for
uint64 ride_entry_get_supported_track_pieces(rct_ride_entry* rideEntry)
uint64 ride_entry_get_supported_track_pieces(const rct_ride_entry * rideEntry)
{
uint64 supportedPieces = 0xFFFFFFFFFFFFFFFFULL;
uint16 trackPieceRequiredSprites[55] = {

View File

@ -1206,7 +1206,7 @@ void ride_fix_breakdown(sint32 rideIndex, sint32 reliabilityIncreaseFactor);
void ride_entry_get_train_layout(sint32 rideEntryIndex, sint32 numCarsPerTrain, uint8 *trainLayout);
uint8 ride_entry_get_vehicle_at_position(sint32 rideEntryIndex, sint32 numCarsPerTrain, sint32 position);
void ride_update_max_vehicles(sint32 rideIndex);
uint64 ride_entry_get_supported_track_pieces(rct_ride_entry* rideEntry);
uint64 ride_entry_get_supported_track_pieces(const rct_ride_entry * rideEntry);
void ride_set_ride_entry(sint32 rideIndex, sint32 rideEntry);
void ride_set_num_vehicles(sint32 rideIndex, sint32 numVehicles);

View File

@ -29,8 +29,8 @@
#include "../interface/widget.h"
#include "../localisation/localisation.h"
#include "../object_list.h"
#include "../rct1.h"
#include "../ride/ride_data.h"
#include "../ride/RideGroupManager.h"
#include "../sprites.h"
#include "../util/util.h"
#include "../windows/Intent.h"