Transitions final autosave location to `OnTransitionEnd`. Adds functionality to autosave to set a delayed save flag if AutoSave is set to Major or All Items and one is obtained in a grotto, to avoid grotto autosaving but still provide for the autosave when location-based saving is off. Fixes small bug with item lookup where sometimes an item's `modIndex` would sometimes be reported one way, but the way Randomizer does things it would be in a the other `modIndex`, and the lookup would fail. Minor variable name clarification in ItemTableManager. Modifies AutoSave to account for item ID overlap from `MOD_RANDOMIZER` table (all items in the randomizer table is considered major for AutoSave purposes except ice traps).
46 lines
1.4 KiB
C++
46 lines
1.4 KiB
C++
#include "ItemTableManager.h"
|
|
#include <stdexcept>
|
|
|
|
ItemTableManager::ItemTableManager() {
|
|
}
|
|
|
|
ItemTableManager::~ItemTableManager() {
|
|
this->itemTables.clear();
|
|
}
|
|
|
|
bool ItemTableManager::AddItemTable(uint16_t tableID) {
|
|
ItemTable newItemTable;
|
|
return itemTables.emplace(tableID, newItemTable).second;
|
|
}
|
|
|
|
bool ItemTableManager::AddItemEntry(uint16_t tableID, uint16_t getItemID, GetItemEntry getItemEntry) {
|
|
try {
|
|
ItemTable* itemTable = RetrieveItemTable(tableID);
|
|
return itemTable->emplace(getItemID, getItemEntry).second;
|
|
} catch (const std::out_of_range& oor) { return false; }
|
|
}
|
|
|
|
GetItemEntry ItemTableManager::RetrieveItemEntry(uint16_t tableID, uint16_t getItemID) {
|
|
try {
|
|
ItemTable* itemTable = RetrieveItemTable(tableID);
|
|
GetItemEntry getItemEntry = itemTable->at(getItemID);
|
|
getItemEntry.drawItemId = getItemEntry.itemId;
|
|
getItemEntry.drawModIndex = getItemEntry.modIndex;
|
|
return getItemEntry;
|
|
} catch (std::out_of_range& oor) { return GET_ITEM_NONE; }
|
|
}
|
|
|
|
bool ItemTableManager::ClearItemTable(uint16_t tableID) {
|
|
try {
|
|
ItemTable* itemTable = RetrieveItemTable(tableID);
|
|
itemTable->clear();
|
|
return true;
|
|
} catch (const std::out_of_range& oor) { return false; }
|
|
}
|
|
|
|
ItemTable* ItemTableManager::RetrieveItemTable(uint16_t tableID) {
|
|
try {
|
|
return &itemTables.at(tableID);
|
|
} catch (const std::out_of_range& oor) { throw(oor); }
|
|
}
|