Files
ss/include/toBeSorted/misc_flag_managers.h
T
2024-10-25 11:05:26 +02:00

88 lines
2.2 KiB
C++

#ifndef MISC_FLAG_MANAGERS_H
#define MISC_FLAG_MANAGERS_H
#include "common.h"
#include "toBeSorted/bitwise_flag_helper.h"
#include "toBeSorted/flag_space.h"
#include "toBeSorted/file_manager.h"
class CommittableFlagManager {
public:
bool mNeedsCommit;
virtual void doCommit() = 0;
virtual ~CommittableFlagManager() {}
bool commitIfNecessary();
void setNeedsCommit(bool commit) {
mNeedsCommit = commit;
}
CommittableFlagManager() {
mNeedsCommit = false;
}
CommittableFlagManager(bool commit) {
mNeedsCommit = commit;
}
};
class TBoxFlagManager : public CommittableFlagManager {
public:
FlagSpace mFlagSpace;
u16 mSceneIndex;
BitwiseFlagHelper mFlagHelper;
static u16 sTBoxFlags[2];
static TBoxFlagManager *sInstance;
virtual void doCommit() override;
bool checkUncommittedFlag(u16 flag);
TBoxFlagManager();
virtual ~TBoxFlagManager() {}
void init();
void copyFromSave(u32 sceneIndex);
bool checkFlag(u16 sceneIndex, u16 flag);
virtual u16 getFlagCount() const;
void setFlag(u16 flag);
bool checkUncommittedFlag(u16 sceneIndex, u16 flag);
u16 checkUncommittedFlag2(u16 flag) {
return checkUncommittedFlag(flag);
}
};
// NOTE: Not actually Enemy Defeat.
// This is a little more than that, it keeps track of live objects based on their id as a whole
class EnemyDefeatManager : public CommittableFlagManager {
public:
FlagSpace mFlagSpace;
BitwiseFlagHelper mFlagHelper;
u16 mSceneIndex;
static u16 sEnemyDefeatFlags[4096];
static EnemyDefeatManager *sInstance;
void clearSavedFlags();
bool checkUncommittedFlag(u16 flag);
u16 checkUncommittedFlag2(u16 flag) {
return checkUncommittedFlag(flag);
}
EnemyDefeatManager();
void init();
void copyFromSave(u16 sceneIndex);
void updateFlagIndex(u16 sceneIndex);
void clearAll();
bool checkIsValidFlag(u16 flag);
bool checkFlag(u16 flag);
virtual ~EnemyDefeatManager() {}
virtual u16 getFlagCount() const;
void setFlag(u16 flag);
virtual void doCommit() override {
FileManager *mgr = FileManager::sInstance;
mgr->setEnemyDefeatFlags(mFlagSpace.getFlagPtrUnchecked(), 0, 0x1000);
};
};
#endif