Change numbered tricks in preset and settings to use codes. (#6267)
This commit is contained in:
@@ -47,7 +47,7 @@ int Playthrough_Init(uint32_t seed, std::set<RandomizerCheck> excludedLocations,
|
||||
auto locationOption = static_cast<Rando::LocationOption*>(option);
|
||||
settingsStr += option->GetOptionText(ctx->GetLocationOption(locationOption->GetKey()).Get());
|
||||
} else if (i == RSG_TRICKS) {
|
||||
auto trickOption = static_cast<Rando::TrickOption*>(option);
|
||||
auto trickOption = static_cast<Rando::TrickSetting*>(option);
|
||||
settingsStr += option->GetOptionText(ctx->GetTrickOption(trickOption->GetKey()).Get());
|
||||
} else {
|
||||
settingsStr += option->GetOptionText(ctx->GetOption(option->GetKey()).Get());
|
||||
|
||||
@@ -357,35 +357,41 @@ RandomizerCheck LocationOption::GetKey() const {
|
||||
return static_cast<RandomizerCheck>(key);
|
||||
}
|
||||
|
||||
TrickOption::TrickOption(RandomizerTrick key_, const RandomizerCheckQuest quest_, const RandomizerArea area_,
|
||||
std::set<Tricks::Tag> tags_, const std::string& name_, std::string description_)
|
||||
TrickSetting::TrickSetting(RandomizerTrick key_, const RandomizerCheckQuest quest_, const RandomizerArea area_,
|
||||
std::set<Tricks::Tag> tags_, const std::string& name_, const std::string nameTag_,
|
||||
std::string description_)
|
||||
: Option(key_, name_, { "Disabled", "Enabled" }, OptionCategory::Setting, "", std::move(description_),
|
||||
WIDGET_CVAR_CHECKBOX, 0, false, nullptr, IMFLAG_NONE),
|
||||
mQuest(quest_), mArea(area_), mTags(std::move(tags_)) {
|
||||
mQuest(quest_), mArea(area_), mNameTag(nameTag_), mTags(std::move(tags_)) {
|
||||
}
|
||||
|
||||
TrickOption TrickOption::LogicTrick(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_,
|
||||
std::set<Tricks::Tag> tags_, const std::string& name_, std::string description_) {
|
||||
return { key_, quest_, area_, std::move(tags_), name_, std::move(description_) };
|
||||
TrickSetting TrickSetting::LogicTrick(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_,
|
||||
std::set<Tricks::Tag> tags_, const std::string& name_, const std::string nameTag_,
|
||||
std::string description_) {
|
||||
return { key_, quest_, area_, std::move(tags_), name_, nameTag_, std::move(description_) };
|
||||
}
|
||||
|
||||
RandomizerTrick TrickOption::GetKey() const {
|
||||
RandomizerTrick TrickSetting::GetKey() const {
|
||||
return static_cast<RandomizerTrick>(key);
|
||||
}
|
||||
|
||||
RandomizerCheckQuest TrickOption::GetQuest() const {
|
||||
RandomizerCheckQuest TrickSetting::GetQuest() const {
|
||||
return mQuest;
|
||||
}
|
||||
|
||||
RandomizerArea TrickOption::GetArea() const {
|
||||
RandomizerArea TrickSetting::GetArea() const {
|
||||
return mArea;
|
||||
}
|
||||
|
||||
bool TrickOption::HasTag(const Tricks::Tag tag) const {
|
||||
std::string TrickSetting::GetNameTag() const {
|
||||
return mNameTag;
|
||||
}
|
||||
|
||||
bool TrickSetting::HasTag(const Tricks::Tag tag) const {
|
||||
return mTags.contains(tag);
|
||||
}
|
||||
|
||||
const std::set<Tricks::Tag>& TrickOption::GetTags() const {
|
||||
const std::set<Tricks::Tag>& TrickSetting::GetTags() const {
|
||||
return mTags;
|
||||
}
|
||||
|
||||
|
||||
@@ -346,9 +346,9 @@ class LocationOption : public Option {
|
||||
RandomizerCheck GetKey() const;
|
||||
};
|
||||
|
||||
class TrickOption : public Option {
|
||||
class TrickSetting : public Option {
|
||||
public:
|
||||
TrickOption() = default;
|
||||
TrickSetting() = default;
|
||||
/**
|
||||
* @brief A convenience function for constructing the Option for a trick.
|
||||
*
|
||||
@@ -356,12 +356,14 @@ class TrickOption : public Option {
|
||||
* @param quest_ MQ, Vanilla, or Both.
|
||||
* @param area_ The area the trick is relevant for.
|
||||
* @param tags_ The set of RandomizerTrickTags for this trick.
|
||||
* @param name_ The name of the trick. Appears in the spoiler/patch file.
|
||||
* @param name_ The name of the trick. Appears in the menus and spoiler
|
||||
* @param nameTag_ The 3-8 long name tag of the trick. Appears in the settings and presets file.
|
||||
* @param description_ A brief description of the trick.
|
||||
* @return Option
|
||||
*/
|
||||
static TrickOption LogicTrick(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_,
|
||||
std::set<Tricks::Tag> tags_, const std::string& name_, std::string description_);
|
||||
static TrickSetting LogicTrick(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_,
|
||||
std::set<Tricks::Tag> tags_, const std::string& name_, const std::string nameTag_,
|
||||
std::string description_);
|
||||
|
||||
RandomizerTrick GetKey() const;
|
||||
|
||||
@@ -379,6 +381,13 @@ class TrickOption : public Option {
|
||||
*/
|
||||
RandomizerArea GetArea() const;
|
||||
|
||||
/**
|
||||
* @brief Get the NameTag of the trick
|
||||
*
|
||||
* @return std::string
|
||||
*/
|
||||
std::string GetNameTag() const;
|
||||
|
||||
/**
|
||||
* @brief Check if this Trick has the given tag
|
||||
*
|
||||
@@ -390,10 +399,11 @@ class TrickOption : public Option {
|
||||
const std::set<Tricks::Tag>& GetTags() const;
|
||||
|
||||
private:
|
||||
TrickOption(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_, std::set<Tricks::Tag> tags_,
|
||||
const std::string& name_, std::string description_);
|
||||
TrickSetting(RandomizerTrick key_, RandomizerCheckQuest quest_, RandomizerArea area_, std::set<Tricks::Tag> tags_,
|
||||
const std::string& name_, const std::string nameTag_, std::string description_);
|
||||
RandomizerCheckQuest mQuest;
|
||||
RandomizerArea mArea;
|
||||
std::string mNameTag;
|
||||
std::set<Tricks::Tag> mTags;
|
||||
};
|
||||
|
||||
|
||||
@@ -46,8 +46,6 @@ std::unordered_map<std::string, RandomizerCheckArea> SpoilerfileAreaNameToEnum;
|
||||
std::unordered_map<std::string, HintType> SpoilerfileHintTypeNameToEnum;
|
||||
std::set<RandomizerCheck> excludedLocations;
|
||||
std::set<RandomizerCheck> spoilerExcludedLocations;
|
||||
std::set<RandomizerTrick> enabledTricks;
|
||||
std::set<RandomizerTrick> enabledGlitches;
|
||||
|
||||
u8 generated;
|
||||
char* seedString;
|
||||
@@ -3477,7 +3475,9 @@ void GenerateRandomizerImgui(std::string seed = "") {
|
||||
std::stringstream enabledTrickStringStream(CVarGetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), ""));
|
||||
std::string enabledTrickString;
|
||||
while (getline(enabledTrickStringStream, enabledTrickString, ',')) {
|
||||
enabledTricks.insert((RandomizerTrick)std::stoi(enabledTrickString));
|
||||
if (Rando::StaticData::trickToEnum.contains(enabledTrickString)) {
|
||||
enabledTricks.insert(Rando::StaticData::trickToEnum[enabledTrickString]);
|
||||
}
|
||||
}
|
||||
|
||||
// Update the visibilitiy before removing conflicting excludes (in case the locations tab wasn't viewed)
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -58,7 +58,7 @@ class Settings {
|
||||
* @param key
|
||||
* @return Option&
|
||||
*/
|
||||
TrickOption& GetTrickOption(RandomizerTrick key);
|
||||
TrickSetting& GetTrickSetting(RandomizerTrick key);
|
||||
|
||||
/**
|
||||
* @brief Get the RandomizerTrick corresponding to the provided name.
|
||||
@@ -147,7 +147,7 @@ class Settings {
|
||||
std::array<Option, RSK_MAX> mOptions = {};
|
||||
std::array<std::string, RSK_MAX> mOptionDescriptions = {};
|
||||
std::array<OptionGroup, RSG_MAX> mOptionGroups = {};
|
||||
std::array<TrickOption, RT_MAX> mTrickOptions = {};
|
||||
std::array<TrickSetting, RT_MAX> mTrickSettings = {};
|
||||
std::vector<std::vector<Option*>> mExcludeLocationsOptionsAreas = {};
|
||||
std::unordered_map<std::string, RandomizerTrick> mTrickNameToEnum;
|
||||
};
|
||||
|
||||
@@ -304,6 +304,185 @@ std::unordered_map<u32, RandomizerHint> StaticData::grottoChestParamsToHint{
|
||||
{ 22988, RH_KF_STORMS_GROTTO_GOSSIP_STONE },
|
||||
};
|
||||
|
||||
// preexisting entries are for compatibility with Copper Charlie and should not be updated
|
||||
std::unordered_map<std::string, RandomizerTrick> StaticData::trickToEnum = {
|
||||
{ "0", RT_VISIBLE_COLLISION },
|
||||
{ "1", RT_GROTTOS_WITHOUT_AGONY },
|
||||
{ "2", RT_FEWER_TUNIC_REQUIREMENTS },
|
||||
{ "3", RT_RUSTED_SWITCHES },
|
||||
{ "4", RT_FLAMING_CHESTS },
|
||||
{ "6", RT_DAMAGE_BOOST_SIMPLE },
|
||||
{ "7", RT_HOVER_BOOST_SIMPLE },
|
||||
{ "8", RT_BOMBCHU_BEEHIVES },
|
||||
{ "9", RT_BLUE_FIRE_MUD_WALLS },
|
||||
{ "10", RT_OPEN_UNDERWATER_CHEST },
|
||||
{ "11", RT_HOOKSHOT_EXTENSION },
|
||||
{ "12", RT_KF_ADULT_GS },
|
||||
{ "13", RT_LW_BRIDGE },
|
||||
{ "14", RT_LW_MIDO_BACKFLIP },
|
||||
{ "15", RT_LW_GS_BEAN },
|
||||
{ "16", RT_HC_STORMS_GS },
|
||||
{ "17", RT_HF_BIG_POE_WITHOUT_EPONA },
|
||||
{ "19", RT_KAK_TOWER_GS },
|
||||
{ "21", RT_KAK_CHILD_WINDMILL_POH },
|
||||
{ "22", RT_KAK_ROOFTOP_GS },
|
||||
{ "23", RT_GY_POH },
|
||||
{ "24", RT_GY_CHILD_DAMPE_RACE_POH },
|
||||
{ "25", RT_GY_SHADOW_FIRE_ARROWS },
|
||||
{ "26", RT_DMT_SOIL_GS },
|
||||
{ "27", RT_DMT_BOMBABLE },
|
||||
{ "28", RT_DMT_HOVERS_LOWER_GS },
|
||||
{ "29", RT_DMT_BEAN_LOWER_GS },
|
||||
{ "30", RT_DMT_JS_LOWER_GS },
|
||||
{ "31", RT_DMT_CLIMB_HOVERS },
|
||||
{ "32", RT_DMT_UPPER_GS },
|
||||
{ "34", RT_GC_POT },
|
||||
{ "35", RT_GC_POT_STRENGTH },
|
||||
{ "36", RT_GC_ROLLING_STRENGTH },
|
||||
{ "37", RT_GC_LEFTMOST },
|
||||
{ "38", RT_GC_GROTTO },
|
||||
{ "39", RT_GC_LINK_GORON_DINS },
|
||||
{ "40", RT_DMC_HOVER_BEAN_POH },
|
||||
{ "41", RT_DMC_BOLERO_JUMP },
|
||||
{ "42", RT_DMC_BOULDER_JS },
|
||||
{ "43", RT_DMC_BOULDER_SKIP },
|
||||
{ "44", RT_ZR_LOWER },
|
||||
{ "45", RT_ZR_UPPER },
|
||||
{ "46", RT_ZR_HOVERS },
|
||||
{ "47", RT_ZR_CUCCO },
|
||||
{ "48", RT_ZD_KING_ZORA_SKIP },
|
||||
{ "49", RT_ZD_GS },
|
||||
{ "50", RT_ZF_GREAT_FAIRY_WITHOUT_EXPLOSIVES },
|
||||
{ "51", RT_LH_LAB_WALL_GS },
|
||||
{ "52", RT_LH_LAB_DIVING },
|
||||
{ "53", RT_LH_WATER_HOOKSHOT },
|
||||
{ "54", RT_GV_CRATE_HOVERS },
|
||||
{ "55", RT_PASS_GUARDS_WITH_NOTHING },
|
||||
{ "57", RT_GF_WARRIOR_WITH_DIFFICULT_WEAPON },
|
||||
{ "58", RT_GF_LEDGE_CLIP_INTO_GTG },
|
||||
{ "60", RT_HW_CROSSING },
|
||||
{ "61", RT_LENS_HW },
|
||||
{ "62", RT_HW_REVERSE },
|
||||
{ "63", RT_COLOSSUS_GS },
|
||||
{ "64", RT_DEKU_BASEMENT_GS },
|
||||
{ "65", RT_DEKU_B1_SKIP },
|
||||
{ "66", RT_DEKU_B1_BOW_WEBS },
|
||||
{ "67", RT_DEKU_B1_BACKFLIP_OVER_SPIKED_LOG },
|
||||
{ "68", RT_DEKU_MQ_COMPASS_GS },
|
||||
{ "69", RT_DEKU_MQ_LOG },
|
||||
{ "70", RT_DC_SCARECROW_GS },
|
||||
{ "71", RT_DC_VINES_GS },
|
||||
{ "72", RT_DC_STAIRS_WITH_BOW },
|
||||
{ "73", RT_DC_SLINGSHOT_SKIP },
|
||||
{ "74", RT_DC_SCRUB_ROOM },
|
||||
{ "76", RT_DC_HAMMER_FLOOR },
|
||||
{ "77", RT_DC_MQ_STAIRS_WITH_ONLY_STRENGTH },
|
||||
{ "78", RT_DC_MQ_CHILD_BOMBS },
|
||||
{ "79", RT_DC_MQ_CHILD_EYES },
|
||||
{ "80", RT_DC_MQ_ADULT_EYES },
|
||||
{ "81", RT_DC_DODONGO_CHU },
|
||||
{ "83", RT_JABU_BOSS_HOVER },
|
||||
{ "84", RT_JABU_NEAR_BOSS_RANGED },
|
||||
{ "85", RT_JABU_NEAR_BOSS_EXPLOSIVES },
|
||||
{ "86", RT_LENS_JABU_MQ },
|
||||
{ "87", RT_JABU_MQ_RANG_JUMP },
|
||||
{ "88", RT_JABU_MQ_SOT_GS },
|
||||
{ "89", RT_LENS_BOTW },
|
||||
{ "90", RT_BOTW_CHILD_DEADHAND },
|
||||
{ "91", RT_BOTW_BASEMENT },
|
||||
{ "92", RT_BOTW_PITS },
|
||||
{ "93", RT_BOTW_MQ_DEADHAND_KEY },
|
||||
{ "94", RT_FOREST_FIRST_GS },
|
||||
{ "95", RT_FOREST_COURTYARD_EAST_GS },
|
||||
{ "96", RT_FOREST_VINES },
|
||||
{ "97", RT_FOREST_COURTYARD_LEDGE },
|
||||
{ "98", RT_FOREST_DOORFRAME },
|
||||
{ "99", RT_FOREST_OUTSIDE_BACKDOOR },
|
||||
{ "100", RT_FOREST_COURTYARD_HEARTS_BOOMERANG },
|
||||
{ "101", RT_FOREST_WELL_SWIM },
|
||||
{ "102", RT_FOREST_MQ_BLOCK_PUZZLE },
|
||||
{ "103", RT_FOREST_MQ_JS_HALLWAY_SWITCH },
|
||||
{ "104", RT_FOREST_MQ_HOOKSHOT_HALLWAY_SWITCH },
|
||||
{ "105", RT_FOREST_MQ_RANG_HALLWAY_SWITCH },
|
||||
{ "107", RT_FIRE_SOT },
|
||||
{ "108", RT_FIRE_STRENGTH },
|
||||
{ "109", RT_FIRE_SCARECROW },
|
||||
{ "111", RT_FIRE_MQ_NEAR_BOSS },
|
||||
{ "112", RT_FIRE_MQ_BLOCKED_CHEST },
|
||||
{ "113", RT_FIRE_MQ_BK_CHEST },
|
||||
{ "114", RT_FIRE_MQ_CLIMB },
|
||||
{ "115", RT_FIRE_MQ_MAZE_SIDE_ROOM },
|
||||
{ "116", RT_FIRE_MQ_MAZE_HOVERS },
|
||||
{ "117", RT_FIRE_MQ_MAZE_JUMP },
|
||||
{ "118", RT_FIRE_MQ_ABOVE_MAZE_GS },
|
||||
{ "120", RT_WATER_LONGSHOT_TORCH },
|
||||
{ "121", RT_WATER_CRACKED_WALL_HOVERS },
|
||||
{ "122", RT_WATER_CRACKED_WALL },
|
||||
{ "123", RT_WATER_BK_REGION },
|
||||
{ "124", RT_WATER_NORTH_BASEMENT_LEDGE_JUMP },
|
||||
{ "126", RT_WATER_FW_CENTRAL_GS },
|
||||
{ "127", RT_WATER_IRONS_CENTRAL_GS },
|
||||
{ "128", RT_WATER_CENTRAL_BOW },
|
||||
{ "129", RT_WATER_HOOKSHOT_FALLING_PLATFORM_GS },
|
||||
{ "130", RT_WATER_RANG_FALLING_PLATFORM_GS },
|
||||
{ "131", RT_WATER_RIVER_GS },
|
||||
{ "132", RT_WATER_DRAGON_JUMP_DIVE },
|
||||
{ "133", RT_WATER_ADULT_DRAGON },
|
||||
{ "134", RT_WATER_CHILD_DRAGON },
|
||||
{ "135", RT_WATER_MQ_CENTRAL_PILLAR },
|
||||
{ "136", RT_WATER_INVISIBLE_HOOKSHOT_TARGET },
|
||||
{ "137", RT_WATER_MORPHA_WITHOUT_HOOKSHOT },
|
||||
{ "138", RT_LENS_SHADOW },
|
||||
{ "139", RT_LENS_SHADOW_PLATFORM },
|
||||
{ "140", RT_LENS_BONGO },
|
||||
{ "141", RT_SHADOW_UMBRELLA_HOVER },
|
||||
{ "142", RT_SHADOW_UMBRELLA_CLIP },
|
||||
{ "143", RT_SHADOW_UMBRELLA_GS },
|
||||
{ "144", RT_SHADOW_FREESTANDING_KEY },
|
||||
{ "145", RT_SHADOW_STATUE },
|
||||
{ "146", RT_SHADOW_BONGO },
|
||||
{ "147", RT_LENS_SHADOW_MQ },
|
||||
{ "148", RT_LENS_SHADOW_MQ_INVISIBLE_BLADES },
|
||||
{ "149", RT_LENS_SHADOW_MQ_PLATFORM },
|
||||
{ "150", RT_LENS_SHADOW_MQ_DEADHAND },
|
||||
{ "151", RT_SHADOW_MQ_GAP },
|
||||
{ "152", RT_SHADOW_MQ_INVISIBLE_BLADES },
|
||||
{ "153", RT_SHADOW_MQ_HUGE_PIT },
|
||||
{ "154", RT_SHADOW_MQ_WINDY_WALKWAY },
|
||||
{ "155", RT_LENS_SPIRIT },
|
||||
{ "156", RT_SPIRIT_CHILD_CHU },
|
||||
{ "157", RT_SPIRIT_WEST_LEDGE },
|
||||
{ "158", RT_SPIRIT_LOWER_ADULT_SWITCH },
|
||||
{ "159", RT_SPIRIT_STATUE_JUMP },
|
||||
{ "161", RT_SPIRIT_MAP_CHEST },
|
||||
{ "162", RT_SPIRIT_SUN_CHEST },
|
||||
{ "163", RT_SPIRIT_WALL },
|
||||
{ "164", RT_LENS_SPIRIT_MQ },
|
||||
{ "165", RT_SPIRIT_MQ_SUN_BLOCK_SOT },
|
||||
{ "166", RT_SPIRIT_MQ_SUN_BLOCK_GS },
|
||||
{ "167", RT_SPIRIT_MQ_LOWER_ADULT },
|
||||
{ "168", RT_SPIRIT_MQ_FROZEN_EYE },
|
||||
{ "169", RT_ICE_BLOCK_GS },
|
||||
{ "170", RT_ICE_MQ_RED_ICE_GS },
|
||||
{ "171", RT_ICE_MQ_SCARECROW },
|
||||
{ "172", RT_LENS_GTG },
|
||||
{ "173", RT_GTG_WITHOUT_HOOKSHOT },
|
||||
{ "174", RT_GTG_FAKE_WALL },
|
||||
{ "175", RT_LENS_GTG_MQ },
|
||||
{ "176", RT_GTG_MQ_WITH_HOOKSHOT },
|
||||
{ "177", RT_GTG_MQ_WITHOUT_HOOKSHOT },
|
||||
{ "178", RT_LENS_GANON },
|
||||
{ "179", RT_GANON_SPIRIT_TRIAL_HOOKSHOT },
|
||||
{ "180", RT_LENS_GANON_MQ },
|
||||
{ "181", RT_GANON_MQ_FIRE_TRIAL },
|
||||
{ "182", RT_GANON_MQ_SHADOW_TRIAL },
|
||||
{ "183", RT_GANON_MQ_LIGHT_TRIAL },
|
||||
{ "201", RT_GROUND_JUMP },
|
||||
{ "202", RT_GROUND_JUMP_HARD },
|
||||
{ "223", RT_BOTTOM_OF_THE_WELL_NAVI_DIVE },
|
||||
{ "224", RT_LOST_WOOD_NAVI_DIVE },
|
||||
};
|
||||
|
||||
std::array<HintText, RHT_MAX> StaticData::hintTextTable = {};
|
||||
|
||||
std::vector<RandomizerGet> StaticData::normalBottles = {
|
||||
|
||||
@@ -82,6 +82,7 @@ class StaticData {
|
||||
static std::unordered_map<RandomizerHint, StaticHintInfo> staticHintInfoMap;
|
||||
static std::unordered_map<u32, RandomizerHint> stoneParamsToHint;
|
||||
static std::unordered_map<u32, RandomizerHint> grottoChestParamsToHint;
|
||||
static std::unordered_map<std::string, RandomizerTrick> trickToEnum;
|
||||
static std::array<HintText, RHT_MAX> hintTextTable;
|
||||
static std::vector<RandomizerGet> normalBottles;
|
||||
static std::vector<RandomizerGet> beanSouls;
|
||||
|
||||
@@ -28,6 +28,22 @@ static std::set<RandomizerCheck> excludedLocations;
|
||||
static std::set<RandomizerTrick> enabledTricks;
|
||||
static std::set<RandomizerTrick> enabledGlitches;
|
||||
|
||||
void SaveEnabledTricks() {
|
||||
std::string enabledTrickString = "";
|
||||
for (auto enabledTrickIt : enabledTricks) {
|
||||
enabledTrickString += Rando::Settings::GetInstance()->GetTrickSetting(enabledTrickIt).GetNameTag();
|
||||
enabledTrickString += ",";
|
||||
}
|
||||
if (enabledTricks.size() == 0) {
|
||||
CVarClear(CVAR_RANDOMIZER_SETTING("EnabledTricks"));
|
||||
} else {
|
||||
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str());
|
||||
}
|
||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||
tricksDirty = false;
|
||||
return;
|
||||
}
|
||||
|
||||
void DrawLocationsMenu(WidgetInfo& info) {
|
||||
auto ctx = OTRGlobals::Instance->gRandoContext;
|
||||
int32_t currMQDungeonSetting = CVarGetInteger(CVAR_RANDOMIZER_SETTING("MQDungeons"), 0) |
|
||||
@@ -177,7 +193,9 @@ void UpdateMenuTricks() {
|
||||
std::string enabledTrickString;
|
||||
enabledTricks.clear();
|
||||
while (getline(enabledTrickStringStream, enabledTrickString, ',')) {
|
||||
enabledTricks.insert((RandomizerTrick)std::stoi(enabledTrickString));
|
||||
if (Rando::StaticData::trickToEnum.contains(enabledTrickString)) {
|
||||
enabledTricks.insert(Rando::StaticData::trickToEnum[enabledTrickString]);
|
||||
}
|
||||
}
|
||||
std::stringstream enabledGlitchStringStream(CVarGetString(CVAR_RANDOMIZER_SETTING("EnabledGlitches"), ""));
|
||||
std::string enabledGlitchString;
|
||||
@@ -279,6 +297,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
||||
{ Rando::Tricks::Tag::EXTREME, true }, { Rando::Tricks::Tag::EXPERIMENTAL, true },
|
||||
{ Rando::Tricks::Tag::GLITCH, false },
|
||||
};
|
||||
|
||||
static ImGuiTextFilter trickSearch;
|
||||
UIWidgets::PushStyleInput(THEME_COLOR);
|
||||
trickSearch.Draw("Filter (inc,-exc)", 490.0f);
|
||||
@@ -292,14 +311,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
||||
enabledTricks.erase(etfound);
|
||||
}
|
||||
}
|
||||
std::string enabledTrickString = "";
|
||||
for (auto enabledTrickIt : enabledTricks) {
|
||||
enabledTrickString += std::to_string(enabledTrickIt);
|
||||
enabledTrickString += ",";
|
||||
}
|
||||
CVarClear(CVAR_RANDOMIZER_SETTING("EnabledTricks"));
|
||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||
tricksDirty = true;
|
||||
SaveEnabledTricks();
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (UIWidgets::Button("Enable All", UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(250.f, 0.f)))) {
|
||||
@@ -308,14 +320,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
||||
enabledTricks.insert(static_cast<RandomizerTrick>(i));
|
||||
}
|
||||
}
|
||||
std::string enabledTrickString = "";
|
||||
for (auto enabledTrickIt : enabledTricks) {
|
||||
enabledTrickString += std::to_string(enabledTrickIt);
|
||||
enabledTrickString += ",";
|
||||
}
|
||||
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str());
|
||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||
tricksDirty = true;
|
||||
SaveEnabledTricks();
|
||||
}
|
||||
}
|
||||
if (ImGui::BeginTable("trickTags", static_cast<int>(showTag.size()),
|
||||
@@ -364,21 +369,14 @@ void DrawTricksMenu(WidgetInfo& info) {
|
||||
if (UIWidgets::Button("Enable Visible",
|
||||
UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) {
|
||||
for (int i = 0; i < RT_MAX; i++) {
|
||||
auto option = randoSettings->GetTrickOption(static_cast<RandomizerTrick>(i));
|
||||
auto option = randoSettings->GetTrickSetting(static_cast<RandomizerTrick>(i));
|
||||
if (!enabledTricks.count(static_cast<RandomizerTrick>(i)) &&
|
||||
trickSearch.PassFilter(option.GetName().c_str()) && areaTreeDisabled[option.GetArea()] &&
|
||||
Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
||||
enabledTricks.insert(static_cast<RandomizerTrick>(i));
|
||||
}
|
||||
}
|
||||
std::string enabledTrickString = "";
|
||||
for (auto enabledTrickIt : enabledTricks) {
|
||||
enabledTrickString += std::to_string(enabledTrickIt);
|
||||
enabledTrickString += ",";
|
||||
}
|
||||
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str());
|
||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||
tricksDirty = true;
|
||||
SaveEnabledTricks();
|
||||
}
|
||||
|
||||
ImGui::BeginChild("ChildTricksDisabled", ImVec2(0, -8), false, ImGuiWindowFlags_HorizontalScrollbar);
|
||||
@@ -386,7 +384,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
||||
for (auto [area, trickIds] : randoSettings->mTricksByArea) {
|
||||
bool hasTricks = false;
|
||||
for (auto rt : trickIds) {
|
||||
auto option = randoSettings->GetTrickOption(rt);
|
||||
auto option = randoSettings->GetTrickSetting(rt);
|
||||
if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) &&
|
||||
!enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
||||
hasTricks = true;
|
||||
@@ -399,7 +397,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
||||
ImGui::SetNextItemOpen(true, ImGuiCond_Once);
|
||||
if (ImGui::TreeNode((Rando::Tricks::GetAreaName(area) + "##disabled").c_str())) {
|
||||
for (auto rt : trickIds) {
|
||||
auto option = randoSettings->GetTrickOption(rt);
|
||||
auto option = randoSettings->GetTrickSetting(rt);
|
||||
if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) &&
|
||||
!enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
||||
ImGui::TreeNodeSetOpen(
|
||||
@@ -409,17 +407,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
||||
UIWidgets::PushStyleButton(THEME_COLOR, ImVec2(7.f, 5.f));
|
||||
if (ImGui::ArrowButton(std::to_string(rt).c_str(), ImGuiDir_Right)) {
|
||||
enabledTricks.insert(rt);
|
||||
std::string enabledTrickString = "";
|
||||
for (auto enabledTrickIt : enabledTricks) {
|
||||
enabledTrickString += std::to_string(enabledTrickIt);
|
||||
enabledTrickString += ",";
|
||||
}
|
||||
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str());
|
||||
Ship::Context::GetInstance()
|
||||
->GetWindow()
|
||||
->GetGui()
|
||||
->SaveConsoleVariablesNextFrame();
|
||||
tricksDirty = true;
|
||||
SaveEnabledTricks();
|
||||
}
|
||||
UIWidgets::PopStyleButton();
|
||||
Rando::Tricks::DrawTagChips(option.GetTags(), option.GetName());
|
||||
@@ -458,25 +446,14 @@ void DrawTricksMenu(WidgetInfo& info) {
|
||||
if (UIWidgets::Button("Disable Visible",
|
||||
UIWidgets::ButtonOptions().Color(THEME_COLOR).Size(ImVec2(0.f, 0.f)))) {
|
||||
for (int i = 0; i < RT_MAX; i++) {
|
||||
auto option = randoSettings->GetTrickOption(static_cast<RandomizerTrick>(i));
|
||||
auto option = randoSettings->GetTrickSetting(static_cast<RandomizerTrick>(i));
|
||||
if (enabledTricks.count(static_cast<RandomizerTrick>(i)) &&
|
||||
trickSearch.PassFilter(option.GetName().c_str()) && areaTreeEnabled[option.GetArea()] &&
|
||||
Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
||||
enabledTricks.erase(static_cast<RandomizerTrick>(i));
|
||||
}
|
||||
}
|
||||
std::string enabledTrickString = "";
|
||||
for (auto enabledTrickIt : enabledTricks) {
|
||||
enabledTrickString += std::to_string(enabledTrickIt);
|
||||
enabledTrickString += ",";
|
||||
}
|
||||
if (enabledTricks.size() == 0) {
|
||||
CVarClear(CVAR_RANDOMIZER_SETTING("EnabledTricks"));
|
||||
} else {
|
||||
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"), enabledTrickString.c_str());
|
||||
}
|
||||
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
|
||||
tricksDirty = true;
|
||||
SaveEnabledTricks();
|
||||
}
|
||||
|
||||
ImGui::BeginChild("ChildTricksEnabled", ImVec2(0, -8), false, ImGuiWindowFlags_HorizontalScrollbar);
|
||||
@@ -484,7 +461,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
||||
for (auto [area, trickIds] : randoSettings->mTricksByArea) {
|
||||
bool hasTricks = false;
|
||||
for (auto rt : trickIds) {
|
||||
auto option = randoSettings->GetTrickOption(rt);
|
||||
auto option = randoSettings->GetTrickSetting(rt);
|
||||
if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) &&
|
||||
enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
||||
hasTricks = true;
|
||||
@@ -497,7 +474,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
||||
ImGui::SetNextItemOpen(true, ImGuiCond_Once);
|
||||
if (ImGui::TreeNode((Rando::Tricks::GetAreaName(area) + "##enabled").c_str())) {
|
||||
for (auto rt : trickIds) {
|
||||
auto option = randoSettings->GetTrickOption(rt);
|
||||
auto option = randoSettings->GetTrickSetting(rt);
|
||||
if (!option.IsHidden() && trickSearch.PassFilter(option.GetName().c_str()) &&
|
||||
enabledTricks.count(rt) && Rando::Tricks::CheckTags(showTag, option.GetTags())) {
|
||||
ImGui::TreeNodeSetOpen(
|
||||
@@ -507,22 +484,7 @@ void DrawTricksMenu(WidgetInfo& info) {
|
||||
UIWidgets::PushStyleButton(THEME_COLOR, ImVec2(7.f, 5.f));
|
||||
if (ImGui::ArrowButton(std::to_string(rt).c_str(), ImGuiDir_Left)) {
|
||||
enabledTricks.erase(rt);
|
||||
std::string enabledTrickString = "";
|
||||
for (auto enabledTrickIt : enabledTricks) {
|
||||
enabledTrickString += std::to_string(enabledTrickIt);
|
||||
enabledTrickString += ",";
|
||||
}
|
||||
if (enabledTrickString == "") {
|
||||
CVarClear(CVAR_RANDOMIZER_SETTING("EnabledTricks"));
|
||||
} else {
|
||||
CVarSetString(CVAR_RANDOMIZER_SETTING("EnabledTricks"),
|
||||
enabledTrickString.c_str());
|
||||
}
|
||||
Ship::Context::GetInstance()
|
||||
->GetWindow()
|
||||
->GetGui()
|
||||
->SaveConsoleVariablesNextFrame();
|
||||
tricksDirty = true;
|
||||
SaveEnabledTricks();
|
||||
}
|
||||
UIWidgets::PopStyleButton();
|
||||
Rando::Tricks::DrawTagChips(option.GetTags(), option.GetName());
|
||||
|
||||
Reference in New Issue
Block a user