| 
									
										
										
										
											2016-06-18 14:46:12 +02:00
										 |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2020-04-28 15:19:37 +02:00
										 |  |  | /*  input.h                                                              */ | 
					
						
							| 
									
										
										
										
											2016-06-18 14:46:12 +02:00
										 |  |  | /*************************************************************************/ | 
					
						
							|  |  |  | /*                       This file is part of:                           */ | 
					
						
							|  |  |  | /*                           GODOT ENGINE                                */ | 
					
						
							| 
									
										
										
										
											2017-08-27 14:16:55 +02:00
										 |  |  | /*                      https://godotengine.org                          */ | 
					
						
							| 
									
										
										
										
											2016-06-18 14:46:12 +02:00
										 |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2022-01-03 21:27:34 +01:00
										 |  |  | /* Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur.                 */ | 
					
						
							|  |  |  | /* Copyright (c) 2014-2022 Godot Engine contributors (cf. AUTHORS.md).   */ | 
					
						
							| 
									
										
										
										
											2016-06-18 14:46:12 +02:00
										 |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* Permission is hereby granted, free of charge, to any person obtaining */ | 
					
						
							|  |  |  | /* a copy of this software and associated documentation files (the       */ | 
					
						
							|  |  |  | /* "Software"), to deal in the Software without restriction, including   */ | 
					
						
							|  |  |  | /* without limitation the rights to use, copy, modify, merge, publish,   */ | 
					
						
							|  |  |  | /* distribute, sublicense, and/or sell copies of the Software, and to    */ | 
					
						
							|  |  |  | /* permit persons to whom the Software is furnished to do so, subject to */ | 
					
						
							|  |  |  | /* the following conditions:                                             */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* The above copyright notice and this permission notice shall be        */ | 
					
						
							|  |  |  | /* included in all copies or substantial portions of the Software.       */ | 
					
						
							|  |  |  | /*                                                                       */ | 
					
						
							|  |  |  | /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,       */ | 
					
						
							|  |  |  | /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF    */ | 
					
						
							|  |  |  | /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ | 
					
						
							|  |  |  | /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY  */ | 
					
						
							|  |  |  | /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,  */ | 
					
						
							|  |  |  | /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE     */ | 
					
						
							|  |  |  | /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.                */ | 
					
						
							|  |  |  | /*************************************************************************/ | 
					
						
							| 
									
										
										
										
											2018-01-05 00:50:27 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | #ifndef INPUT_H
 | 
					
						
							|  |  |  | #define INPUT_H
 | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 13:36:09 -03:00
										 |  |  | #include "core/input/input_event.h"
 | 
					
						
							| 
									
										
										
										
											2020-11-07 19:33:38 -03:00
										 |  |  | #include "core/object/object.h"
 | 
					
						
							| 
									
										
										
										
											2021-06-20 13:12:33 -04:00
										 |  |  | #include "core/os/keyboard.h"
 | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | #include "core/os/thread_safe.h"
 | 
					
						
							| 
									
										
										
										
											2022-05-19 17:00:06 +02:00
										 |  |  | #include "core/templates/rb_set.h"
 | 
					
						
							| 
									
										
										
										
											2022-06-03 18:29:10 +02:00
										 |  |  | #include "core/variant/typed_array.h"
 | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-28 15:19:37 +02:00
										 |  |  | class Input : public Object { | 
					
						
							|  |  |  | 	GDCLASS(Input, Object); | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 	_THREAD_SAFE_CLASS_ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-28 15:19:37 +02:00
										 |  |  | 	static Input *singleton; | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	enum MouseMode { | 
					
						
							|  |  |  | 		MOUSE_MODE_VISIBLE, | 
					
						
							|  |  |  | 		MOUSE_MODE_HIDDEN, | 
					
						
							|  |  |  | 		MOUSE_MODE_CAPTURED, | 
					
						
							| 
									
										
										
										
											2021-03-30 18:35:08 -04:00
										 |  |  | 		MOUSE_MODE_CONFINED, | 
					
						
							|  |  |  | 		MOUSE_MODE_CONFINED_HIDDEN, | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #undef CursorShape
 | 
					
						
							|  |  |  | 	enum CursorShape { | 
					
						
							|  |  |  | 		CURSOR_ARROW, | 
					
						
							|  |  |  | 		CURSOR_IBEAM, | 
					
						
							|  |  |  | 		CURSOR_POINTING_HAND, | 
					
						
							|  |  |  | 		CURSOR_CROSS, | 
					
						
							|  |  |  | 		CURSOR_WAIT, | 
					
						
							|  |  |  | 		CURSOR_BUSY, | 
					
						
							|  |  |  | 		CURSOR_DRAG, | 
					
						
							|  |  |  | 		CURSOR_CAN_DROP, | 
					
						
							|  |  |  | 		CURSOR_FORBIDDEN, | 
					
						
							|  |  |  | 		CURSOR_VSIZE, | 
					
						
							|  |  |  | 		CURSOR_HSIZE, | 
					
						
							|  |  |  | 		CURSOR_BDIAGSIZE, | 
					
						
							|  |  |  | 		CURSOR_FDIAGSIZE, | 
					
						
							|  |  |  | 		CURSOR_MOVE, | 
					
						
							|  |  |  | 		CURSOR_VSPLIT, | 
					
						
							|  |  |  | 		CURSOR_HSPLIT, | 
					
						
							|  |  |  | 		CURSOR_HELP, | 
					
						
							|  |  |  | 		CURSOR_MAX | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	enum { | 
					
						
							|  |  |  | 		JOYPADS_MAX = 16, | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 13:36:09 -03:00
										 |  |  | 	typedef void (*EventDispatchFunc)(const Ref<InputEvent> &p_event); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | private: | 
					
						
							| 
									
										
										
										
											2021-08-13 16:31:57 -05:00
										 |  |  | 	MouseButton mouse_button_mask = MouseButton::NONE; | 
					
						
							| 
									
										
										
										
											2016-09-01 18:58:52 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-13 15:04:37 +02:00
										 |  |  | 	RBSet<Key> physical_keys_pressed; | 
					
						
							|  |  |  | 	RBSet<Key> keys_pressed; | 
					
						
							|  |  |  | 	RBSet<JoyButton> joy_buttons_pressed; | 
					
						
							|  |  |  | 	RBMap<JoyAxis, float> _joy_axis; | 
					
						
							|  |  |  | 	//RBMap<StringName,int> custom_action_press;
 | 
					
						
							| 
									
										
										
										
											2016-11-23 23:32:44 +11:00
										 |  |  | 	Vector3 gravity; | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 	Vector3 accelerometer; | 
					
						
							| 
									
										
										
										
											2016-05-27 14:29:37 -03:00
										 |  |  | 	Vector3 magnetometer; | 
					
						
							| 
									
										
										
										
											2016-07-15 15:31:34 +08:00
										 |  |  | 	Vector3 gyroscope; | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 	Vector2 mouse_pos; | 
					
						
							| 
									
										
										
										
											2020-05-12 17:01:17 +02:00
										 |  |  | 	int64_t mouse_window = 0; | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-01 18:58:52 -03:00
										 |  |  | 	struct Action { | 
					
						
							| 
									
										
										
										
											2017-09-30 16:19:07 +02:00
										 |  |  | 		uint64_t physics_frame; | 
					
						
							| 
									
										
										
										
											2020-12-22 09:50:29 +00:00
										 |  |  | 		uint64_t process_frame; | 
					
						
							| 
									
										
										
										
											2016-09-01 18:58:52 -03:00
										 |  |  | 		bool pressed; | 
					
						
							| 
									
										
										
											
												Allow checking for exact matches with Action events.
Added additional param to action related methods to test for exactness.
If "p_exact_match" is true, then the action will only be "matched" if the provided input event *exactly* matches with the action event.
Before:
* Action Event = KEY_S
* Input Event = KEY_CONTROL + KEY_S
* Is Action Pressed = True
Now:
You can still do the above, however you can optionally check that the input is exactly what the action event is:
* Action Event = KEY_S
* Input Event = KEY_CONTROL + KEY_S
* p_exact_match = True
* Is Action Pressed = False
* If the Input Event was only KEY_S, then the result would be true.
Usage:
```gdscript
Input.is_action_pressed(action_name: String, exact_match: bool)
Input.is_action_pressed("my_action", true)
InputMap.event_is_action(p_event, "my_action", true)
func _input(event: InputEvent):
  event.is_action_pressed("my_action", false, true) # false = "allow_echo", true = "exact_match"
  event.is_action("my_action", true)
```
											
										 
											2020-12-14 00:22:42 +10:00
										 |  |  | 		bool exact; | 
					
						
							| 
									
										
										
										
											2018-02-21 22:06:34 +01:00
										 |  |  | 		float strength; | 
					
						
							| 
									
										
										
										
											2020-10-24 05:22:35 -04:00
										 |  |  | 		float raw_strength; | 
					
						
							| 
									
										
										
										
											2016-09-01 18:58:52 -03:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-05-13 15:04:37 +02:00
										 |  |  | 	HashMap<StringName, Action> action_state; | 
					
						
							| 
									
										
										
										
											2016-09-01 18:58:52 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-12 17:01:17 +02:00
										 |  |  | 	bool emulate_touch_from_mouse = false; | 
					
						
							|  |  |  | 	bool emulate_mouse_from_touch = false; | 
					
						
							| 
									
										
										
										
											2021-08-13 00:38:41 +02:00
										 |  |  | 	bool use_input_buffering = false; | 
					
						
							| 
									
										
										
										
											2022-07-03 12:16:16 +02:00
										 |  |  | 	bool use_accumulated_input = true; | 
					
						
							| 
									
										
										
										
											2018-02-24 03:04:30 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-12 17:01:17 +02:00
										 |  |  | 	int mouse_from_touch_index = -1; | 
					
						
							| 
									
										
										
										
											2016-06-15 07:25:35 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-22 14:37:25 +02:00
										 |  |  | 	struct VibrationInfo { | 
					
						
							|  |  |  | 		float weak_magnitude; | 
					
						
							|  |  |  | 		float strong_magnitude; | 
					
						
							|  |  |  | 		float duration; // Duration in seconds
 | 
					
						
							|  |  |  | 		uint64_t timestamp; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	HashMap<int, VibrationInfo> joy_vibration; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-29 13:22:22 +00:00
										 |  |  | 	struct VelocityTrack { | 
					
						
							| 
									
										
										
										
											2022-05-02 16:28:25 +02:00
										 |  |  | 		uint64_t last_tick = 0; | 
					
						
							| 
									
										
										
										
											2021-12-29 13:22:22 +00:00
										 |  |  | 		Vector2 velocity; | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 		Vector2 accum; | 
					
						
							| 
									
										
										
										
											2022-05-02 16:28:25 +02:00
										 |  |  | 		float accum_t = 0.0f; | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 		float min_ref_frame; | 
					
						
							|  |  |  | 		float max_ref_frame; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		void update(const Vector2 &p_delta_p); | 
					
						
							|  |  |  | 		void reset(); | 
					
						
							| 
									
										
										
										
											2021-12-29 13:22:22 +00:00
										 |  |  | 		VelocityTrack(); | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-08 17:05:51 -03:00
										 |  |  | 	struct Joypad { | 
					
						
							| 
									
										
										
										
											2015-12-18 19:15:32 +01:00
										 |  |  | 		StringName name; | 
					
						
							|  |  |  | 		StringName uid; | 
					
						
							| 
									
										
										
										
											2020-05-12 17:01:17 +02:00
										 |  |  | 		bool connected = false; | 
					
						
							| 
									
										
										
										
											2021-08-13 16:31:57 -05:00
										 |  |  | 		bool last_buttons[(size_t)JoyButton::MAX] = { false }; | 
					
						
							|  |  |  | 		float last_axis[(size_t)JoyAxis::MAX] = { 0.0f }; | 
					
						
							|  |  |  | 		HatMask last_hat = HatMask::CENTER; | 
					
						
							| 
									
										
										
										
											2020-05-12 17:01:17 +02:00
										 |  |  | 		int mapping = -1; | 
					
						
							|  |  |  | 		int hat_current = 0; | 
					
						
							| 
									
										
										
										
											2015-12-18 19:15:32 +01:00
										 |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2015-12-18 06:12:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-29 13:22:22 +00:00
										 |  |  | 	VelocityTrack mouse_velocity_track; | 
					
						
							| 
									
										
										
										
											2022-05-13 15:04:37 +02:00
										 |  |  | 	HashMap<int, VelocityTrack> touch_velocity_track; | 
					
						
							|  |  |  | 	HashMap<int, Joypad> joy_names; | 
					
						
							| 
									
										
										
										
											2020-05-12 17:01:17 +02:00
										 |  |  | 	int fallback_mapping = -1; | 
					
						
							| 
									
										
										
										
											2018-09-26 11:22:59 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-12 17:01:17 +02:00
										 |  |  | 	CursorShape default_shape = CURSOR_ARROW; | 
					
						
							| 
									
										
										
										
											2017-03-05 16:44:50 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-18 06:12:53 +01:00
										 |  |  | 	enum JoyType { | 
					
						
							|  |  |  | 		TYPE_BUTTON, | 
					
						
							|  |  |  | 		TYPE_AXIS, | 
					
						
							|  |  |  | 		TYPE_HAT, | 
					
						
							|  |  |  | 		TYPE_MAX, | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-23 10:16:09 +01:00
										 |  |  | 	enum JoyAxisRange { | 
					
						
							|  |  |  | 		NEGATIVE_HALF_AXIS = -1, | 
					
						
							|  |  |  | 		FULL_AXIS = 0, | 
					
						
							|  |  |  | 		POSITIVE_HALF_AXIS = 1 | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-18 06:12:53 +01:00
										 |  |  | 	struct JoyEvent { | 
					
						
							| 
									
										
										
										
											2022-04-05 13:40:26 +03:00
										 |  |  | 		int type = TYPE_MAX; | 
					
						
							|  |  |  | 		int index = -1; // Can be either JoyAxis or JoyButton.
 | 
					
						
							|  |  |  | 		float value = 0.f; | 
					
						
							| 
									
										
										
										
											2015-12-18 06:12:53 +01:00
										 |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-23 13:01:36 +01:00
										 |  |  | 	struct JoyBinding { | 
					
						
							| 
									
										
										
										
											2020-04-23 10:16:09 +01:00
										 |  |  | 		JoyType inputType; | 
					
						
							|  |  |  | 		union { | 
					
						
							| 
									
										
										
										
											2021-03-25 16:56:12 -04:00
										 |  |  | 			JoyButton button; | 
					
						
							| 
									
										
										
										
											2020-04-23 10:16:09 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			struct { | 
					
						
							| 
									
										
										
										
											2021-03-25 16:56:12 -04:00
										 |  |  | 				JoyAxis axis; | 
					
						
							| 
									
										
										
										
											2020-04-23 10:16:09 +01:00
										 |  |  | 				JoyAxisRange range; | 
					
						
							| 
									
										
										
										
											2020-05-04 15:42:38 +01:00
										 |  |  | 				bool invert; | 
					
						
							| 
									
										
										
										
											2020-04-23 10:16:09 +01:00
										 |  |  | 			} axis; | 
					
						
							| 
									
										
										
										
											2015-12-18 06:12:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-23 10:16:09 +01:00
										 |  |  | 			struct { | 
					
						
							| 
									
										
										
										
											2021-03-25 16:56:12 -04:00
										 |  |  | 				HatDir hat; | 
					
						
							| 
									
										
										
										
											2020-04-23 10:16:09 +01:00
										 |  |  | 				HatMask hat_mask; | 
					
						
							|  |  |  | 			} hat; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		} input; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		JoyType outputType; | 
					
						
							|  |  |  | 		union { | 
					
						
							| 
									
										
										
										
											2020-05-13 18:27:34 -04:00
										 |  |  | 			JoyButton button; | 
					
						
							| 
									
										
										
										
											2020-04-23 10:16:09 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			struct { | 
					
						
							| 
									
										
										
										
											2020-05-13 18:27:34 -04:00
										 |  |  | 				JoyAxis axis; | 
					
						
							| 
									
										
										
										
											2020-04-23 10:16:09 +01:00
										 |  |  | 				JoyAxisRange range; | 
					
						
							|  |  |  | 			} axis; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		} output; | 
					
						
							|  |  |  | 	}; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	struct JoyDeviceMapping { | 
					
						
							| 
									
										
										
										
											2015-12-18 19:15:32 +01:00
										 |  |  | 		String uid; | 
					
						
							| 
									
										
										
										
											2016-02-29 16:48:19 +01:00
										 |  |  | 		String name; | 
					
						
							| 
									
										
										
										
											2020-04-23 13:01:36 +01:00
										 |  |  | 		Vector<JoyBinding> bindings; | 
					
						
							| 
									
										
										
										
											2015-12-18 19:15:32 +01:00
										 |  |  | 	}; | 
					
						
							| 
									
										
										
										
											2015-12-18 06:12:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-18 19:15:32 +01:00
										 |  |  | 	Vector<JoyDeviceMapping> map_db; | 
					
						
							| 
									
										
										
										
											2015-12-18 06:12:53 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-25 16:56:12 -04:00
										 |  |  | 	JoyEvent _get_mapped_button_event(const JoyDeviceMapping &mapping, JoyButton p_button); | 
					
						
							|  |  |  | 	JoyEvent _get_mapped_axis_event(const JoyDeviceMapping &mapping, JoyAxis p_axis, float p_value); | 
					
						
							| 
									
										
										
										
											2021-08-13 16:31:57 -05:00
										 |  |  | 	void _get_mapped_hat_events(const JoyDeviceMapping &mapping, HatDir p_hat, JoyEvent r_events[(size_t)HatDir::MAX]); | 
					
						
							| 
									
										
										
										
											2020-05-13 18:27:34 -04:00
										 |  |  | 	JoyButton _get_output_button(String output); | 
					
						
							|  |  |  | 	JoyAxis _get_output_axis(String output); | 
					
						
							| 
									
										
										
										
											2021-03-25 16:56:12 -04:00
										 |  |  | 	void _button_event(int p_device, JoyButton p_index, bool p_pressed); | 
					
						
							|  |  |  | 	void _axis_event(int p_device, JoyAxis p_axis, float p_value); | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-24 03:04:30 +01:00
										 |  |  | 	void _parse_input_event_impl(const Ref<InputEvent> &p_event, bool p_is_emulated); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-13 00:38:41 +02:00
										 |  |  | 	List<Ref<InputEvent>> buffered_events; | 
					
						
							| 
									
										
										
										
											2020-05-12 17:01:17 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-03 10:36:29 -03:00
										 |  |  | 	friend class DisplayServer; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	static void (*set_mouse_mode_func)(MouseMode); | 
					
						
							|  |  |  | 	static MouseMode (*get_mouse_mode_func)(); | 
					
						
							| 
									
										
										
										
											2022-03-27 11:17:36 +02:00
										 |  |  | 	static void (*warp_mouse_func)(const Vector2 &p_position); | 
					
						
							| 
									
										
										
										
											2020-03-03 10:36:29 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	static CursorShape (*get_current_cursor_shape_func)(); | 
					
						
							| 
									
										
										
										
											2022-05-03 01:43:50 +02:00
										 |  |  | 	static void (*set_custom_mouse_cursor_func)(const Ref<Resource> &, CursorShape, const Vector2 &); | 
					
						
							| 
									
										
										
										
											2019-03-03 19:52:18 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-12 17:01:17 +02:00
										 |  |  | 	EventDispatchFunc event_dispatch_function = nullptr; | 
					
						
							| 
									
										
										
										
											2020-03-04 13:36:09 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | protected: | 
					
						
							|  |  |  | 	static void _bind_methods(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | public: | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 	void set_mouse_mode(MouseMode p_mode); | 
					
						
							|  |  |  | 	MouseMode get_mouse_mode() const; | 
					
						
							| 
									
										
										
										
											2020-07-10 11:34:39 +01:00
										 |  |  | 	void get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const override; | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-28 15:19:37 +02:00
										 |  |  | 	static Input *get_singleton(); | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-27 02:56:29 +02:00
										 |  |  | 	bool is_anything_pressed() const; | 
					
						
							| 
									
										
										
										
											2021-06-20 13:12:33 -04:00
										 |  |  | 	bool is_key_pressed(Key p_keycode) const; | 
					
						
							| 
									
										
										
										
											2021-11-23 11:14:19 +02:00
										 |  |  | 	bool is_physical_key_pressed(Key p_keycode) const; | 
					
						
							| 
									
										
										
										
											2021-03-25 16:56:12 -04:00
										 |  |  | 	bool is_mouse_button_pressed(MouseButton p_button) const; | 
					
						
							|  |  |  | 	bool is_joy_button_pressed(int p_device, JoyButton p_button) const; | 
					
						
							| 
									
										
										
											
												Allow checking for exact matches with Action events.
Added additional param to action related methods to test for exactness.
If "p_exact_match" is true, then the action will only be "matched" if the provided input event *exactly* matches with the action event.
Before:
* Action Event = KEY_S
* Input Event = KEY_CONTROL + KEY_S
* Is Action Pressed = True
Now:
You can still do the above, however you can optionally check that the input is exactly what the action event is:
* Action Event = KEY_S
* Input Event = KEY_CONTROL + KEY_S
* p_exact_match = True
* Is Action Pressed = False
* If the Input Event was only KEY_S, then the result would be true.
Usage:
```gdscript
Input.is_action_pressed(action_name: String, exact_match: bool)
Input.is_action_pressed("my_action", true)
InputMap.event_is_action(p_event, "my_action", true)
func _input(event: InputEvent):
  event.is_action_pressed("my_action", false, true) # false = "allow_echo", true = "exact_match"
  event.is_action("my_action", true)
```
											
										 
											2020-12-14 00:22:42 +10:00
										 |  |  | 	bool is_action_pressed(const StringName &p_action, bool p_exact = false) const; | 
					
						
							|  |  |  | 	bool is_action_just_pressed(const StringName &p_action, bool p_exact = false) const; | 
					
						
							|  |  |  | 	bool is_action_just_released(const StringName &p_action, bool p_exact = false) const; | 
					
						
							|  |  |  | 	float get_action_strength(const StringName &p_action, bool p_exact = false) const; | 
					
						
							|  |  |  | 	float get_action_raw_strength(const StringName &p_action, bool p_exact = false) const; | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-10 01:21:13 -05:00
										 |  |  | 	float get_axis(const StringName &p_negative_action, const StringName &p_positive_action) const; | 
					
						
							|  |  |  | 	Vector2 get_vector(const StringName &p_negative_x, const StringName &p_positive_x, const StringName &p_negative_y, const StringName &p_positive_y, float p_deadzone = -1.0f) const; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-03-25 16:56:12 -04:00
										 |  |  | 	float get_joy_axis(int p_device, JoyAxis p_axis) const; | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 	String get_joy_name(int p_idx); | 
					
						
							| 
									
										
										
										
											2022-06-03 18:29:10 +02:00
										 |  |  | 	TypedArray<int> get_connected_joypads(); | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 	Vector2 get_joy_vibration_strength(int p_device); | 
					
						
							|  |  |  | 	float get_joy_vibration_duration(int p_device); | 
					
						
							|  |  |  | 	uint64_t get_joy_vibration_timestamp(int p_device); | 
					
						
							| 
									
										
										
										
											2015-12-18 06:12:53 +01:00
										 |  |  | 	void joy_connection_changed(int p_idx, bool p_connected, String p_name, String p_guid = ""); | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 	Vector3 get_gravity() const; | 
					
						
							|  |  |  | 	Vector3 get_accelerometer() const; | 
					
						
							|  |  |  | 	Vector3 get_magnetometer() const; | 
					
						
							|  |  |  | 	Vector3 get_gyroscope() const; | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 	Point2 get_mouse_position() const; | 
					
						
							| 
									
										
										
										
											2022-01-13 18:13:50 +00:00
										 |  |  | 	Vector2 get_last_mouse_velocity(); | 
					
						
							| 
									
										
										
										
											2021-08-13 16:31:57 -05:00
										 |  |  | 	MouseButton get_mouse_button_mask() const; | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-03-27 11:17:36 +02:00
										 |  |  | 	void warp_mouse(const Vector2 &p_position); | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 	Point2i warp_mouse_motion(const Ref<InputEventMouseMotion> &p_motion, const Rect2 &p_rect); | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 	void parse_input_event(const Ref<InputEvent> &p_event); | 
					
						
							| 
									
										
										
										
											2017-03-19 09:20:20 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-23 23:32:44 +11:00
										 |  |  | 	void set_gravity(const Vector3 &p_gravity); | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 	void set_accelerometer(const Vector3 &p_accel); | 
					
						
							| 
									
										
										
										
											2016-05-27 14:29:37 -03:00
										 |  |  | 	void set_magnetometer(const Vector3 &p_magnetometer); | 
					
						
							| 
									
										
										
										
											2016-07-15 15:31:34 +08:00
										 |  |  | 	void set_gyroscope(const Vector3 &p_gyroscope); | 
					
						
							| 
									
										
										
										
											2021-03-25 16:56:12 -04:00
										 |  |  | 	void set_joy_axis(int p_device, JoyAxis p_axis, float p_value); | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 	void start_joy_vibration(int p_device, float p_weak_magnitude, float p_strong_magnitude, float p_duration = 0); | 
					
						
							|  |  |  | 	void stop_joy_vibration(int p_device); | 
					
						
							|  |  |  | 	void vibrate_handheld(int p_duration_ms = 500); | 
					
						
							| 
									
										
										
										
											2016-06-15 07:25:35 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-29 11:29:38 -04:00
										 |  |  | 	void set_mouse_position(const Point2 &p_posf); | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-09 21:32:32 +00:00
										 |  |  | 	void action_press(const StringName &p_action, float p_strength = 1.f); | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 	void action_release(const StringName &p_action); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-24 03:04:30 +01:00
										 |  |  | 	void set_emulate_touch_from_mouse(bool p_emulate); | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 	bool is_emulating_touch_from_mouse() const; | 
					
						
							| 
									
										
										
										
											2018-02-24 03:04:30 +01:00
										 |  |  | 	void ensure_touch_mouse_raised(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	void set_emulate_mouse_from_touch(bool p_emulate); | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 	bool is_emulating_mouse_from_touch() const; | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 	CursorShape get_default_cursor_shape() const; | 
					
						
							|  |  |  | 	void set_default_cursor_shape(CursorShape p_shape); | 
					
						
							|  |  |  | 	CursorShape get_current_cursor_shape() const; | 
					
						
							| 
									
										
										
										
											2022-05-03 01:43:50 +02:00
										 |  |  | 	void set_custom_mouse_cursor(const Ref<Resource> &p_cursor, CursorShape p_shape = Input::CURSOR_ARROW, const Vector2 &p_hotspot = Vector2()); | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-18 06:12:53 +01:00
										 |  |  | 	void parse_mapping(String p_mapping); | 
					
						
							| 
									
										
										
										
											2021-03-25 16:56:12 -04:00
										 |  |  | 	void joy_button(int p_device, JoyButton p_button, bool p_pressed); | 
					
						
							| 
									
										
										
										
											2021-12-25 09:29:08 +00:00
										 |  |  | 	void joy_axis(int p_device, JoyAxis p_axis, float p_value); | 
					
						
							| 
									
										
										
										
											2021-08-13 16:31:57 -05:00
										 |  |  | 	void joy_hat(int p_device, HatMask p_val); | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 	void add_joy_mapping(String p_mapping, bool p_update_existing = false); | 
					
						
							|  |  |  | 	void remove_joy_mapping(String p_guid); | 
					
						
							| 
									
										
										
										
											2016-01-08 00:40:41 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-21 17:02:49 +01:00
										 |  |  | 	int get_unused_joy_id(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-03 10:36:29 -03:00
										 |  |  | 	bool is_joy_known(int p_device); | 
					
						
							|  |  |  | 	String get_joy_guid(int p_device) const; | 
					
						
							| 
									
										
										
										
											2016-01-27 12:18:34 +01:00
										 |  |  | 	void set_fallback_mapping(String p_guid); | 
					
						
							| 
									
										
										
										
											2019-03-03 19:52:18 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-08-13 00:38:41 +02:00
										 |  |  | 	void flush_buffered_events(); | 
					
						
							|  |  |  | 	bool is_using_input_buffering(); | 
					
						
							|  |  |  | 	void set_use_input_buffering(bool p_enable); | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 	void set_use_accumulated_input(bool p_enable); | 
					
						
							| 
									
										
										
										
											2022-06-02 22:21:25 -05:00
										 |  |  | 	bool is_using_accumulated_input(); | 
					
						
							| 
									
										
										
										
											2019-03-03 19:52:18 -03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 	void release_pressed_events(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-04 13:36:09 -03:00
										 |  |  | 	void set_event_dispatch_function(EventDispatchFunc p_function); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-28 15:19:37 +02:00
										 |  |  | 	Input(); | 
					
						
							| 
									
										
										
										
											2022-04-22 17:39:12 +01:00
										 |  |  | 	~Input(); | 
					
						
							| 
									
										
										
										
											2015-09-24 18:06:15 -03:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-28 15:19:37 +02:00
										 |  |  | VARIANT_ENUM_CAST(Input::MouseMode); | 
					
						
							|  |  |  | VARIANT_ENUM_CAST(Input::CursorShape); | 
					
						
							| 
									
										
										
										
											2020-03-01 19:14:37 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | #endif // INPUT_H
 |