diff --git a/src/openrct2/object/RideObject.cpp b/src/openrct2/object/RideObject.cpp index b475785b5b..fa2f76a39a 100644 --- a/src/openrct2/object/RideObject.cpp +++ b/src/openrct2/object/RideObject.cpp @@ -13,6 +13,7 @@ #include "../OpenRCT2.h" #include "../audio/audio.h" +#include "../core/EnumMap.hpp" #include "../core/IStream.hpp" #include "../core/Json.hpp" #include "../core/Memory.hpp" @@ -969,155 +970,158 @@ bool RideObject::IsRideTypeShopOrFacility(uint8_t rideType) } } +static const EnumMap RideTypeLookupTable{ + { "spiral_rc", RIDE_TYPE_SPIRAL_ROLLER_COASTER }, + { "stand_up_rc", RIDE_TYPE_STAND_UP_ROLLER_COASTER }, + { "suspended_swinging_rc", RIDE_TYPE_SUSPENDED_SWINGING_COASTER }, + { "inverted_rc", RIDE_TYPE_INVERTED_ROLLER_COASTER }, + { "junior_rc", RIDE_TYPE_JUNIOR_ROLLER_COASTER }, + { "miniature_railway", RIDE_TYPE_MINIATURE_RAILWAY }, + { "monorail", RIDE_TYPE_MONORAIL }, + { "mini_suspended_rc", RIDE_TYPE_MINI_SUSPENDED_COASTER }, + { "boat_hire", RIDE_TYPE_BOAT_HIRE }, + { "wooden_wild_mouse", RIDE_TYPE_WOODEN_WILD_MOUSE }, + { "steeplechase", RIDE_TYPE_STEEPLECHASE }, + { "car_ride", RIDE_TYPE_CAR_RIDE }, + { "launched_freefall", RIDE_TYPE_LAUNCHED_FREEFALL }, + { "bobsleigh_rc", RIDE_TYPE_BOBSLEIGH_COASTER }, + { "observation_tower", RIDE_TYPE_OBSERVATION_TOWER }, + { "looping_rc", RIDE_TYPE_LOOPING_ROLLER_COASTER }, + { "dinghy_slide", RIDE_TYPE_DINGHY_SLIDE }, + { "mine_train_rc", RIDE_TYPE_MINE_TRAIN_COASTER }, + { "chairlift", RIDE_TYPE_CHAIRLIFT }, + { "corkscrew_rc", RIDE_TYPE_CORKSCREW_ROLLER_COASTER }, + { "maze", RIDE_TYPE_MAZE }, + { "spiral_slide", RIDE_TYPE_SPIRAL_SLIDE }, + { "go_karts", RIDE_TYPE_GO_KARTS }, + { "log_flume", RIDE_TYPE_LOG_FLUME }, + { "river_rapids", RIDE_TYPE_RIVER_RAPIDS }, + { "dodgems", RIDE_TYPE_DODGEMS }, + { "swinging_ship", RIDE_TYPE_SWINGING_SHIP }, + { "swinging_inverter_ship", RIDE_TYPE_SWINGING_INVERTER_SHIP }, + { "food_stall", RIDE_TYPE_FOOD_STALL }, + { "drink_stall", RIDE_TYPE_DRINK_STALL }, + { "shop", RIDE_TYPE_SHOP }, + { "merry_go_round", RIDE_TYPE_MERRY_GO_ROUND }, + { "information_kiosk", RIDE_TYPE_INFORMATION_KIOSK }, + { "toilets", RIDE_TYPE_TOILETS }, + { "ferris_wheel", RIDE_TYPE_FERRIS_WHEEL }, + { "motion_simulator", RIDE_TYPE_MOTION_SIMULATOR }, + { "3d_cinema", RIDE_TYPE_3D_CINEMA }, + { "top_spin", RIDE_TYPE_TOP_SPIN }, + { "space_rings", RIDE_TYPE_SPACE_RINGS }, + { "reverse_freefall_rc", RIDE_TYPE_REVERSE_FREEFALL_COASTER }, + { "lift", RIDE_TYPE_LIFT }, + { "vertical_drop_rc", RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER }, + { "cash_machine", RIDE_TYPE_CASH_MACHINE }, + { "twist", RIDE_TYPE_TWIST }, + { "haunted_house", RIDE_TYPE_HAUNTED_HOUSE }, + { "first_aid", RIDE_TYPE_FIRST_AID }, + { "circus", RIDE_TYPE_CIRCUS }, + { "ghost_train", RIDE_TYPE_GHOST_TRAIN }, + { "twister_rc", RIDE_TYPE_TWISTER_ROLLER_COASTER }, + { "wooden_rc", RIDE_TYPE_WOODEN_ROLLER_COASTER }, + { "side_friction_rc", RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER }, + { "steel_wild_mouse", RIDE_TYPE_STEEL_WILD_MOUSE }, + { "multi_dimension_rc", RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER }, + { "flying_rc", RIDE_TYPE_FLYING_ROLLER_COASTER }, + { "virginia_reel", RIDE_TYPE_VIRGINIA_REEL }, + { "splash_boats", RIDE_TYPE_SPLASH_BOATS }, + { "mini_helicopters", RIDE_TYPE_MINI_HELICOPTERS }, + { "lay_down_rc", RIDE_TYPE_LAY_DOWN_ROLLER_COASTER }, + { "suspended_monorail", RIDE_TYPE_SUSPENDED_MONORAIL }, + { "reverser_rc", RIDE_TYPE_REVERSER_ROLLER_COASTER }, + { "heartline_twister_rc", RIDE_TYPE_HEARTLINE_TWISTER_COASTER }, + { "mini_golf", RIDE_TYPE_MINI_GOLF }, + { "giga_rc", RIDE_TYPE_GIGA_COASTER }, + { "roto_drop", RIDE_TYPE_ROTO_DROP }, + { "flying_saucers", RIDE_TYPE_FLYING_SAUCERS }, + { "crooked_house", RIDE_TYPE_CROOKED_HOUSE }, + { "monorail_cycles", RIDE_TYPE_MONORAIL_CYCLES }, + { "compact_inverted_rc", RIDE_TYPE_COMPACT_INVERTED_COASTER }, + { "water_coaster", RIDE_TYPE_WATER_COASTER }, + { "air_powered_vertical_rc", RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER }, + { "inverted_hairpin_rc", RIDE_TYPE_INVERTED_HAIRPIN_COASTER }, + { "magic_carpet", RIDE_TYPE_MAGIC_CARPET }, + { "submarine_ride", RIDE_TYPE_SUBMARINE_RIDE }, + { "river_rafts", RIDE_TYPE_RIVER_RAFTS }, + { "enterprise", RIDE_TYPE_ENTERPRISE }, + { "inverted_impulse_rc", RIDE_TYPE_INVERTED_IMPULSE_COASTER }, + { "mini_rc", RIDE_TYPE_MINI_ROLLER_COASTER }, + { "mine_ride", RIDE_TYPE_MINE_RIDE }, + { "lim_launched_rc", RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER }, + { "hypercoaster", RIDE_TYPE_HYPERCOASTER }, + { "hyper_twister", RIDE_TYPE_HYPER_TWISTER }, + { "monster_trucks", RIDE_TYPE_MONSTER_TRUCKS }, + { "spinning_wild_mouse", RIDE_TYPE_SPINNING_WILD_MOUSE }, + { "classic_mini_rc", RIDE_TYPE_CLASSIC_MINI_ROLLER_COASTER }, + { "hybrid_rc", RIDE_TYPE_HYBRID_COASTER }, + { "single_rail_rc", RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER }, +}; + uint8_t RideObject::ParseRideType(const std::string& s) { - static const std::unordered_map LookupTable{ - { "spiral_rc", RIDE_TYPE_SPIRAL_ROLLER_COASTER }, - { "stand_up_rc", RIDE_TYPE_STAND_UP_ROLLER_COASTER }, - { "suspended_swinging_rc", RIDE_TYPE_SUSPENDED_SWINGING_COASTER }, - { "inverted_rc", RIDE_TYPE_INVERTED_ROLLER_COASTER }, - { "junior_rc", RIDE_TYPE_JUNIOR_ROLLER_COASTER }, - { "miniature_railway", RIDE_TYPE_MINIATURE_RAILWAY }, - { "monorail", RIDE_TYPE_MONORAIL }, - { "mini_suspended_rc", RIDE_TYPE_MINI_SUSPENDED_COASTER }, - { "boat_hire", RIDE_TYPE_BOAT_HIRE }, - { "wooden_wild_mouse", RIDE_TYPE_WOODEN_WILD_MOUSE }, - { "steeplechase", RIDE_TYPE_STEEPLECHASE }, - { "car_ride", RIDE_TYPE_CAR_RIDE }, - { "launched_freefall", RIDE_TYPE_LAUNCHED_FREEFALL }, - { "bobsleigh_rc", RIDE_TYPE_BOBSLEIGH_COASTER }, - { "observation_tower", RIDE_TYPE_OBSERVATION_TOWER }, - { "looping_rc", RIDE_TYPE_LOOPING_ROLLER_COASTER }, - { "dinghy_slide", RIDE_TYPE_DINGHY_SLIDE }, - { "mine_train_rc", RIDE_TYPE_MINE_TRAIN_COASTER }, - { "chairlift", RIDE_TYPE_CHAIRLIFT }, - { "corkscrew_rc", RIDE_TYPE_CORKSCREW_ROLLER_COASTER }, - { "maze", RIDE_TYPE_MAZE }, - { "spiral_slide", RIDE_TYPE_SPIRAL_SLIDE }, - { "go_karts", RIDE_TYPE_GO_KARTS }, - { "log_flume", RIDE_TYPE_LOG_FLUME }, - { "river_rapids", RIDE_TYPE_RIVER_RAPIDS }, - { "dodgems", RIDE_TYPE_DODGEMS }, - { "swinging_ship", RIDE_TYPE_SWINGING_SHIP }, - { "swinging_inverter_ship", RIDE_TYPE_SWINGING_INVERTER_SHIP }, - { "food_stall", RIDE_TYPE_FOOD_STALL }, - { "drink_stall", RIDE_TYPE_DRINK_STALL }, - { "shop", RIDE_TYPE_SHOP }, - { "merry_go_round", RIDE_TYPE_MERRY_GO_ROUND }, - { "information_kiosk", RIDE_TYPE_INFORMATION_KIOSK }, - { "toilets", RIDE_TYPE_TOILETS }, - { "ferris_wheel", RIDE_TYPE_FERRIS_WHEEL }, - { "motion_simulator", RIDE_TYPE_MOTION_SIMULATOR }, - { "3d_cinema", RIDE_TYPE_3D_CINEMA }, - { "top_spin", RIDE_TYPE_TOP_SPIN }, - { "space_rings", RIDE_TYPE_SPACE_RINGS }, - { "reverse_freefall_rc", RIDE_TYPE_REVERSE_FREEFALL_COASTER }, - { "lift", RIDE_TYPE_LIFT }, - { "vertical_drop_rc", RIDE_TYPE_VERTICAL_DROP_ROLLER_COASTER }, - { "cash_machine", RIDE_TYPE_CASH_MACHINE }, - { "twist", RIDE_TYPE_TWIST }, - { "haunted_house", RIDE_TYPE_HAUNTED_HOUSE }, - { "first_aid", RIDE_TYPE_FIRST_AID }, - { "circus", RIDE_TYPE_CIRCUS }, - { "ghost_train", RIDE_TYPE_GHOST_TRAIN }, - { "twister_rc", RIDE_TYPE_TWISTER_ROLLER_COASTER }, - { "wooden_rc", RIDE_TYPE_WOODEN_ROLLER_COASTER }, - { "side_friction_rc", RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER }, - { "steel_wild_mouse", RIDE_TYPE_STEEL_WILD_MOUSE }, - { "multi_dimension_rc", RIDE_TYPE_MULTI_DIMENSION_ROLLER_COASTER }, - { "flying_rc", RIDE_TYPE_FLYING_ROLLER_COASTER }, - { "virginia_reel", RIDE_TYPE_VIRGINIA_REEL }, - { "splash_boats", RIDE_TYPE_SPLASH_BOATS }, - { "mini_helicopters", RIDE_TYPE_MINI_HELICOPTERS }, - { "lay_down_rc", RIDE_TYPE_LAY_DOWN_ROLLER_COASTER }, - { "suspended_monorail", RIDE_TYPE_SUSPENDED_MONORAIL }, - { "reverser_rc", RIDE_TYPE_REVERSER_ROLLER_COASTER }, - { "heartline_twister_rc", RIDE_TYPE_HEARTLINE_TWISTER_COASTER }, - { "mini_golf", RIDE_TYPE_MINI_GOLF }, - { "giga_rc", RIDE_TYPE_GIGA_COASTER }, - { "roto_drop", RIDE_TYPE_ROTO_DROP }, - { "flying_saucers", RIDE_TYPE_FLYING_SAUCERS }, - { "crooked_house", RIDE_TYPE_CROOKED_HOUSE }, - { "monorail_cycles", RIDE_TYPE_MONORAIL_CYCLES }, - { "compact_inverted_rc", RIDE_TYPE_COMPACT_INVERTED_COASTER }, - { "water_coaster", RIDE_TYPE_WATER_COASTER }, - { "air_powered_vertical_rc", RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER }, - { "inverted_hairpin_rc", RIDE_TYPE_INVERTED_HAIRPIN_COASTER }, - { "magic_carpet", RIDE_TYPE_MAGIC_CARPET }, - { "submarine_ride", RIDE_TYPE_SUBMARINE_RIDE }, - { "river_rafts", RIDE_TYPE_RIVER_RAFTS }, - { "enterprise", RIDE_TYPE_ENTERPRISE }, - { "inverted_impulse_rc", RIDE_TYPE_INVERTED_IMPULSE_COASTER }, - { "mini_rc", RIDE_TYPE_MINI_ROLLER_COASTER }, - { "mine_ride", RIDE_TYPE_MINE_RIDE }, - { "lim_launched_rc", RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER }, - { "hypercoaster", RIDE_TYPE_HYPERCOASTER }, - { "hyper_twister", RIDE_TYPE_HYPER_TWISTER }, - { "monster_trucks", RIDE_TYPE_MONSTER_TRUCKS }, - { "spinning_wild_mouse", RIDE_TYPE_SPINNING_WILD_MOUSE }, - { "classic_mini_rc", RIDE_TYPE_CLASSIC_MINI_ROLLER_COASTER }, - { "hybrid_rc", RIDE_TYPE_HYBRID_COASTER }, - { "single_rail_rc", RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER } - }; - auto result = LookupTable.find(s); - return (result != LookupTable.end()) ? result->second : static_cast(RIDE_TYPE_NULL); + auto result = RideTypeLookupTable.find(s); + return (result != RideTypeLookupTable.end()) ? result->second : static_cast(RIDE_TYPE_NULL); } +static const EnumMap RideCategoryLookupTable{ + { "transport", RIDE_CATEGORY_TRANSPORT }, + { "gentle", RIDE_CATEGORY_GENTLE }, + { "rollercoaster", RIDE_CATEGORY_ROLLERCOASTER }, + { "thrill", RIDE_CATEGORY_THRILL }, + { "water", RIDE_CATEGORY_WATER }, + { "stall", RIDE_CATEGORY_SHOP }, +}; + uint8_t RideObject::ParseRideCategory(const std::string& s) { - static const std::unordered_map LookupTable{ - { "transport", RIDE_CATEGORY_TRANSPORT }, - { "gentle", RIDE_CATEGORY_GENTLE }, - { "rollercoaster", RIDE_CATEGORY_ROLLERCOASTER }, - { "thrill", RIDE_CATEGORY_THRILL }, - { "water", RIDE_CATEGORY_WATER }, - { "stall", RIDE_CATEGORY_SHOP }, - }; - auto result = LookupTable.find(s); - return (result != LookupTable.end()) ? result->second : static_cast(RIDE_CATEGORY_TRANSPORT); + auto result = RideCategoryLookupTable.find(s); + return (result != RideCategoryLookupTable.end()) ? result->second : static_cast(RIDE_CATEGORY_TRANSPORT); } +static const EnumMap ShopItemLookupTable{ + { "burger", ShopItem::Burger }, + { "chips", ShopItem::Chips }, + { "ice_cream", ShopItem::IceCream }, + { "candyfloss", ShopItem::Candyfloss }, + { "pizza", ShopItem::Pizza }, + { "popcorn", ShopItem::Popcorn }, + { "hot_dog", ShopItem::HotDog }, + { "tentacle", ShopItem::Tentacle }, + { "toffee_apple", ShopItem::ToffeeApple }, + { "doughnut", ShopItem::Doughnut }, + { "chicken", ShopItem::Chicken }, + { "pretzel", ShopItem::Pretzel }, + { "funnel_cake", ShopItem::FunnelCake }, + { "beef_noodles", ShopItem::BeefNoodles }, + { "fried_rice_noodles", ShopItem::FriedRiceNoodles }, + { "wonton_soup", ShopItem::WontonSoup }, + { "meatball_soup", ShopItem::MeatballSoup }, + { "sub_sandwich", ShopItem::SubSandwich }, + { "cookie", ShopItem::Cookie }, + { "roast_sausage", ShopItem::RoastSausage }, + { "drink", ShopItem::Drink }, + { "coffee", ShopItem::Coffee }, + { "lemonade", ShopItem::Lemonade }, + { "chocolate", ShopItem::Chocolate }, + { "iced_tea", ShopItem::IcedTea }, + { "fruit_juice", ShopItem::FruitJuice }, + { "soybean_milk", ShopItem::SoybeanMilk }, + { "sujeonggwa", ShopItem::Sujeonggwa }, + { "balloon", ShopItem::Balloon }, + { "toy", ShopItem::Toy }, + { "map", ShopItem::Map }, + { "photo", ShopItem::Photo }, + { "umbrella", ShopItem::Umbrella }, + { "voucher", ShopItem::Voucher }, + { "hat", ShopItem::Hat }, + { "tshirt", ShopItem::TShirt }, + { "sunglasses", ShopItem::Sunglasses }, +}; + ShopItem RideObject::ParseShopItem(const std::string& s) { - static const std::unordered_map LookupTable{ - { "burger", ShopItem::Burger }, - { "chips", ShopItem::Chips }, - { "ice_cream", ShopItem::IceCream }, - { "candyfloss", ShopItem::Candyfloss }, - { "pizza", ShopItem::Pizza }, - { "popcorn", ShopItem::Popcorn }, - { "hot_dog", ShopItem::HotDog }, - { "tentacle", ShopItem::Tentacle }, - { "toffee_apple", ShopItem::ToffeeApple }, - { "doughnut", ShopItem::Doughnut }, - { "chicken", ShopItem::Chicken }, - { "pretzel", ShopItem::Pretzel }, - { "funnel_cake", ShopItem::FunnelCake }, - { "beef_noodles", ShopItem::BeefNoodles }, - { "fried_rice_noodles", ShopItem::FriedRiceNoodles }, - { "wonton_soup", ShopItem::WontonSoup }, - { "meatball_soup", ShopItem::MeatballSoup }, - { "sub_sandwich", ShopItem::SubSandwich }, - { "cookie", ShopItem::Cookie }, - { "roast_sausage", ShopItem::RoastSausage }, - { "drink", ShopItem::Drink }, - { "coffee", ShopItem::Coffee }, - { "lemonade", ShopItem::Lemonade }, - { "chocolate", ShopItem::Chocolate }, - { "iced_tea", ShopItem::IcedTea }, - { "fruit_juice", ShopItem::FruitJuice }, - { "soybean_milk", ShopItem::SoybeanMilk }, - { "sujeonggwa", ShopItem::Sujeonggwa }, - { "balloon", ShopItem::Balloon }, - { "toy", ShopItem::Toy }, - { "map", ShopItem::Map }, - { "photo", ShopItem::Photo }, - { "umbrella", ShopItem::Umbrella }, - { "voucher", ShopItem::Voucher }, - { "hat", ShopItem::Hat }, - { "tshirt", ShopItem::TShirt }, - { "sunglasses", ShopItem::Sunglasses }, - }; - auto result = LookupTable.find(s); - return (result != LookupTable.end()) ? result->second : ShopItem::None; + auto result = ShopItemLookupTable.find(s); + return (result != ShopItemLookupTable.end()) ? result->second : ShopItem::None; }