From 98c35f4a87d42b70ea2bf78fcbb5aa675e4844ab Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Fri, 27 Nov 2020 06:25:54 -0800 Subject: [PATCH] DirectInput support --- BeefySysLib/BFApp.h | 10 ++++++++++ BeefySysLib/BeefySysLib.cpp | 25 ++++++++++++++++++++++++- BeefySysLib/BeefySysLib.vcxproj | 2 ++ BeefySysLib/BeefySysLib.vcxproj.filters | 6 ++++++ BeefySysLib/platform/win/WinBFApp.cpp | 17 +++++++++++++++++ BeefySysLib/platform/win/WinBFApp.h | 5 +++++ 6 files changed, 64 insertions(+), 1 deletion(-) diff --git a/BeefySysLib/BFApp.h b/BeefySysLib/BFApp.h index 3728ed4c..2498da12 100644 --- a/BeefySysLib/BFApp.h +++ b/BeefySysLib/BFApp.h @@ -40,6 +40,13 @@ class BFSysBitmap public: }; +class BFInputDevice +{ +public: + virtual ~BFInputDevice() {} + virtual String GetState() = 0; +}; + class BFApp { public: @@ -99,6 +106,9 @@ public: virtual void SetClipboardData(const StringImpl& format, const void* ptr, int size, bool resetClipboard) = 0; virtual void RehupMouse() {} + virtual String EnumerateInputDevices() { return ""; } + virtual BFInputDevice* CreateInputDevice(const StringImpl& guid) { return NULL; } + virtual BFSysBitmap* LoadSysBitmap(const wchar_t* fileName) = 0; virtual FileStream* OpenBinaryFile(const StringImpl& fileName); diff --git a/BeefySysLib/BeefySysLib.cpp b/BeefySysLib/BeefySysLib.cpp index 3e6bea08..8fb1535c 100644 --- a/BeefySysLib/BeefySysLib.cpp +++ b/BeefySysLib/BeefySysLib.cpp @@ -9,6 +9,7 @@ #include "img/BFIData.h" #include "util/Vector.h" #include "util/PerfTimer.h" +#include "util/TLSingleton.h" #include "util/AllocDebug.h" @@ -22,7 +23,7 @@ USING_NS_BF; #pragma warning(disable:4996) - +static String gTempString; static UTF16String gTempUTF16String; int gPixelsDrawn = 0; @@ -260,6 +261,17 @@ BF_EXPORT void BF_CALLTYPE BFApp_RehupMouse() } +BF_EXPORT const char* BF_CALLTYPE BFApp_EnumerateInputDevices() +{ + gTempString = gBFApp->EnumerateInputDevices(); + return gTempString.c_str(); +} + +BF_EXPORT BFInputDevice* BFApp_CreateInputDevice(const char* guid) +{ + return gBFApp->CreateInputDevice(guid); +} + BF_EXPORT BFSoundManager* BF_CALLTYPE BFApp_GetSoundManager() { return gBFApp->GetSoundManager(); @@ -725,6 +737,17 @@ BF_EXPORT ShaderParam* BF_CALLTYPE Gfx_GetShaderParam(Shader* shader, const char return shader->GetShaderParam(shaderName); } +BF_EXPORT void BF_CALLTYPE BFInput_Destroy(BFInputDevice* inputDevice) +{ + delete inputDevice; +} + +BF_EXPORT const char* BF_CALLTYPE BFInput_GetState(BFInputDevice* inputDevice) +{ + gTempString = inputDevice->GetState(); + return gTempString.c_str(); +} + BF_EXPORT int BF_CALLTYPE BF_TickCount() { return (int) BFTickCount(); diff --git a/BeefySysLib/BeefySysLib.vcxproj b/BeefySysLib/BeefySysLib.vcxproj index e4faab8a..aa1fb938 100644 --- a/BeefySysLib/BeefySysLib.vcxproj +++ b/BeefySysLib/BeefySysLib.vcxproj @@ -489,6 +489,7 @@ copy /y "$(OutDir)$(TargetName).lib" "$(SolutionDir)\BeefLibs\Beefy2D\dist\"true + @@ -1996,6 +1997,7 @@ copy /y "$(OutDir)$(TargetName).lib" "$(SolutionDir)\BeefLibs\Beefy2D\dist\"true + diff --git a/BeefySysLib/BeefySysLib.vcxproj.filters b/BeefySysLib/BeefySysLib.vcxproj.filters index ea2a4fca..0b9db518 100644 --- a/BeefySysLib/BeefySysLib.vcxproj.filters +++ b/BeefySysLib/BeefySysLib.vcxproj.filters @@ -701,6 +701,9 @@ src + + src\platform\win + @@ -1063,6 +1066,9 @@ src\util + + src\platform\win + diff --git a/BeefySysLib/platform/win/WinBFApp.cpp b/BeefySysLib/platform/win/WinBFApp.cpp index da7b81a5..acb7159b 100644 --- a/BeefySysLib/platform/win/WinBFApp.cpp +++ b/BeefySysLib/platform/win/WinBFApp.cpp @@ -4,6 +4,7 @@ #include #include "../../util/BeefPerf.h" #include "DSoundManager.h" +#include "DInputManager.h" #include #pragma comment(lib, "dwmapi.lib") @@ -1137,12 +1138,14 @@ WinBFApp::WinBFApp() mDataDir = mInstallDir; mInMsgProc = false; mDSoundManager = NULL; + mDInputManager = NULL; } WinBFApp::~WinBFApp() { delete mRenderDevice; delete mDSoundManager; + delete mDInputManager; } void WinBFApp::Init() @@ -1269,6 +1272,20 @@ void WinBFApp::RehupMouse() } } +String WinBFApp::EnumerateInputDevices() +{ + if (mDInputManager == NULL) + mDInputManager = new DInputManager(); + return mDInputManager->EnumerateDevices(); +} + +BFInputDevice* WinBFApp::CreateInputDevice(const StringImpl& guid) +{ + if (mDInputManager == NULL) + mDInputManager = new DInputManager(); + return mDInputManager->CreateInputDevice(guid); +} + void WinBFWindow::SetMinimumSize(int minWidth, int minHeight, bool clientSized) { if (clientSized) diff --git a/BeefySysLib/platform/win/WinBFApp.h b/BeefySysLib/platform/win/WinBFApp.h index ce779de7..ec9b8f3b 100644 --- a/BeefySysLib/platform/win/WinBFApp.h +++ b/BeefySysLib/platform/win/WinBFApp.h @@ -10,6 +10,7 @@ NS_BF_BEGIN; class RenderDevice; class DSoundManager; +class DInputManager; typedef Dictionary PtrToHGlobalMap; typedef Dictionary StringToUIntMap; @@ -90,6 +91,7 @@ public: bool mInMsgProc; StringToUIntMap mClipboardFormatMap; DSoundManager* mDSoundManager; + DInputManager* mDInputManager; protected: virtual void Draw() override; @@ -115,6 +117,9 @@ public: virtual void SetClipboardData(const StringImpl& format, const void* ptr, int size, bool resetClipboard) override; virtual void RehupMouse() override; + virtual String EnumerateInputDevices() override; + virtual BFInputDevice* CreateInputDevice(const StringImpl& guid) override; + virtual BFSysBitmap* LoadSysBitmap(const WCHAR* fileName) override; virtual BFSoundManager* GetSoundManager() override;