From 1a71e040c033759305249b20f0ae0226bef37fdc Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 1 Jun 2018 21:17:47 -0700 Subject: [PATCH] Fix deadzones to dynamically detect controls on screen and add a deadzone for the analog sticks --- Limelight/Input/OnScreenControls.m | 56 ++++++++++++++++++++---------- 1 file changed, 37 insertions(+), 19 deletions(-) diff --git a/Limelight/Input/OnScreenControls.m b/Limelight/Input/OnScreenControls.m index c02729f9..b32e4e86 100644 --- a/Limelight/Input/OnScreenControls.m +++ b/Limelight/Input/OnScreenControls.m @@ -836,26 +836,31 @@ static float L3_Y; } - (BOOL) isInDeadZone:(UITouch*) touch { - switch (_level) { - case OnScreenControlsLevelFull: - return [self isDpadDeadZone:touch] - || [self isAbxyDeadZone:touch] - || [self isTriggerDeadZone:touch] - || [self isBumperDeadZone:touch] - || [self isStartSelectDeadZone:touch]; - case OnScreenControlsLevelSimple: - return [self isTriggerDeadZone:touch] - || [self isStartSelectDeadZone:touch] - || [self isL3R3DeadZone:touch]; - case OnScreenControlsLevelAutoGCExtendedGamepad: - return [self isL3R3DeadZone:touch] - || [self isStartSelectDeadZone:touch]; - case OnScreenControlsLevelAutoGCGamepad: - return [self isTriggerDeadZone:touch] - || [self isStartSelectDeadZone:touch]; - default: - return false; + // Dynamically evaluate deadzones based on the controls + // on screen at the time + if (_leftButton.superlayer != nil && [self isDpadDeadZone:touch]) { + return true; } + else if (_aButton.superlayer != nil && [self isAbxyDeadZone:touch]) { + return true; + } + else if (_l2Button.superlayer != nil && [self isTriggerDeadZone:touch]) { + return true; + } + else if (_l1Button.superlayer != nil && [self isBumperDeadZone:touch]) { + return true; + } + else if (_startButton.superlayer != nil && [self isStartSelectDeadZone:touch]) { + return true; + } + else if (_l3Button.superlayer != nil && [self isL3R3DeadZone:touch]) { + return true; + } + else if (_leftStickBackground.superlayer != nil && [self isStickDeadZone:touch]) { + return true; + } + + return false; } - (BOOL) isDpadDeadZone:(UITouch*) touch { @@ -926,6 +931,19 @@ static float L3_Y; endY:_view.frame.origin.y + _view.frame.size.height]; } +- (BOOL) isStickDeadZone:(UITouch*) touch { + return [self isDeadZone:touch + startX:_leftStickBackground.frame.origin.x - 15 + startY:_leftStickBackground.frame.origin.y - 15 + endX:_leftStickBackground.frame.origin.x + _leftStickBackground.frame.size.width + 15 + endY:_view.frame.origin.y + _view.frame.size.height] + || [self isDeadZone:touch + startX:_rightStickBackground.frame.origin.x - 15 + startY:_rightStickBackground.frame.origin.y - 15 + endX:_rightStickBackground.frame.origin.x + _rightStickBackground.frame.size.width + 15 + endY:_view.frame.origin.y + _view.frame.size.height]; +} + - (BOOL) isDeadZone:(UITouch*) touch startX:(float)deadZoneStartX startY:(float)deadZoneStartY endX:(float)deadZoneEndX endY:(float)deadZoneEndY { deadZoneStartX -= DEAD_ZONE_PADDING; deadZoneStartY -= DEAD_ZONE_PADDING;