#pragma once #include "ship/window/Window.h" #include "ship/window/gui/Gui.h" #include "ship/controller/controldevice/controller/mapping/keyboard/KeyboardScancodes.h" #include "FastMouseStateManager.h" union Gfx; #include "interpreter.h" namespace Fast { class Fast3dWindow : public Ship::Window { public: Fast3dWindow(); Fast3dWindow(std::vector> guiWindows); Fast3dWindow(std::shared_ptr gui); Fast3dWindow(std::shared_ptr gui, std::shared_ptr mouseStateManager); ~Fast3dWindow(); void Init() override; void Close() override; void RunGuiOnly() override; void StartFrame() override; void EndFrame() override; bool IsFrameReady() override; void HandleEvents() override; void SetCursorVisibility(bool visible) override; uint32_t GetWidth() override; uint32_t GetHeight() override; int32_t GetPosX() override; int32_t GetPosY() override; float GetAspectRatio() override; void SetMousePos(Ship::Coords pos) override; Ship::Coords GetMousePos() override; Ship::Coords GetMouseDelta() override; Ship::CoordsF GetMouseWheel() override; bool GetMouseState(Ship::MouseBtn btn) override; void SetMouseCapture(bool capture) override; bool IsMouseCaptured() override; uint32_t GetCurrentRefreshRate() override; bool SupportsWindowedFullscreen() override; bool CanDisableVerticalSync() override; void SetResolutionMultiplier(float multiplier) override; void SetMsaaLevel(uint32_t value) override; void SetFullscreen(bool isFullscreen) override; bool IsFullscreen() override; bool IsRunning() override; uintptr_t GetGfxFrameBuffer() override; const char* GetKeyName(int32_t scancode) override; void InitWindowManager(); int32_t GetTargetFps(); void SetTargetFps(int32_t fps); void SetMaximumFrameLatency(int32_t latency); void GetPixelDepthPrepare(float x, float y); uint16_t GetPixelDepth(float x, float y); void SetTextureFilter(FilteringMode filteringMode); void SetRendererUCode(UcodeHandlers ucode); void EnableSRGBMode(); bool DrawAndRunGraphicsCommands(Gfx* commands, const std::unordered_map& mtxReplacements); std::weak_ptr GetInterpreterWeak() const; protected: static bool KeyDown(int32_t scancode); static bool KeyUp(int32_t scancode); static void AllKeysUp(); static bool MouseButtonDown(int button); static bool MouseButtonUp(int button); static void OnFullscreenChanged(bool isNowFullscreen); private: GfxRenderingAPI* mRenderingApi; GfxWindowBackend* mWindowManagerApi; std::shared_ptr mInterpreter = nullptr; }; } // namespace Fast