mirror of
https://github.com/zeldaret/ss
synced 2026-05-24 07:10:53 -04:00
44 lines
1.2 KiB
C++
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
|