iOS: move touch delay to settings

This commit is contained in:
Sergey Minakov 2020-09-28 22:24:35 +03:00
parent 894b0a010b
commit 1d9b6b01db
5 changed files with 18 additions and 5 deletions

View File

@ -555,6 +555,9 @@
<member name="input_devices/pointing/emulate_touch_from_mouse" type="bool" setter="" getter="" default="false"> <member name="input_devices/pointing/emulate_touch_from_mouse" type="bool" setter="" getter="" default="false">
If [code]true[/code], sends touch input events when clicking or dragging the mouse. If [code]true[/code], sends touch input events when clicking or dragging the mouse.
</member> </member>
<member name="input_devices/pointing/ios/touch_delay" type="float" setter="" getter="" default="0.150">
Default delay for touch events. This only affects iOS devices.
</member>
<member name="layer_names/2d_physics/layer_1" type="String" setter="" getter="" default="&quot;&quot;"> <member name="layer_names/2d_physics/layer_1" type="String" setter="" getter="" default="&quot;&quot;">
Optional name for the 2D physics layer 1. Optional name for the 2D physics layer 1.
</member> </member>

View File

@ -1369,6 +1369,7 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
"0,33200,1,or_greater")); // No negative numbers "0,33200,1,or_greater")); // No negative numbers
GLOBAL_DEF("display/window/ios/hide_home_indicator", true); GLOBAL_DEF("display/window/ios/hide_home_indicator", true);
GLOBAL_DEF("input_devices/pointing/ios/touch_delay", 0.150);
Engine::get_singleton()->set_frame_delay(frame_delay); Engine::get_singleton()->set_frame_delay(frame_delay);

View File

@ -18,7 +18,7 @@ iphone_lib = [
"godot_view.mm", "godot_view.mm",
"display_layer.mm", "display_layer.mm",
"godot_view_renderer.mm", "godot_view_renderer.mm",
"godot_view_gesture_recognizer.m", "godot_view_gesture_recognizer.mm",
] ]
env_ios = env.Clone() env_ios = env.Clone()

View File

@ -39,6 +39,8 @@
@interface GodotViewGestureRecognizer : UIGestureRecognizer @interface GodotViewGestureRecognizer : UIGestureRecognizer
@property(nonatomic, readonly, assign) NSTimeInterval delayTimeInterval;
- (instancetype)init; - (instancetype)init;
@end @end

View File

@ -1,5 +1,5 @@
/*************************************************************************/ /*************************************************************************/
/* godot_view_gesture_recognizer.m */ /* godot_view_gesture_recognizer.mm */
/*************************************************************************/ /*************************************************************************/
/* This file is part of: */ /* This file is part of: */
/* GODOT ENGINE */ /* GODOT ENGINE */
@ -30,8 +30,7 @@
#import "godot_view_gesture_recognizer.h" #import "godot_view_gesture_recognizer.h"
// Using same delay interval that is used for `UIScrollView` #include "core/project_settings.h"
const NSTimeInterval kGLGestureDelayInterval = 0.150;
// Minimum distance for touches to move to fire // Minimum distance for touches to move to fire
// a delay timer before scheduled time. // a delay timer before scheduled time.
@ -41,6 +40,12 @@ const CGFloat kGLGestureMovementDistance = 0.5;
@interface GodotViewGestureRecognizer () @interface GodotViewGestureRecognizer ()
@property(nonatomic, readwrite, assign) NSTimeInterval delayTimeInterval;
@end
@interface GodotViewGestureRecognizer ()
// Timer used to delay begin touch message. // Timer used to delay begin touch message.
// Should work as simple emulation of UIDelayedAction // Should work as simple emulation of UIDelayedAction
@property(strong, nonatomic) NSTimer *delayTimer; @property(strong, nonatomic) NSTimer *delayTimer;
@ -60,6 +65,8 @@ const CGFloat kGLGestureMovementDistance = 0.5;
self.delaysTouchesBegan = YES; self.delaysTouchesBegan = YES;
self.delaysTouchesEnded = YES; self.delaysTouchesEnded = YES;
self.delayTimeInterval = GLOBAL_GET("input_devices/pointing/ios/touch_delay");
return self; return self;
} }
@ -87,7 +94,7 @@ const CGFloat kGLGestureMovementDistance = 0.5;
self.delayedEvent = event; self.delayedEvent = event;
self.delayTimer = [NSTimer self.delayTimer = [NSTimer
scheduledTimerWithTimeInterval:kGLGestureDelayInterval scheduledTimerWithTimeInterval:self.delayTimeInterval
target:self target:self
selector:@selector(fireDelayedTouches:) selector:@selector(fireDelayedTouches:)
userInfo:nil userInfo:nil