2022-10-09 05:13:17 +00:00
|
|
|
#ifndef _COSCONTEXT
|
|
|
|
#define _COSCONTEXT
|
2022-04-10 00:17:06 +00:00
|
|
|
|
2022-09-20 04:35:24 +00:00
|
|
|
#include <stddef.h>
|
|
|
|
|
2022-04-10 00:17:06 +00:00
|
|
|
#include "types.h"
|
|
|
|
|
2022-08-30 22:48:44 +00:00
|
|
|
#include <dolphin/gx/GXStruct.h>
|
2022-04-10 00:17:06 +00:00
|
|
|
|
2022-10-02 07:43:00 +00:00
|
|
|
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) {}
|
|
|
|
|
2022-10-08 22:05:33 +00:00
|
|
|
bool IsPressed() const { return x4_down; }
|
|
|
|
bool JustPressed() const { return x4_unk && x4_down; }
|
2022-10-09 05:13:17 +00:00
|
|
|
|
2022-10-02 07:43:00 +00:00
|
|
|
private:
|
|
|
|
int x0_key;
|
|
|
|
short x4_down : 1;
|
|
|
|
short x4_released : 1;
|
|
|
|
short x4_repeat : 1;
|
|
|
|
short x4_unk : 1;
|
|
|
|
};
|
|
|
|
|
2022-04-10 00:17:06 +00:00
|
|
|
class COsContext {
|
|
|
|
public:
|
2022-10-03 01:04:35 +00:00
|
|
|
// TODO: Once main.cpp is matched make this private
|
|
|
|
static bool mProgressiveMode;
|
|
|
|
|
2022-09-13 04:26:54 +00:00
|
|
|
COsContext(bool, bool);
|
|
|
|
~COsContext();
|
|
|
|
|
2022-10-02 07:43:00 +00:00
|
|
|
int OpenWindow(const char* title, int x, int y, int w, int h, bool fullscreen);
|
|
|
|
bool Update();
|
|
|
|
COsKeyState GetOsKeyState(int key) const;
|
2022-10-01 06:19:09 +00:00
|
|
|
|
2022-10-02 07:43:00 +00:00
|
|
|
void* AllocFromArena(size_t sz);
|
2022-10-03 01:04:35 +00:00
|
|
|
|
2022-09-20 04:35:24 +00:00
|
|
|
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));
|
|
|
|
}
|
|
|
|
|
2022-11-30 01:56:37 +00:00
|
|
|
void* GetFramebuf1() const { return x24_frameBuffer1; }
|
|
|
|
void* GetFramebuf2() const { return x28_frameBuffer2; }
|
|
|
|
const GXRenderModeObj& GetRenderModeObj() const { return x30_renderMode; }
|
|
|
|
|
2022-10-02 07:43:00 +00:00
|
|
|
static void SetProgressiveMode(bool progressive) { mProgressiveMode = progressive; }
|
|
|
|
static bool GetProgressiveMode() { return mProgressiveMode; }
|
2022-10-09 05:13:17 +00:00
|
|
|
|
2022-04-10 00:17:06 +00:00
|
|
|
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;
|
|
|
|
};
|
2022-09-13 04:26:54 +00:00
|
|
|
CHECK_SIZEOF(COsContext, 0x6c)
|
2022-04-10 00:17:06 +00:00
|
|
|
|
2022-10-09 05:13:17 +00:00
|
|
|
#endif // _COSCONTEXT
|