From a78a4f70f16f531b3266f4d286490276c0bcc7c3 Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Thu, 20 Feb 2014 11:12:53 +0100 Subject: [PATCH 1/4] Dan doing stuff --- Code/Game/GameClient/DanBiasGame_Impl.cpp | 3 ++- Code/Misc/Input/Include/ApplicationKeyboard.h | 22 +++++++++++++++++ .../Include/Win32/Win32ApplicationKeyboard.h | 24 +++++++++++++++++++ 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 Code/Misc/Input/Include/ApplicationKeyboard.h create mode 100644 Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h diff --git a/Code/Game/GameClient/DanBiasGame_Impl.cpp b/Code/Game/GameClient/DanBiasGame_Impl.cpp index b0107a17..2a46b8d6 100644 --- a/Code/Game/GameClient/DanBiasGame_Impl.cpp +++ b/Code/Game/GameClient/DanBiasGame_Impl.cpp @@ -166,6 +166,7 @@ namespace DanBias DanBiasGame::Result DanBiasGame::Update(float deltaTime) { { // updating mouse input + // TODO: Is obosolete when Dennis's input system is wired in POINT mousePos; GetCursorPos( &mousePos ); @@ -179,7 +180,7 @@ namespace DanBias mouseNormalisedY /= (float)(windowVertex.bottom - windowVertex.top); data.inputObj.Update( mouseNormalisedX, mouseNormalisedY ); - } + } if( data.serverOwner ) { diff --git a/Code/Misc/Input/Include/ApplicationKeyboard.h b/Code/Misc/Input/Include/ApplicationKeyboard.h new file mode 100644 index 00000000..3e506e22 --- /dev/null +++ b/Code/Misc/Input/Include/ApplicationKeyboard.h @@ -0,0 +1,22 @@ +///////////////////////////////////////////////////////////////////// +// Created by [Dan Andersson] [2014] +///////////////////////////////////////////////////////////////////// +#ifndef INPUT_APPLICATION_KEBOARD_H +#define INPUT_APPLICATION_KEBOARD_H + +#include "InputObject.h" +#include + +namespace Input +{ + class AplicationKeyboard : public InputObject + { + public: + + protected: + AplicationKeyboard(); + ~AplicationKeyboard(); + }; +} + +#endif // !INPUT_KEBOARD_H diff --git a/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h b/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h new file mode 100644 index 00000000..f19f5940 --- /dev/null +++ b/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h @@ -0,0 +1,24 @@ +///////////////////////////////////////////////////////////////////// +// Created by [Dan Andersson] [2014] +///////////////////////////////////////////////////////////////////// +#ifndef INPUT_WIN32_APPLICATION_KEBOARD_H +#define INPUT_WIN32_APPLICATION_KEBOARD_H + +#include "..\ApplicationKeyboard.h" +//#include + +namespace Input +{ + class Win32ApplicationKeyboard :public AplicationKeyboard + { + public: + Win32ApplicationKeyboard(); + ~Win32ApplicationKeyboard(); + + + private: + + }; +} + +#endif // !INPUT_WIN32_APPLICATION_KEBOARD_H From 2c8b52e0fa739d25dca1fd1d37e8161f0f15ec75 Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Thu, 20 Feb 2014 13:27:21 +0100 Subject: [PATCH 2/4] some implementations --- Code/Misc/Input/Include/ApplicationKeyboard.h | 19 ++++++++--- Code/Misc/Input/Include/Common.h | 1 + .../Include/Win32/Win32ApplicationKeyboard.h | 6 ++-- Code/Misc/Input/Input.vcxproj | 4 +++ .../Misc/Input/Source/ApplicationKeyboard.cpp | 33 +++++++++++++++++++ .../Source/Win32/Win32ApplicationKeyboard.cpp | 20 +++++++++++ 6 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 Code/Misc/Input/Source/ApplicationKeyboard.cpp create mode 100644 Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp diff --git a/Code/Misc/Input/Include/ApplicationKeyboard.h b/Code/Misc/Input/Include/ApplicationKeyboard.h index 3e506e22..a6a41b6a 100644 --- a/Code/Misc/Input/Include/ApplicationKeyboard.h +++ b/Code/Misc/Input/Include/ApplicationKeyboard.h @@ -5,17 +5,28 @@ #define INPUT_APPLICATION_KEBOARD_H #include "InputObject.h" -#include +#include namespace Input { - class AplicationKeyboard : public InputObject + class ApplicationKeyboard : public InputObject { public: + bool IsActive() const; + + void Activate(); + void Deactivate(); + + void SetTargetText( ::std::wstring *field ); protected: - AplicationKeyboard(); - ~AplicationKeyboard(); + ::std::wstring *targetText; + + ApplicationKeyboard(); + ~ApplicationKeyboard(); + + private: + bool active; }; } diff --git a/Code/Misc/Input/Include/Common.h b/Code/Misc/Input/Include/Common.h index 18999b41..a82ad47b 100644 --- a/Code/Misc/Input/Include/Common.h +++ b/Code/Misc/Input/Include/Common.h @@ -21,6 +21,7 @@ namespace Input { SAIType_Keyboard, SAIType_Mouse, + SAIType_ApplicationKeyboard, SAIType_futureExample1, SAIType_futureExample2, SAIType_futureExample3, diff --git a/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h b/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h index f19f5940..c1896a45 100644 --- a/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h +++ b/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h @@ -4,17 +4,19 @@ #ifndef INPUT_WIN32_APPLICATION_KEBOARD_H #define INPUT_WIN32_APPLICATION_KEBOARD_H +#define NOMINMAX +#include #include "..\ApplicationKeyboard.h" -//#include namespace Input { - class Win32ApplicationKeyboard :public AplicationKeyboard + class Win32ApplicationKeyboard : public ApplicationKeyboard { public: Win32ApplicationKeyboard(); ~Win32ApplicationKeyboard(); + LRESULT CALLBACK WindowCallback( HWND h, UINT m, WPARAM w, LPARAM l ); private: diff --git a/Code/Misc/Input/Input.vcxproj b/Code/Misc/Input/Input.vcxproj index 8642e69e..2ecf7bfa 100644 --- a/Code/Misc/Input/Input.vcxproj +++ b/Code/Misc/Input/Input.vcxproj @@ -20,14 +20,17 @@ + + + @@ -35,6 +38,7 @@ + diff --git a/Code/Misc/Input/Source/ApplicationKeyboard.cpp b/Code/Misc/Input/Source/ApplicationKeyboard.cpp new file mode 100644 index 00000000..287785db --- /dev/null +++ b/Code/Misc/Input/Source/ApplicationKeyboard.cpp @@ -0,0 +1,33 @@ +#include "../Include/ApplicationKeyboard.h" + +using namespace ::Input; + +ApplicationKeyboard::ApplicationKeyboard() : + InputObject( Enum::SAIType_ApplicationKeyboard ) +{ + this->targetText = nullptr; + this->isEnabled = true; +} + +ApplicationKeyboard::~ApplicationKeyboard() +{ /* DO nothing */ } + +bool ApplicationKeyboard::IsActive() const +{ + return this->isEnabled; +} + +void ApplicationKeyboard::Activate() +{ + this->isEnabled = true; +} + +void ApplicationKeyboard::Deactivate() +{ + this->isEnabled = false; +} + +void ApplicationKeyboard::SetTargetText( ::std::wstring *field ) +{ + this->targetText = field; +} \ No newline at end of file diff --git a/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp b/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp new file mode 100644 index 00000000..30b585c9 --- /dev/null +++ b/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp @@ -0,0 +1,20 @@ +#include "../../Include/Win32/Win32ApplicationKeyboard.h" + +using namespace ::Input; + + +//{ +// class Win32ApplicationKeyboard : public ApplicationKeyboard +// { +// public: +// Win32ApplicationKeyboard(); +// ~Win32ApplicationKeyboard(); +// +// LRESULT CALLBACK WindowCallback( HWND h, UINT m, WPARAM w, LPARAM l ); +// +// private: +// +// }; +//} +// +//#endif // !INPUT_WIN32_APPLICATION_KEBOARD_H From 899324140843da18ad961a2df0bb13a40a139658 Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Thu, 20 Feb 2014 14:39:12 +0100 Subject: [PATCH 3/4] Win32ApplicationKeyboard fully implemented ApplicationKeyboard, Win32ApplicationKeyboard & implemented into the CreateDevice function --- Code/Misc/Input/Include/ApplicationKeyboard.h | 6 +- .../Include/Win32/Win32ApplicationKeyboard.h | 5 +- Code/Misc/Input/Include/Win32/Win32Input.h | 1 + Code/Misc/Input/Input.vcxproj | 17 ++++-- .../Misc/Input/Source/ApplicationKeyboard.cpp | 17 +++++- .../Source/Win32/Win32ApplicationKeyboard.cpp | 61 ++++++++++++++----- Code/Misc/Input/Source/Win32/Win32Input.cpp | 4 ++ 7 files changed, 83 insertions(+), 28 deletions(-) diff --git a/Code/Misc/Input/Include/ApplicationKeyboard.h b/Code/Misc/Input/Include/ApplicationKeyboard.h index a6a41b6a..d28140b3 100644 --- a/Code/Misc/Input/Include/ApplicationKeyboard.h +++ b/Code/Misc/Input/Include/ApplicationKeyboard.h @@ -17,10 +17,12 @@ namespace Input void Activate(); void Deactivate(); - void SetTargetText( ::std::wstring *field ); + void BindTextTarget( ::std::wstring *field ); + void ReleaseTextTarget(); protected: - ::std::wstring *targetText; + ::std::wstring *textTarget; + ::std::wstring::size_type writePos; ApplicationKeyboard(); ~ApplicationKeyboard(); diff --git a/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h b/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h index c1896a45..98bcc0e9 100644 --- a/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h +++ b/Code/Misc/Input/Include/Win32/Win32ApplicationKeyboard.h @@ -16,10 +16,7 @@ namespace Input Win32ApplicationKeyboard(); ~Win32ApplicationKeyboard(); - LRESULT CALLBACK WindowCallback( HWND h, UINT m, WPARAM w, LPARAM l ); - - private: - + void CaptureText( UINT msg, WPARAM param ); }; } diff --git a/Code/Misc/Input/Include/Win32/Win32Input.h b/Code/Misc/Input/Include/Win32/Win32Input.h index c420e3a7..b7a41ce0 100644 --- a/Code/Misc/Input/Include/Win32/Win32Input.h +++ b/Code/Misc/Input/Include/Win32/Win32Input.h @@ -8,6 +8,7 @@ #include "..\InputManager.h" #include "Win32Keyboard.h" #include "Win32Mouse.h" +#include "Win32ApplicationKeyboard.h" #include #include #include diff --git a/Code/Misc/Input/Input.vcxproj b/Code/Misc/Input/Input.vcxproj index 2ecf7bfa..d930acdb 100644 --- a/Code/Misc/Input/Input.vcxproj +++ b/Code/Misc/Input/Input.vcxproj @@ -44,6 +44,11 @@ + + + {2ec4dded-8f75-4c86-a10b-e1e8eb29f3ee} + + {7E3990D2-3D94-465C-B58D-64A74B3ECF9B} Input @@ -95,28 +100,32 @@ $(SolutionDir)..\External\Lib\$(ProjectName)\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName)D + $(IncludePath) $(SolutionDir)..\External\Lib\$(ProjectName)\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName) + $(IncludePath) $(SolutionDir)..\External\Lib\$(ProjectName)\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName)D + $(IncludePath) $(SolutionDir)..\External\Lib\$(ProjectName)\ $(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\ $(ProjectName)_$(PlatformShortName) + $(IncludePath) Level3 Disabled true - %(AdditionalIncludeDirectories) + $(SolutionDir)Misc\Utilities;%(AdditionalIncludeDirectories) true @@ -127,7 +136,7 @@ Level3 Disabled true - %(AdditionalIncludeDirectories) + $(SolutionDir)Misc\Utilities;%(AdditionalIncludeDirectories) true @@ -140,7 +149,7 @@ true true true - %(AdditionalIncludeDirectories) + $(SolutionDir)Misc\Utilities;%(AdditionalIncludeDirectories) true @@ -155,7 +164,7 @@ true true true - %(AdditionalIncludeDirectories) + $(SolutionDir)Misc\Utilities;%(AdditionalIncludeDirectories) true diff --git a/Code/Misc/Input/Source/ApplicationKeyboard.cpp b/Code/Misc/Input/Source/ApplicationKeyboard.cpp index 287785db..66ddb042 100644 --- a/Code/Misc/Input/Source/ApplicationKeyboard.cpp +++ b/Code/Misc/Input/Source/ApplicationKeyboard.cpp @@ -5,7 +5,8 @@ using namespace ::Input; ApplicationKeyboard::ApplicationKeyboard() : InputObject( Enum::SAIType_ApplicationKeyboard ) { - this->targetText = nullptr; + this->textTarget = nullptr; + this->writePos = 0; this->isEnabled = true; } @@ -27,7 +28,17 @@ void ApplicationKeyboard::Deactivate() this->isEnabled = false; } -void ApplicationKeyboard::SetTargetText( ::std::wstring *field ) +void ApplicationKeyboard::BindTextTarget( ::std::wstring *field ) { - this->targetText = field; + this->textTarget = field; + + if( field ) + { + this->writePos = field->size(); + } +} + +void ApplicationKeyboard::ReleaseTextTarget( ) +{ + this->BindTextTarget( nullptr ); } \ No newline at end of file diff --git a/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp b/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp index 30b585c9..3b58a032 100644 --- a/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp +++ b/Code/Misc/Input/Source/Win32/Win32ApplicationKeyboard.cpp @@ -1,20 +1,51 @@ #include "../../Include/Win32/Win32ApplicationKeyboard.h" +#include "Utilities.h" using namespace ::Input; +using namespace ::Utility::Value; +using ::std::wstring; +Win32ApplicationKeyboard::Win32ApplicationKeyboard() : ApplicationKeyboard() { /* DO nothing */ } -//{ -// class Win32ApplicationKeyboard : public ApplicationKeyboard -// { -// public: -// Win32ApplicationKeyboard(); -// ~Win32ApplicationKeyboard(); -// -// LRESULT CALLBACK WindowCallback( HWND h, UINT m, WPARAM w, LPARAM l ); -// -// private: -// -// }; -//} -// -//#endif // !INPUT_WIN32_APPLICATION_KEBOARD_H +Win32ApplicationKeyboard::~Win32ApplicationKeyboard() { /* DO nothing */ } + +void Win32ApplicationKeyboard::CaptureText( UINT msg, WPARAM param ) +{ + if( !this->textTarget | !this->isEnabled ) + return; + + switch( msg ) + { + case WM_CHAR: + this->textTarget->insert( this->writePos, 1, (wchar_t)param ); + ++this->writePos; + break; + case WM_KEYDOWN: + { + switch( param ) + { + case VK_BACK: + if( this->writePos > 0 ) + { + --this->writePos; + this->textTarget->erase( this->writePos, 1 ); + } + break; + case VK_DELETE: + if( this->writePos < this->textTarget->size() ) + { + this->textTarget->erase( this->writePos, 1 ); + } + break; + case VK_LEFT: + this->writePos = Max( this->writePos - 1, (wstring::size_type)0 ); + break; + case VK_RIGHT: + this->writePos = Min( this->writePos + 1, this->textTarget->size() ); + break; + default: break; + } + } + default: break; + } +} diff --git a/Code/Misc/Input/Source/Win32/Win32Input.cpp b/Code/Misc/Input/Source/Win32/Win32Input.cpp index c6be3c9d..28032070 100644 --- a/Code/Misc/Input/Source/Win32/Win32Input.cpp +++ b/Code/Misc/Input/Source/Win32/Win32Input.cpp @@ -775,6 +775,10 @@ InputObject* Win32Input::CreateDevice(const SAIType inputType, Typedefs::WindowH } } break; + + case SAIType_ApplicationKeyboard: + val = new Win32ApplicationKeyboard(); + break; } return val; From daa3f84c9c7d198c2a83df794e3718b125c3bd9f Mon Sep 17 00:00:00 2001 From: Dander7BD Date: Thu, 20 Feb 2014 16:34:45 +0100 Subject: [PATCH 4/4] Added feature Input::Mouse::GetDeltaPosition plus a few improvements --- Code/Misc/Input/Include/Mouse.h | 14 ++++++++------ Code/Misc/Input/Include/Win32/Win32Mouse.h | 2 -- Code/Misc/Input/Source/Mouse.cpp | 20 ++++++++++++++++++++ Code/Misc/Input/Source/Win32/Win32Mouse.cpp | 13 ++----------- 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/Code/Misc/Input/Include/Mouse.h b/Code/Misc/Input/Include/Mouse.h index b657604b..510fe3a9 100644 --- a/Code/Misc/Input/Include/Mouse.h +++ b/Code/Misc/Input/Include/Mouse.h @@ -66,12 +66,14 @@ namespace Input }; public: - virtual bool IsBtnUp(Enum::SAMI key) = 0; - virtual bool IsBtnDown(Enum::SAMI key) = 0; - virtual int GetWheelDelta() = 0; - virtual Struct::SAIPoint2D GetPixelPosition(Struct::SAIPoint2D targetMem = Struct::SAIPoint2D()) = 0; - + virtual bool IsBtnUp(Enum::SAMI key) = 0; + virtual bool IsBtnDown(Enum::SAMI key) = 0; + public: + int GetWheelDelta() const; + Struct::SAIPoint2D & GetPixelPosition( Struct::SAIPoint2D &targetMem = Struct::SAIPoint2D() ) const; + Struct::SAIPoint2D & GetDeltaPosition( Struct::SAIPoint2D &targetMem = Struct::SAIPoint2D() ) const; + void AddOnMousePressCallback( Typedefs::OnMousePressCallback func); void AddOnMouseDownCallback( Typedefs::OnMouseDownCallback func ); void AddOnMouseReleaseCallback( Typedefs::OnMouseReleaseCallback func ); @@ -135,7 +137,7 @@ namespace Input protected: std::vector mouseSubscribers; MouseCallbackList* callbackList; - Struct::SAIPoint2D pixelPos; + Struct::SAIPoint2D pixelPos, deltaPos; bool isCurorLocked; int wheelDelta; }; diff --git a/Code/Misc/Input/Include/Win32/Win32Mouse.h b/Code/Misc/Input/Include/Win32/Win32Mouse.h index 10c04a28..3f1c0f10 100644 --- a/Code/Misc/Input/Include/Win32/Win32Mouse.h +++ b/Code/Misc/Input/Include/Win32/Win32Mouse.h @@ -17,8 +17,6 @@ namespace Input bool IsBtnUp(Enum::SAMI key) override; bool IsBtnDown(Enum::SAMI key) override; - int GetWheelDelta() override; - Struct::SAIPoint2D GetPixelPosition(Struct::SAIPoint2D targetMem = Struct::SAIPoint2D()) override; void ProccessMouseData (bool isDown, Enum::SAMI btn, int delta, Struct::SAIPoint2D velocity, unsigned int makeCode); diff --git a/Code/Misc/Input/Source/Mouse.cpp b/Code/Misc/Input/Source/Mouse.cpp index 36bd8330..f0eaba3b 100644 --- a/Code/Misc/Input/Source/Mouse.cpp +++ b/Code/Misc/Input/Source/Mouse.cpp @@ -81,6 +81,7 @@ Mouse::Mouse() , wheelDelta(0) , isCurorLocked(0) , pixelPos() + , deltaPos() { } Mouse::~Mouse() @@ -88,6 +89,25 @@ Mouse::~Mouse() } +int Mouse::GetWheelDelta() const +{ + return this->wheelDelta; +} + +SAIPoint2D & Mouse::GetPixelPosition( Struct::SAIPoint2D &targetMem ) const +{ + targetMem.x = this->pixelPos.x; + targetMem.y = this->pixelPos.y; + return targetMem; +} + +SAIPoint2D & Mouse::GetDeltaPosition( Struct::SAIPoint2D &targetMem ) const +{ + targetMem.x = this->deltaPos.x; + targetMem.y = this->deltaPos.y; + return targetMem; +} + void Mouse::AddOnMousePressCallback( Typedefs::OnMousePressCallback func) { MouseCallbackList::CallbackData d; diff --git a/Code/Misc/Input/Source/Win32/Win32Mouse.cpp b/Code/Misc/Input/Source/Win32/Win32Mouse.cpp index ef6d9edf..8bf22972 100644 --- a/Code/Misc/Input/Source/Win32/Win32Mouse.cpp +++ b/Code/Misc/Input/Source/Win32/Win32Mouse.cpp @@ -30,22 +30,13 @@ bool Win32Mouse::IsBtnDown(Enum::SAMI btn) return this->buttons[btn].isDown; } -int Win32Mouse::GetWheelDelta() -{ - return this->wheelDelta; -} -Struct::SAIPoint2D Win32Mouse::GetPixelPosition(Struct::SAIPoint2D targetMem) -{ - targetMem = this->pixelPos; - return targetMem; -} void Win32Mouse::ProccessMouseData (bool isUp, Enum::SAMI btn, int delta, Struct::SAIPoint2D velocity, unsigned int makeCode) { if(velocity.Length() != 0) { - this->pixelPos.x += velocity.x; - this->pixelPos.y += velocity.y; + this->pixelPos.x += this->deltaPos.x = velocity.x; + this->pixelPos.y += this->deltaPos.y = velocity.y; for (unsigned int i = 0; i < this->mouseSubscribers.size(); i++) {