diff --git a/framework/platform/game-dx.cpp b/framework/platform/game-dx.cpp index f360be2..f52fdf7 100644 --- a/framework/platform/game-dx.cpp +++ b/framework/platform/game-dx.cpp @@ -3,9 +3,7 @@ #include "platform-dx/audioengine-dx.hpp" #include "platform-dx/device-dx.hpp" #include "platform-dx/game-dx.hpp" -#include "input/gamepad.hpp" #include "platform-dx/gdevicemanager-dx.hpp" -#include "platform-dx/mouse-dx.hpp" #include "platform-dx/implementations.hpp" #include "platform-dx/window-dx.hpp" @@ -40,7 +38,7 @@ namespace xna { } void Game::Initialize() { -//#if (_WIN32_WINNT >= 0x0A00 /*_WIN32_WINNT_WIN10*/) +//#if (_WIN32_WINNT >= _WIN32_WINNT_WIN10) Microsoft::WRL::Wrappers::RoInitializeWrapper initialize(RO_INIT_MULTITHREADED); if (FAILED(initialize)) { diff --git a/framework/platform/keyboard-dx.cpp b/framework/platform/keyboard-dx.cpp index 224a0eb..9bd9615 100644 --- a/framework/platform/keyboard-dx.cpp +++ b/framework/platform/keyboard-dx.cpp @@ -3,7 +3,7 @@ namespace xna { KeyboardState Keyboard::GetState() { - if (!impl->_dxKeyboard) + if (!impl || !impl->_dxKeyboard) return KeyboardState(); const auto state = Keyboard::impl->_dxKeyboard->GetState(); @@ -17,4 +17,11 @@ namespace xna { impl = uNew(); impl->_dxKeyboard = uNew(); } + + bool Keyboard::IsConnected() { + if (!impl || !impl->_dxKeyboard) + return false; + + return impl->_dxKeyboard->IsConnected(); + } } \ No newline at end of file diff --git a/framework/platform/mouse-dx.cpp b/framework/platform/mouse-dx.cpp index ef92172..4052703 100644 --- a/framework/platform/mouse-dx.cpp +++ b/framework/platform/mouse-dx.cpp @@ -1,5 +1,55 @@ -#include "platform-dx/mouse-dx.hpp" +#include "input/mouse.hpp" +#include "platform-dx/implementations.hpp" namespace xna { + MouseState Mouse::GetState() { + if (!impl || !impl->_dxMouse) + return MouseState(); + const auto state = impl->_dxMouse->GetState(); + MouseState mstate; + mstate.LeftButton = static_cast(state.leftButton); + mstate.RightButton = static_cast(state.rightButton); + mstate.MiddleButton = static_cast(state.middleButton); + mstate.XButton1 = static_cast(state.xButton1); + mstate.XButton2 = static_cast(state.xButton2); + mstate.X = state.x; + mstate.Y = state.y; + mstate.ScroolWheelValue = state.scrollWheelValue; + + return mstate; + } + + bool Mouse::IsConnected() { + if (!impl || !impl->_dxMouse) + return false; + + return impl->_dxMouse->IsConnected(); + } + + bool Mouse::IsVisible() { + if (!impl || !impl->_dxMouse) + return false; + + return impl->_dxMouse->IsVisible(); + } + + void Mouse::IsVisible(bool value) { + if (!impl || !impl->_dxMouse) + return; + + impl->_dxMouse->SetVisible(value); + } + + void Mouse::ResetScrollWheel() { + if (!impl || !impl->_dxMouse) + return; + + impl->_dxMouse->ResetScrollWheelValue(); + } + + void Mouse::Initialize() { + impl = uNew(); + impl->_dxMouse = uNew(); + } } \ No newline at end of file diff --git a/framework/platform/window-dx.cpp b/framework/platform/window-dx.cpp index 2a6d283..1573e5b 100644 --- a/framework/platform/window-dx.cpp +++ b/framework/platform/window-dx.cpp @@ -1,5 +1,4 @@ #include "platform-dx/window-dx.hpp" -#include "platform-dx/mouse-dx.hpp" #include "input/gamepad.hpp" #include "platform-dx/implementations.hpp" @@ -142,7 +141,7 @@ namespace xna { case WM_ACTIVATE: case WM_ACTIVATEAPP: Keyboard::impl->ProcessMessage(msg, wParam, lParam); - Mouse::_dxMouse->ProcessMessage(msg, wParam, lParam); + Mouse::impl->ProcessMessage(msg, wParam, lParam); break; case WM_SYSKEYDOWN: if (!(wParam == VK_RETURN && (lParam & 0x60000000) == 0x20000000)) { @@ -167,7 +166,7 @@ namespace xna { case WM_XBUTTONDOWN: case WM_XBUTTONUP: case WM_MOUSEHOVER: - Mouse::_dxMouse->ProcessMessage(msg, wParam, lParam); + Mouse::impl->ProcessMessage(msg, wParam, lParam); break; case WM_KILLFOCUS: GamePad::impl->Suspend(); diff --git a/inc/input/keyboard.hpp b/inc/input/keyboard.hpp index 84efaa3..152c1ed 100644 --- a/inc/input/keyboard.hpp +++ b/inc/input/keyboard.hpp @@ -215,6 +215,7 @@ namespace xna { static KeyboardState GetState(); //static bool IsConnected(); static void Initialize(); + static bool IsConnected(); public: struct PlatformImplementation; diff --git a/inc/input/mouse.hpp b/inc/input/mouse.hpp index fae2d87..940969d 100644 --- a/inc/input/mouse.hpp +++ b/inc/input/mouse.hpp @@ -4,7 +4,7 @@ #include "../default.hpp" namespace xna { - struct IMouseState { + struct MouseState { ButtonState LeftButton{ ButtonState::Released }; ButtonState RightButton{ ButtonState::Released }; ButtonState MiddleButton{ ButtonState::Released }; @@ -15,14 +15,19 @@ namespace xna { int ScroolWheelValue{ 0 }; }; - class IMouse { + class Mouse { public: - virtual ~IMouse() {} static MouseState GetState(); static bool IsConnected(); static bool IsVisible(); static void IsVisible(bool value); - static void ResetScrollWheel(); + static void ResetScrollWheel(); + + static void Initialize(); + + public: + struct PlatformImplementation; + inline static uptr impl = nullptr; }; } diff --git a/inc/platform-dx/implementations.hpp b/inc/platform-dx/implementations.hpp index 838d88c..7658ce7 100644 --- a/inc/platform-dx/implementations.hpp +++ b/inc/platform-dx/implementations.hpp @@ -8,6 +8,7 @@ #include "graphics/sprite.hpp" #include "input/gamepad.hpp" #include "input/keyboard.hpp" +#include "input/mouse.hpp" #include "platform-dx/presentparameters-dx.hpp" #include "platform-dx/rendertarget-dx.hpp" #include "platform-dx/swapchain-dx.hpp" @@ -188,7 +189,16 @@ namespace xna { void ProcessMessage(UINT message, WPARAM wParam, LPARAM lParam) { if (_dxKeyboard) - Keyboard::impl->_dxKeyboard->ProcessMessage(message, wParam, lParam); + _dxKeyboard->ProcessMessage(message, wParam, lParam); + } + }; + + struct Mouse::PlatformImplementation { + inline static uptr _dxMouse = nullptr; + + void ProcessMessage(UINT message, WPARAM wParam, LPARAM lParam) { + if (_dxMouse) + _dxMouse->ProcessMessage(message, wParam, lParam); } }; } \ No newline at end of file diff --git a/inc/platform-dx/mouse-dx.hpp b/inc/platform-dx/mouse-dx.hpp deleted file mode 100644 index 941d029..0000000 --- a/inc/platform-dx/mouse-dx.hpp +++ /dev/null @@ -1,74 +0,0 @@ -#ifndef XNA_PLATFORM_MOUSE_DX_HPP -#define XNA_PLATFORM_MOUSE_DX_HPP - -#include "../input/mouse.hpp" -#include - -namespace xna { - struct MouseState : public IMouseState { - constexpr MouseState() = default; - - constexpr MouseState(DirectX::Mouse::State const& dxMouseState) { - LeftButton = static_cast(dxMouseState.leftButton); - RightButton = static_cast(dxMouseState.rightButton); - MiddleButton = static_cast(dxMouseState.middleButton); - XButton1 = static_cast(dxMouseState.xButton1); - XButton2 = static_cast(dxMouseState.xButton2); - X = dxMouseState.x; - Y = dxMouseState.y; - ScroolWheelValue = dxMouseState.scrollWheelValue; - } - }; - - struct Mouse : public IMouse { - inline static void Initialize() { - _dxMouse = uNew(); - } - - public: - inline static uptr _dxMouse = nullptr; - - private: - constexpr Mouse() = default; - constexpr Mouse(Mouse&&) = default; - constexpr Mouse(const Mouse&) = default; - }; - - inline MouseState IMouse::GetState() { - if (!Mouse::_dxMouse) - return MouseState(); - - const auto state = Mouse::_dxMouse->GetState(); - return MouseState(state); - } - - inline bool IMouse::IsConnected() { - if (!Mouse::_dxMouse) - return false; - - return Mouse::_dxMouse->IsConnected(); - } - - inline bool IMouse::IsVisible() { - if (!Mouse::_dxMouse) - return false; - - return Mouse::_dxMouse->IsVisible(); - } - - inline void IMouse::IsVisible(bool value) { - if (!Mouse::_dxMouse) - return; - - Mouse::_dxMouse->SetVisible(value); - } - - inline void IMouse::ResetScrollWheel() { - if (!Mouse::_dxMouse) - return; - - Mouse::_dxMouse->ResetScrollWheelValue(); - } -} - -#endif \ No newline at end of file diff --git a/inc/platform-dx/xna-dx.hpp b/inc/platform-dx/xna-dx.hpp index d23a59c..89441a8 100644 --- a/inc/platform-dx/xna-dx.hpp +++ b/inc/platform-dx/xna-dx.hpp @@ -7,7 +7,6 @@ #include "gdeviceinfo-dx.hpp" #include "gdevicemanager-dx.hpp" #include "init-dx.hpp" -#include "mouse-dx.hpp" #include "presentparameters-dx.hpp" #include "rasterizerstate-dx.hpp" #include "rendertarget-dx.hpp"