Added recalculate_accessible_checks debug console command.

This commit is contained in:
Anthony Stewart 2025-02-22 15:10:00 -06:00
commit 4ec676f642
2 changed files with 8 additions and 38 deletions

View file

@ -1406,6 +1406,11 @@ static bool SfxHandler(std::shared_ptr<Ship::Console> Console, const std::vector
return 0;
}
static bool RecalculateAccessibleChecksHandler(std::shared_ptr<Ship::Console> Console, const std::vector<std::string>& args, std::string* output) {
CheckTracker::RecalculateAccessibleChecks();
return 0;
}
void DebugConsole_Init(void) {
// Console
CMD_REGISTER("file_select", {FileSelectHandler, "Returns to the file select."});
@ -1595,5 +1600,7 @@ void DebugConsole_Init(void) {
{"group_name", Ship::ArgumentType::TEXT, true},
}});
CMD_REGISTER("recalculate_accessible_checks", {RecalculateAccessibleChecksHandler, "Recalculate accessible checks."});
Ship::Context::GetInstance()->GetWindow()->GetGui()->SaveConsoleVariablesNextFrame();
}

View file

@ -826,9 +826,7 @@ void LoadFile() {
UpdateAllAreas();
if (gSaveContext.fileNum >= 0 && gSaveContext.fileNum <= 2) {
if (areaTable[RR_ROOT].regionName.empty()) {
RegionTable_Init();
}
RecalculateAccessibleChecks();
}
}
@ -1729,41 +1727,6 @@ void ImGuiDrawTwoColorPickerSection(const char* text, const char* cvarMainName,
}
}
void CalculateAccessibleEntrances(const Region& region,
bool isParentAccessible,
std::unordered_map<const Rando::Entrance*, bool>& entranceAccessible,
std::vector<RandomizerRegion>& visitedRegions,
std::stop_token stopToken) {
for (const auto& entranceInRegion : region.exits) {
if (stopToken.stop_requested()) {
return;
}
auto pair = entranceAccessible.find(&entranceInRegion);
bool isEntranceAccessible = true;
if (pair == entranceAccessible.end()) {
isEntranceAccessible = isParentAccessible && entranceInRegion.GetConditionsMet();
entranceAccessible[&entranceInRegion] = isEntranceAccessible;
} else if (!pair->second) {
isEntranceAccessible = isParentAccessible && entranceInRegion.GetConditionsMet();
pair->second = isEntranceAccessible;
}
else {
return;
}
if (std::find(visitedRegions.begin(), visitedRegions.end(), entranceInRegion.GetConnectedRegionKey()) == visitedRegions.end()) {
visitedRegions.emplace_back(entranceInRegion.GetConnectedRegionKey());
CalculateAccessibleEntrances(*entranceInRegion.GetConnectedRegion(),
isEntranceAccessible,
entranceAccessible,
visitedRegions,
stopToken);
visitedRegions.pop_back();
}
}
}
void RecalculateAccessibleChecks() {
StartPerformanceTimer(PT_RECALCULATE_ACCESSIBLE_CHECKS);