mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-29 09:44:52 +01:00
Use EnumMap for RideObject lookup tables
This commit is contained in:
@@ -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<uint8_t> 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<std::string, uint8_t> 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<uint8_t>(RIDE_TYPE_NULL);
|
||||
auto result = RideTypeLookupTable.find(s);
|
||||
return (result != RideTypeLookupTable.end()) ? result->second : static_cast<uint8_t>(RIDE_TYPE_NULL);
|
||||
}
|
||||
|
||||
static const EnumMap<uint8_t> 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<std::string, uint8_t> 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<uint8_t>(RIDE_CATEGORY_TRANSPORT);
|
||||
auto result = RideCategoryLookupTable.find(s);
|
||||
return (result != RideCategoryLookupTable.end()) ? result->second : static_cast<uint8_t>(RIDE_CATEGORY_TRANSPORT);
|
||||
}
|
||||
|
||||
static const EnumMap<ShopItem> 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<std::string, ShopItem> 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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user