#pragma once #include #include "PR/ultra64/gbi.h" #include "Lib/Fast3D/gfx_pc.h" #include "UltraController.h" #include "Controller.h" #include "GlobalCtx2.h" namespace Ship { class AudioPlayer; class Window { public: static std::map>> Controllers; static int32_t lastScancode; Window(std::shared_ptr Context); ~Window(); void MainLoop(void (*MainFunction)(void)); void Init(); void StartFrame(); void RunCommands(Gfx* Commands, const std::vector>& mtx_replacements); void SetFrameDivisor(int divisor); void GetPixelDepthPrepare(float x, float y); uint16_t GetPixelDepth(float x, float y); void ToggleFullscreen(); void SetFullscreen(bool bIsFullscreen); void ShowCursor(bool hide); bool IsFullscreen() { return bIsFullscreen; } uint32_t GetCurrentWidth(); uint32_t GetCurrentHeight(); uint32_t dwMenubar; std::shared_ptr GetContext() { return Context.lock(); } std::shared_ptr GetAudioPlayer() { return APlayer; } protected: private: static bool KeyDown(int32_t dwScancode); static bool KeyUp(int32_t dwScancode); static void AllKeysUp(void); static void OnFullscreenChanged(bool bIsNowFullscreen); void SetAudioPlayer(); std::weak_ptr Context; std::shared_ptr APlayer; GfxWindowManagerAPI* WmApi; GfxRenderingAPI* RenderingApi; bool bIsFullscreen; uint32_t dwWidth; uint32_t dwHeight; }; }