Просмотр исходного кода

Added a polling method to detect if mouse has been double clicked

Marko Pintera 10 лет назад
Родитель
Сommit
620828f08f

+ 7 - 0
BansheeCore/Include/BsInput.h

@@ -166,6 +166,12 @@ namespace BansheeEngine
 		 */
 		bool isPointerButtonDown(PointerEventButton pointerButton) const;
 
+		/**
+		 * @brief	Query if the provided the left pointer button has been 
+		 *			double-clicked this frame.
+		 */
+		bool isPointerDoubleClicked() const;
+
 		/**
 		 * @brief	Enables or disables mouse smoothing. Smoothing makes the changes to
 		 *			mouse axes more gradual.
@@ -231,6 +237,7 @@ namespace BansheeEngine
 		Vector2I mPointerPosition;
 		Vector2I mPointerDelta;
 		ButtonState mPointerButtonStates[3];
+		bool mPointerDoubleClicked;
 		bool mLastPositionSet;
 
 		/************************************************************************/

+ 9 - 1
BansheeCore/Source/BsInput.cpp

@@ -19,7 +19,7 @@ namespace BansheeEngine
 	}
 
 	Input::Input()
-		:mLastPositionSet(false)
+		:mLastPositionSet(false), mPointerDoubleClicked(false)
 	{ 
 		mOSInputHandler = bs_shared_ptr<OSInputHandler>();
 
@@ -80,6 +80,7 @@ namespace BansheeEngine
 		}
 
 		mPointerDelta = Vector2I::ZERO; // Reset delta in case we don't receive any mouse input this frame
+		mPointerDoubleClicked = false;
 
 		if(mRawInputHandler == nullptr)
 		{
@@ -185,6 +186,8 @@ namespace BansheeEngine
 
 	void Input::cursorDoubleClick(const PointerEvent& event)
 	{
+		mPointerDoubleClicked = true;
+
 		if(!onPointerDoubleClick.empty())
 			onPointerDoubleClick(event);
 	}
@@ -259,6 +262,11 @@ namespace BansheeEngine
 		return mPointerButtonStates[(UINT32)pointerButton] == ButtonState::ToggledOn;
 	}
 
+	bool Input::isPointerDoubleClicked() const
+	{
+		return mPointerDoubleClicked;
+	}
+
 	Vector2I Input::getPointerPosition() const
 	{
 		return mPointerPosition;

+ 10 - 2
MBansheeEngine/Input.cs

@@ -119,16 +119,21 @@ namespace BansheeEngine
             return Internal_IsPointerButtonHeld(code);
         }
 
-        public static bool IsPointerButtonUp(PointerButton code, int deviceIdx)
+        public static bool IsPointerButtonUp(PointerButton code)
         {
             return Internal_IsPointerButtonUp(code);
         }
 
-        public static bool IsPointerButtonDown(PointerButton code, int deviceIdx)
+        public static bool IsPointerButtonDown(PointerButton code)
         {
             return Internal_IsPointerButtonDown(code);
         }
 
+        public static bool IsPointerDoubleClicked()
+        {
+            return Internal_IsPointerDoubleClicked();
+        }
+
         public static Vector2I PointerPosition
         {
             get
@@ -221,6 +226,9 @@ namespace BansheeEngine
         [MethodImpl(MethodImplOptions.InternalCall)]
         private static extern bool Internal_IsButtonDown(ButtonCode keyCode, int deviceIdx);
 
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern bool Internal_IsPointerDoubleClicked();
+
         [MethodImpl(MethodImplOptions.InternalCall)]
         private static extern bool Internal_IsPointerButtonHeld(PointerButton keyCode);
 

+ 1 - 0
SBansheeEngine/Include/BsScriptInput.h

@@ -29,6 +29,7 @@ namespace BansheeEngine
 		static bool internal_isPointerButtonHeld(PointerEventButton code);
 		static bool internal_isPointerButtonDown(PointerEventButton code);
 		static bool internal_isPointerButtonUp(PointerEventButton code);
+		static bool internal_isPointerDoubleClicked();
 		static float internal_getAxisValue(UINT32 axisType, UINT32 deviceIdx);
 		static void internal_getPointerPosition(Vector2I* position);
 		static void internal_getPointerDelta(Vector2I* position);

+ 6 - 0
SBansheeEngine/Source/BsScriptInput.cpp

@@ -37,6 +37,7 @@ namespace BansheeEngine
 		metaData.scriptClass->addInternalCall("Internal_IsPointerButtonHeld", &ScriptInput::internal_isPointerButtonHeld);
 		metaData.scriptClass->addInternalCall("Internal_IsPointerButtonDown", &ScriptInput::internal_isPointerButtonDown);
 		metaData.scriptClass->addInternalCall("Internal_IsPointerButtonUp", &ScriptInput::internal_isPointerButtonUp);
+		metaData.scriptClass->addInternalCall("Internal_IsPointerDoubleClicked", &ScriptInput::internal_isPointerDoubleClicked);
 		metaData.scriptClass->addInternalCall("Internal_GetAxisValue", &ScriptInput::internal_getAxisValue);
 		metaData.scriptClass->addInternalCall("Internal_GetPointerPosition", &ScriptInput::internal_getPointerPosition);
 		metaData.scriptClass->addInternalCall("Internal_GetPointerDelta", &ScriptInput::internal_getPointerDelta);
@@ -172,6 +173,11 @@ namespace BansheeEngine
 		return Input::instance().isPointerButtonUp(code);
 	}
 
+	bool ScriptInput::internal_isPointerDoubleClicked()
+	{
+		return Input::instance().isPointerDoubleClicked();
+	}
+
 	float ScriptInput::internal_getAxisValue(UINT32 axisType, UINT32 deviceIdx)
 	{
 		return Input::instance().getAxisValue(axisType, deviceIdx);

+ 0 - 4
TODO.txt

@@ -92,12 +92,8 @@ Simple stuff
 C#:
 Dialog.Show(title, text, btn1 text, btn1 callback, btn2 text, btn2 callback, btn3 text, btn3 callback)
 
-ColorPicker
- - Sliders don't show up
-
 Other simple stuff:
  - Inject an icon into an .exe (Win32 specific)
- - Use Mono compiler to compile the C# scripts
  - C# wrapper for GUISkin (and a way to assign the current skin to a window)
  - Need to add IsPointerDoubleClicked to Input (C++ and C#)
  - A way to add menu items from C#