Updated ApplyEntranceOverrides.

This commit is contained in:
Anthony Stewart 2025-04-04 22:17:59 -05:00
commit 467e96c6b7

View file

@ -1665,33 +1665,44 @@ void EntranceShuffler::ParseJson(nlohmann::json spoilerFileJson) {
}
void EntranceShuffler::ApplyEntranceOverrides() {
std::vector<EntranceInfoPair> shuffledEntrances;
shuffledEntrances.reserve(entranceOverrides.size());
std::unordered_map<uint32_t, Entrance*> randomizerRegionToEntranceMap;
for (uint32_t rr = RR_NONE; rr < RR_MAX; rr++) {
for (auto& exit : areaTable[rr].exits) {
uint32_t key = rr << 16 | (uint32_t)exit.GetConnectedRegionKey();
randomizerRegionToEntranceMap[key] = &exit;
}
}
for (size_t i = 0; i < entranceOverrides.size(); i++) {
EntranceOverride entranceOverride = entranceOverrides[i];
const EntranceLinkInfo* forwardInfo;
const EntranceLinkInfo* returnInfo;
const EntranceLinkInfo* entranceInfo;
const EntranceLinkInfo* overridenEntranceInfo;
for (const auto& pair : entranceShuffleTable) {
if (pair.first.index == entranceOverride.index) {
forwardInfo = &pair.first;
entranceInfo = &pair.first;
}
if (pair.second.index == entranceOverride.index) {
forwardInfo = &pair.second;
entranceInfo = &pair.second;
}
if (pair.first.index == entranceOverride.override) {
returnInfo = &pair.first;
overridenEntranceInfo = &pair.first;
}
if (pair.second.index == entranceOverride.override) {
returnInfo = &pair.second;
overridenEntranceInfo = &pair.second;
}
}
shuffledEntrances.push_back({ *forwardInfo, *returnInfo });
}
uint32_t entranceKey = (uint32_t)entranceInfo->parentRegion << 16 | (uint32_t)entranceInfo->connectedRegion;
Entrance* entrance = randomizerRegionToEntranceMap[entranceKey];
uint32_t overridenEntranceKey = (uint32_t)overridenEntranceInfo->parentRegion << 16 | (uint32_t)overridenEntranceInfo->connectedRegion;
Entrance* overridenEntrance = randomizerRegionToEntranceMap[overridenEntranceKey];
SetAllEntrancesData(shuffledEntrances);
entrance->Disconnect();
entrance->Connect(overridenEntranceInfo->connectedRegion);
overridenEntrance->Disconnect();
overridenEntrance->Connect(entranceInfo->connectedRegion);
}
}
} // namespace Rando