prime/include/MetroidPrime/CMain.hpp

135 lines
2.9 KiB
C++

#ifndef _CMAIN
#define _CMAIN
#include "types.h"
#include "rstl/reserved_vector.hpp"
#include "Kyoto/Alloc/CMemorySys.hpp"
#include "Kyoto/Basics/COsContext.hpp"
#include "Kyoto/Basics/CStopwatch.hpp"
#include "Kyoto/Streams/CInputStream.hpp"
#include "Kyoto/TReservedAverage.hpp"
#include "MetroidPrime/CGameArchitectureSupport.hpp"
#include "MetroidPrime/CGameGlobalObjects.hpp"
#include "MetroidPrime/TGameTypes.hpp"
#include "MetroidPrime/Tweaks/CTweaks.hpp"
class CMain;
// TODO
class UnkClassArena {
public:
UnkClassArena(CMain*);
};
// TODO move to new header
class CDvdRequestSys {
public:
CDvdRequestSys() {
if (mManagerInstalled != true) {
mManagerInstalled = true;
}
}
~CDvdRequestSys() {
if (mManagerInstalled == true) {
mManagerInstalled = false;
}
}
private:
static bool mManagerInstalled;
};
class CMain {
public:
enum ERestartMode {
kRM_None,
kRM_WinBad,
kRM_WinGood,
kRM_WinBest,
kRM_LoseGame,
kRM_Default,
kRM_StateSetter,
kRM_PreFrontEnd,
kRM_FrontEnd,
kRM_Game,
kRM_GameExit,
};
CMain();
~CMain();
bool LoadAudio();
void UpdateStreamedAudio();
void RegisterResourceTweaks();
void ResetGameState();
void StreamNewGameState(CInputStream& in, int saveIdx);
void RefreshGameState();
void AddWorldPaks();
void AsyncIdle(uint time);
int RsMain(int argc, const char* const* argv);
void InitializeSubsystems();
void FillInAssetIDs();
void ShutdownSubsystems();
void MemoryCardInitializePump();
void DoPredrawMetrics();
void DrawDebugMetrics(double dt, CStopwatch& stopWatch);
bool CheckTerminate();
bool CheckReset();
void OpenWindow();
void SetRestartMode(ERestartMode s) { x12c_restartMode = s; }
ERestartMode GetRestartMode() const { return x12c_restartMode; }
void SetCardBusy(bool v) { x160_31_cardBusy = v; }
void SetMaxSpeed(bool v) {
// ?
x160_26_screenFading = v;
}
void SetX30(bool v) { x160_30_ = v; }
static void EnsureWorldPaksReady();
static void EnsureWorldPakReady(CAssetId id);
// TODO
COsContext& InitOsContext() {
OpenWindow();
return x0_osContext;
}
private:
COsContext x0_osContext;
UnkClassArena x6c_unk;
CMemorySys x6d_memorySys;
CDvdRequestSys x6e_dvdRequestSys;
CTweaks x70_tweaks;
uchar pad[0x14];
double xe8_;
TReservedAverage< float, 4 > xf0_;
TReservedAverage< float, 4 > x104_;
float x118_;
float x11c_;
float x120_;
float x124_;
CGameGlobalObjects* x128_gameGlobalObjects;
ERestartMode x12c_restartMode;
rstl::reserved_vector< uint, 10 > x130_frameTimes;
int x15c_frameTimeIdx;
bool x160_24_finished : 1;
bool x160_25_mfGameBuilt : 1;
bool x160_26_screenFading : 1;
bool x160_27_ : 1;
bool x160_28_manageCard : 1;
bool x160_29_ : 1;
bool x160_30_ : 1;
bool x160_31_cardBusy : 1;
bool x161_24_gameFrameDrawn : 1;
CGameArchitectureSupport* x164_;
};
CHECK_SIZEOF(CMain, 0x168)
extern CMain* gpMain;
#endif // _CMAIN