mirror of https://github.com/PrimeDecomp/prime.git
72 lines
1.6 KiB
C++
72 lines
1.6 KiB
C++
#ifndef _COSCONTEXT_HPP
|
|
#define _COSCONTEXT_HPP
|
|
|
|
#include <stddef.h>
|
|
|
|
#include "types.h"
|
|
|
|
#include <dolphin/gx/GXStruct.h>
|
|
|
|
enum EConsoleType {
|
|
kCT_Emulator,
|
|
kCT_Development1,
|
|
kCT_Development2Or3,
|
|
kCT_Retail,
|
|
};
|
|
|
|
class COsKeyState {
|
|
public:
|
|
COsKeyState(int key, bool down, bool released, bool repeat, bool unk)
|
|
: x0_key(key), x4_down(down), x4_released(released), x4_repeat(repeat), x4_unk(unk) {}
|
|
|
|
bool IsPressed() const { return x4_down; }
|
|
bool JustPressed() const { return x4_unk && x4_down; }
|
|
private:
|
|
int x0_key;
|
|
short x4_down : 1;
|
|
short x4_released : 1;
|
|
short x4_repeat : 1;
|
|
short x4_unk : 1;
|
|
};
|
|
|
|
class COsContext {
|
|
public:
|
|
// TODO: Once main.cpp is matched make this private
|
|
static bool mProgressiveMode;
|
|
|
|
COsContext(bool, bool);
|
|
~COsContext();
|
|
|
|
int OpenWindow(const char* title, int x, int y, int w, int h, bool fullscreen);
|
|
bool Update();
|
|
COsKeyState GetOsKeyState(int key) const;
|
|
|
|
void* AllocFromArena(size_t sz);
|
|
|
|
uint GetBaseFreeRam() const {
|
|
size_t hiAddr = reinterpret_cast< size_t >(x1c_arenaHi);
|
|
size_t loAddr = reinterpret_cast< size_t >(x20_arenaLo2);
|
|
return ((hiAddr & ~31) - ((loAddr + 31) & ~31));
|
|
}
|
|
|
|
static void SetProgressiveMode(bool progressive) { mProgressiveMode = progressive; }
|
|
static bool GetProgressiveMode() { return mProgressiveMode; }
|
|
private:
|
|
int x0_right;
|
|
int x4_bottom;
|
|
int x8_left;
|
|
int xc_top;
|
|
int x10_format;
|
|
int x14_consoleType;
|
|
void* x18_arenaLo1;
|
|
void* x1c_arenaHi;
|
|
void* x20_arenaLo2;
|
|
void* x24_frameBuffer1;
|
|
void* x28_frameBuffer2;
|
|
int x2c_frameBufferSize;
|
|
GXRenderModeObj x30_renderMode;
|
|
};
|
|
CHECK_SIZEOF(COsContext, 0x6c)
|
|
|
|
#endif
|