prime/include/MetroidPrime/Player/CWorldLayerState.hpp

69 lines
1.3 KiB
C++

#ifndef _CWORLDLAYERSTATE
#define _CWORLDLAYERSTATE
#include "MetroidPrime/TGameTypes.hpp"
#include "rstl/vector.hpp"
class CBitStreamReader;
class CWorldSaveGameInfo;
class CMemoryStreamOut;
class CWorldLayers {
public:
class Area {
public:
int m_startNameIdx;
int m_layerCount;
// u64 m_layerBits;
uint m_layerBitsHi;
uint m_layerBitsLo;
};
};
class WordBitmap {
public:
WordBitmap() : bitCount(0) {}
int GetBitCount() const { return bitCount; }
bool GetBit(int idx) const {
int wordIdx = idx / 32;
if (wordIdx >= words.size()) {
return false;
}
int wordCur = idx % 32;
return ((words[wordIdx] >> wordCur) & 0x1) != 0u;
}
void operator=(const WordBitmap&);
void Clear() {
words.clear();
bitCount = 0;
}
private:
int bitCount;
rstl::vector< uint > words;
};
class CWorldLayerState {
public:
CWorldLayerState(CBitStreamReader&, const CWorldSaveGameInfo&);
void PutTo(CMemoryStreamOut&);
void SetLayerActive(const TAreaId& areaIdx, const int& layerIdx, bool active);
bool IsLayerActive(const TAreaId& areaIdx, const int& layerIdx);
void InitializeWorldLayers(const rstl::vector< CWorldLayers::Area >&);
int GetAreaLayerCount(const TAreaId&);
private:
rstl::vector< CWorldLayers::Area > x0_areaLayers;
WordBitmap x10_saveLayers;
};
#endif // _CWORLDLAYERSTATE