From 434325ea2296db096f71f78037af355703df91e5 Mon Sep 17 00:00:00 2001 From: Michael Steenbeek Date: Thu, 27 Jul 2017 21:03:26 +0200 Subject: [PATCH] Move vehicle preference to RideGroupManager --- src/openrct2/rct1.h | 1 - src/openrct2/rct1/S4Importer.cpp | 23 ----- src/openrct2/rct1/Tables.h | 2 - src/openrct2/rct1/tables.cpp | 99 -------------------- src/openrct2/ride/RideGroupManager.cpp | 125 +++++++++++++++++++++++++ src/openrct2/ride/RideGroupManager.h | 4 + 6 files changed, 129 insertions(+), 125 deletions(-) diff --git a/src/openrct2/rct1.h b/src/openrct2/rct1.h index 5ab5df46fd..7d045e5f79 100644 --- a/src/openrct2/rct1.h +++ b/src/openrct2/rct1.h @@ -1216,7 +1216,6 @@ enum { extern const uint8 gRideCategories[RIDE_TYPE_COUNT]; -sint32 vehicle_preference_compare(uint8 rideType, const char * a, const char * b); bool rideTypeShouldLoseSeparateFlag(const rct_ride_entry *rideEntry); ParkLoadResult * rct1_load_saved_game(const char *path); diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index 498997d99d..91d4f4693e 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -2676,27 +2676,4 @@ extern "C" { return RCT1::GetColour(colour); } - - /** - * 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. - */ - sint32 vehicle_preference_compare(uint8 rideType, const char * a, const char * b) - { - std::vector rideEntryOrder = RCT1::GetPreferedRideEntryOrder(rideType); - for (const char * object : rideEntryOrder) - { - if (String::Equals(object, a, true)) - { - return -1; - } - if (String::Equals(object, b, true)) - { - return 1; - } - } - return 0; - } } diff --git a/src/openrct2/rct1/Tables.h b/src/openrct2/rct1/Tables.h index c996abaf4f..2397b0d743 100644 --- a/src/openrct2/rct1/Tables.h +++ b/src/openrct2/rct1/Tables.h @@ -51,8 +51,6 @@ namespace RCT1 const char * GetWaterObject(uint8 waterType); const std::vector GetSceneryObjects(uint8 sceneryType); - - const std::vector GetPreferedRideEntryOrder(uint8 rideType); } extern "C" { diff --git a/src/openrct2/rct1/tables.cpp b/src/openrct2/rct1/tables.cpp index cd1640398d..7b195ae96e 100644 --- a/src/openrct2/rct1/tables.cpp +++ b/src/openrct2/rct1/tables.cpp @@ -1382,105 +1382,6 @@ namespace RCT1 return map[waterType]; } - const std::vector GetPreferedRideEntryOrder(uint8 rideType) - { - static const std::vector preferedRideEntryOrder[] = - { - { "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 "}, // 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_RIDE - { "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_PIRATE_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_SHOW - { "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_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 - }; - return preferedRideEntryOrder[rideType]; - } - const std::vector GetSceneryObjects(uint8 sceneryType) { static const std::vector map[] = diff --git a/src/openrct2/ride/RideGroupManager.cpp b/src/openrct2/ride/RideGroupManager.cpp index da59435d55..3d051400e9 100644 --- a/src/openrct2/ride/RideGroupManager.cpp +++ b/src/openrct2/ride/RideGroupManager.cpp @@ -15,8 +15,10 @@ #pragma endregion #include +#include #include "RideGroupManager.h" #include "../config/Config.h" +#include "../core/String.hpp" extern "C" { @@ -198,6 +200,105 @@ public: return false; } + + const std::vector GetPreferedRideEntryOrder(uint8 rideType) const override + { + static const std::vector preferedRideEntryOrder[] = + { + { "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 "}, // 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_RIDE + { "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_PIRATE_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_SHOW + { "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_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 + }; + return preferedRideEntryOrder[rideType]; + } }; static std::unique_ptr _rideGroupManager = std::unique_ptr(new RideGroupManager()); @@ -236,4 +337,28 @@ extern "C" const IRideGroupManager * rideGroupManager = GetRideGroupManager(); return rideGroupManager->RideGroupIsInvented(rideGroup); } + + /** + * 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. + */ + sint32 vehicle_preference_compare(uint8 rideType, const char * a, const char * b) + { + const IRideGroupManager * rideGroupManager = GetRideGroupManager(); + std::vector rideEntryOrder = rideGroupManager->GetPreferedRideEntryOrder(rideType); + for (const char * object : rideEntryOrder) + { + if (String::Equals(object, a, true)) + { + return -1; + } + if (String::Equals(object, b, true)) + { + return 1; + } + } + return 0; + } } diff --git a/src/openrct2/ride/RideGroupManager.h b/src/openrct2/ride/RideGroupManager.h index 230ef4fc0c..7a7a81854b 100644 --- a/src/openrct2/ride/RideGroupManager.h +++ b/src/openrct2/ride/RideGroupManager.h @@ -45,8 +45,11 @@ interface IRideGroupManager virtual ride_group * RideGroupFind(uint8 rideType, uint8 index) const abstract; virtual bool RideGroupsAreEqual(const ride_group * a, const ride_group * b) const abstract; virtual bool RideGroupIsInvented(const ride_group * rideGroup) const abstract; + + virtual const std::vector GetPreferedRideEntryOrder(uint8 rideType) const abstract; }; + IRideGroupManager * GetRideGroupManager(); extern "C" @@ -57,6 +60,7 @@ extern "C" ride_group * ride_group_find(uint8 rideType, uint8 index); bool ride_groups_are_equal(const ride_group * a, const ride_group * b); bool ride_group_is_invented(const ride_group * rideGroup); + sint32 vehicle_preference_compare(uint8 rideType, const char * a, const char * b); #ifdef __cplusplus } #endif