Files
ss/include/d/flag/dungeonflag_manager.h
T
2025-03-09 21:15:53 +01:00

44 lines
1.2 KiB
C++

#ifndef D_FLAG_DUNGEONFLAG_MANAGER_H
#define D_FLAG_DUNGEONFLAG_MANAGER_H
#include "d/flag/flag_index.h"
#include "d/flag/flag_space.h"
#include "toBeSorted/file_manager.h"
class DungeonflagManager {
private:
bool mShouldCommit;
u16 mStageIndex;
FlagIndex *mpFlagIndex;
FlagSpace mFlagSpace;
static u16 sDungeonFlags[8];
public:
static DungeonflagManager *sInstance;
void copyFromSave(u32 flag);
void copyFromSave_Internal(u16 flagIndex);
void setCommitFlag(u16 flag);
DungeonflagManager();
void init();
void setToValue(u16 flag, u32 value);
void setFlag(u16 flag);
u16 getDungeonFlag(u16 flag);
bool commit();
/** inline shenanigans to get copyFromSave to match */
static inline u16 *saveFilePtr(u16 flagIndex) {
u32 offset = (flagIndex & 0x1fff) * 8;
return FileManager::GetInstance()->getDungeonFlagsConst() + offset;
}
u16 getCounterOrFlag(u32 idx, u32 count) const {
u16 offset = mStageIndex * 8;
const u16 *space = FileManager::GetInstance()->getDungeonFlagsConst() + offset;
return mpFlagIndex->getCounterOrFlag(idx, space, count);
}
};
#endif