controller report issue fixes

This commit is contained in:
True Zhuanjia committed 2026-05-19 11:23:30 +08:00
1 parent 09981df37e
commit 535d6009ad
4 files changed
+25 -12

No files matched your search

+18 -10
View File
@@ -632,14 +632,14 @@ import ObjectiveC.runtime
self.sensitivityYMax = 16.0 self.sensitivityYMax = 16.0
} }
self.hasYawFactor = self.motionControlButtonString == "GYRO" && (oscProfile.mapGyroTo == MapGyroTo.mapGyroToMouse || oscProfile.yawPitchToRightStick) self.hasYawFactor = self.motionControlButtonString == "GYRO" && (oscProfile.mapGyroTo == .mapGyroToMouse || oscProfile.yawPitchToRightStick)
self.hasPitchFactor = self.hasYawFactor self.hasPitchFactor = self.hasYawFactor
self.yawFactorMin = 0 self.yawFactorMin = 0
self.yawFactorMax = 1.0 self.yawFactorMax = 1.0
self.pitchFactorMin = 0 self.pitchFactorMin = 0
self.pitchFactorMax = 1.0 self.pitchFactorMax = 1.0
self.hasRollFactor = self.motionControlButtonString == "GYRO" && (oscProfile.mapGyroTo == MapGyroTo.mapGyroToControllerStick && oscProfile.rollToLeftStick) self.hasRollFactor = self.motionControlButtonString == "GYRO" && (oscProfile.mapGyroTo == .mapGyroToControllerStick && oscProfile.rollToLeftStick)
self.hasAutoTap = self.widgetType == WidgetTypeEnum.button && self.functionalButtonString == "" && self.motionControlButtonString == "" self.hasAutoTap = self.widgetType == WidgetTypeEnum.button && self.functionalButtonString == "" && self.motionControlButtonString == ""
self.isMousePadWithButtonActions = CommandManager.mousePadWithButtonActions.contains(self.touchPadString) && widgetType == WidgetTypeEnum.touchPad self.isMousePadWithButtonActions = CommandManager.mousePadWithButtonActions.contains(self.touchPadString) && widgetType == WidgetTypeEnum.touchPad
@@ -1808,7 +1808,7 @@ import ObjectiveC.runtime
let targetX = self.weightedTouchInputToStickOffset(input: weightedTouchX) let targetX = self.weightedTouchInputToStickOffset(input: weightedTouchX)
let targetY = -self.weightedTouchInputToStickOffset(input: weightedTouchY) let targetY = -self.weightedTouchInputToStickOffset(input: weightedTouchY)
let mixRightStickInputToGyro = (oscProfile.mapGyroTo == MapGyroTo.mapGyroToControllerStick let mixRightStickInputToGyro = (oscProfile.mapGyroTo == .mapGyroToControllerStick
&& oscProfile.yawPitchToRightStick) && oscProfile.yawPitchToRightStick)
if !mixRightStickInputToGyro || (self.motionHandler?.gyroMixInputStarted() != true) { if !mixRightStickInputToGyro || (self.motionHandler?.gyroMixInputStarted() != true) {
@@ -1816,13 +1816,14 @@ import ObjectiveC.runtime
self.onScreenControls?.sendRightStickTouchPadEvent(stickOffsetVector.dx, stickOffsetVector.dy) self.onScreenControls?.sendRightStickTouchPadEvent(stickOffsetVector.dx, stickOffsetVector.dy)
} }
self.motionHandler?.mixOnScreenRightStickAndGyroInput(x: targetX, y: targetY) self.motionHandler?.mixOnScreenRightStickAndGyroInput(x: targetX, y: targetY)
if !OnScreenWidgetView.gamepadArrivalReported {OnScreenWidgetView.gamepadArrivalReported = true}
} }
private func sendLeftStickTouchPadEvent(weightedTouchX:CGFloat, weightedTouchY:CGFloat, circulate:Bool=false){ private func sendLeftStickTouchPadEvent(weightedTouchX:CGFloat, weightedTouchY:CGFloat, circulate:Bool=false){
let targetX = self.weightedTouchInputToStickOffset(input: weightedTouchX) let targetX = self.weightedTouchInputToStickOffset(input: weightedTouchX)
let targetY = -self.weightedTouchInputToStickOffset(input: weightedTouchY) let targetY = -self.weightedTouchInputToStickOffset(input: weightedTouchY)
let mixLeftStickInputToGyro = (oscProfile.mapGyroTo == MapGyroTo.mapGyroToControllerStick let mixLeftStickInputToGyro = (oscProfile.mapGyroTo == .mapGyroToControllerStick
&& oscProfile.rollToLeftStick) && oscProfile.rollToLeftStick)
if !mixLeftStickInputToGyro || (self.motionHandler?.gyroMixInputStarted() != true) { if !mixLeftStickInputToGyro || (self.motionHandler?.gyroMixInputStarted() != true) {
@@ -1830,6 +1831,7 @@ import ObjectiveC.runtime
self.onScreenControls?.sendLeftStickTouchPadEvent(stickOffsetVector.dx, stickOffsetVector.dy) self.onScreenControls?.sendLeftStickTouchPadEvent(stickOffsetVector.dx, stickOffsetVector.dy)
} }
self.motionHandler?.mixOnScreenLeftStickAndGyroInput(x: targetX, y: targetY) self.motionHandler?.mixOnScreenLeftStickAndGyroInput(x: targetX, y: targetY)
if !OnScreenWidgetView.gamepadArrivalReported {OnScreenWidgetView.gamepadArrivalReported = true}
} }
private func sendLeftTriggerTouchPadEvent(inputY: CGFloat){ private func sendLeftTriggerTouchPadEvent(inputY: CGFloat){
@@ -1872,6 +1874,7 @@ import ObjectiveC.runtime
for comboString in comboStrings { for comboString in comboStrings {
if CommandManager.oscButtonMappings.keys.contains(comboString) { if CommandManager.oscButtonMappings.keys.contains(comboString) {
self.sendOscButtonDownEvent(oscString: comboString) self.sendOscButtonDownEvent(oscString: comboString)
if !OnScreenWidgetView.gamepadArrivalReported {OnScreenWidgetView.gamepadArrivalReported = true}
} }
if CommandManager.keyboardButtonMappings.keys.contains(comboString) { if CommandManager.keyboardButtonMappings.keys.contains(comboString) {
LiSendKeyboardEvent(CommandManager.keyboardButtonMappings[comboString]!,Int8(KEY_ACTION_DOWN), 0) LiSendKeyboardEvent(CommandManager.keyboardButtonMappings[comboString]!,Int8(KEY_ACTION_DOWN), 0)
@@ -2642,8 +2645,10 @@ import ObjectiveC.runtime
switch self.motionControlButtonString { switch self.motionControlButtonString {
case "GYRO": case "GYRO":
self.motionHandler?.startGyroByOnScreenButton(self, yawFactor: yawFactor, pitchFactor: pitchFactor, rollFactor: rollFactor) self.motionHandler?.startGyroByOnScreenButton(self, yawFactor: yawFactor, pitchFactor: pitchFactor, rollFactor: rollFactor)
if !OnScreenWidgetView.gamepadArrivalReported {OnScreenWidgetView.gamepadArrivalReported = oscProfile.mapGyroTo == .mapGyroToControllerStick}
case "GYROPAUSE": case "GYROPAUSE":
self.motionHandler?.stopGyroUpdate(interruptNoneGyroInput:false) self.motionHandler?.stopGyroUpdate(interruptNoneGyroInput:false)
if !OnScreenWidgetView.gamepadArrivalReported {OnScreenWidgetView.gamepadArrivalReported = oscProfile.mapGyroTo == .mapGyroToControllerStick}
break break
case "ACCEL": case "ACCEL":
break break
@@ -2835,7 +2840,7 @@ import ObjectiveC.runtime
private func clearRightStickTouchPadFlag(){ private func clearRightStickTouchPadFlag(){
if !hasInertia {stickOffsetVector = .zero} if !hasInertia {stickOffsetVector = .zero}
let mixRightStickInputToGyro = (oscProfile.mapGyroTo == MapGyroTo.mapGyroToControllerStick let mixRightStickInputToGyro = (oscProfile.mapGyroTo == .mapGyroToControllerStick
&& oscProfile.yawPitchToRightStick) && oscProfile.yawPitchToRightStick)
if !mixRightStickInputToGyro || self.motionHandler?.gyroMixInputStarted() != true { if !mixRightStickInputToGyro || self.motionHandler?.gyroMixInputStarted() != true {
self.onScreenControls?.clearRightStickTouchPadFlag() self.onScreenControls?.clearRightStickTouchPadFlag()
@@ -2845,7 +2850,7 @@ import ObjectiveC.runtime
private func clearLeftStickTouchPadFlag(){ private func clearLeftStickTouchPadFlag(){
if !hasInertia {stickOffsetVector = .zero} if !hasInertia {stickOffsetVector = .zero}
let mixLeftStickInputToGyro = (oscProfile.mapGyroTo == MapGyroTo.mapGyroToControllerStick let mixLeftStickInputToGyro = (oscProfile.mapGyroTo == .mapGyroToControllerStick
&& oscProfile.rollToLeftStick) && oscProfile.rollToLeftStick)
if !mixLeftStickInputToGyro || self.motionHandler?.gyroMixInputStarted() != true { if !mixLeftStickInputToGyro || self.motionHandler?.gyroMixInputStarted() != true {
self.onScreenControls?.clearLeftStickTouchPadFlag() self.onScreenControls?.clearLeftStickTouchPadFlag()
@@ -3806,6 +3811,7 @@ import ObjectiveC.runtime
return OnScreenWidgetView.mapping.keys.max() ?? -1 return OnScreenWidgetView.mapping.keys.max() ?? -1
} }
@objc static var gamepadArrivalReported: Bool = false
override func didMoveToSuperview() { override func didMoveToSuperview() {
super.didMoveToSuperview() super.didMoveToSuperview()
OnScreenWidgetView.installAutoDockIfNeeded() OnScreenWidgetView.installAutoDockIfNeeded()
@@ -3817,14 +3823,14 @@ import ObjectiveC.runtime
label.alpha = 1 label.alpha = 1
autoDockRestoreOriginalAlpha() autoDockRestoreOriginalAlpha()
if self.motionControlButtonString == "GYRO" { if self.motionControlButtonString == "GYRO" {
self.motionHandler?.stopGyroUpdate(interruptNoneGyroInput: true) if OnScreenWidgetView.gamepadArrivalReported {self.motionHandler?.stopGyroUpdate(interruptNoneGyroInput: true)}
self.motionHandler?.gyroStarter = nil self.motionHandler?.gyroStarter = nil
} }
if self.motionControlButtonString == "ACCEL" {} if self.motionControlButtonString == "ACCEL" {}
if self.motionControlButtonString == "MOTION" {} if self.motionControlButtonString == "MOTION" {}
if self.widgetType == WidgetTypeEnum.button && !OnScreenWidgetView.editMode { if self.widgetType == WidgetTypeEnum.button && !OnScreenWidgetView.editMode {
self.sendComboButtonsUpEvent(comboStrings: self.comboButtonStrings) if OnScreenWidgetView.gamepadArrivalReported {self.sendComboButtonsUpEvent(comboStrings: self.comboButtonStrings)}
self.functionalWidgetDelegate?.alterAbsTouchDragWith(mouseButton:BUTTON_LEFT) self.functionalWidgetDelegate?.alterAbsTouchDragWith(mouseButton:BUTTON_LEFT)
} }
buttonDownVisualEffectLayer.removeFromSuperlayer() buttonDownVisualEffectLayer.removeFromSuperlayer()
@@ -3843,8 +3849,10 @@ import ObjectiveC.runtime
stickWheelLayer.removeFromSuperlayer() stickWheelLayer.removeFromSuperlayer()
stickWheelLayerSmall.removeFromSuperlayer() stickWheelLayerSmall.removeFromSuperlayer()
self.inertialScroller.timer?.clean() self.inertialScroller.timer?.clean()
self.clearLeftStickTouchPadFlag() if OnScreenWidgetView.gamepadArrivalReported {
self.clearRightStickTouchPadFlag() self.clearLeftStickTouchPadFlag()
self.clearRightStickTouchPadFlag()
}
self.autoTapTimer?.clean() self.autoTapTimer?.clean()
self.onScreenControls = nil self.onScreenControls = nil
} }
@@ -811,7 +811,7 @@ final class LayoutOnScreenControlsViewController: UIViewController, OnScreenWidg
private func refreshPanelForSelectedWidget(_ widgetView: OnScreenWidgetView) { private func refreshPanelForSelectedWidget(_ widgetView: OnScreenWidgetView) {
// hideStickIndicators() // hideStickIndicators()
clearSickInput() if OnScreenWidgetView.gamepadArrivalReported {clearSickInput()}
enableCommonWidgetTools() enableCommonWidgetTools()
widgetViewSelected = true widgetViewSelected = true
controllerLayerSelected = false controllerLayerSelected = false
@@ -489,7 +489,7 @@ BOOL isCustomResolution(int resolutionSelected) {
if(PencilHandler.shared) [PencilHandler.shared setupPressureLUTWithProfile:oscProfile]; if(PencilHandler.shared) [PencilHandler.shared setupPressureLUTWithProfile:oscProfile];
} }
if(!leftStickMinOffsetSliderNotMoved || !rightStickMinOffsetSliderNotMoved){ if(!leftStickMinOffsetSliderNotMoved || !rightStickMinOffsetSliderNotMoved || OnScreenWidgetView.gamepadArrivalReported){
if(OnScreenControls.shared){ if(OnScreenControls.shared){
[OnScreenControls.shared clearLeftStickTouchPadFlag]; [OnScreenControls.shared clearLeftStickTouchPadFlag];
[OnScreenControls.shared clearRightStickTouchPadFlag]; [OnScreenControls.shared clearRightStickTouchPadFlag];
@@ -2972,18 +2972,21 @@ BOOL isCustomResolution(int resolutionSelected) {
[self findDynamicLabelFromStack:_gyroToStickMinOffsetStack].text = [NSString stringWithFormat:@" %d ", (int16_t)sender.value]; [self findDynamicLabelFromStack:_gyroToStickMinOffsetStack].text = [NSString stringWithFormat:@" %d ", (int16_t)sender.value];
if(settingsViewJustExpanded) return; if(settingsViewJustExpanded) return;
LiSendControllerEvent(0, 0, 0, _rollToLeftStickSwitch.isOn?sender.value:0, 0, _yawPitchToRightStickSwitch.isOn?sender.value:0, 0); LiSendControllerEvent(0, 0, 0, _rollToLeftStickSwitch.isOn?sender.value:0, 0, _yawPitchToRightStickSwitch.isOn?sender.value:0, 0);
OnScreenWidgetView.gamepadArrivalReported = true;
} }
- (void)leftStickMinOffsetSliderMoved:(UISlider* )sender{ - (void)leftStickMinOffsetSliderMoved:(UISlider* )sender{
[self findDynamicLabelFromStack:_leftStickMinOffsetStack].text = [NSString stringWithFormat:@" %d ", (int16_t)sender.value]; [self findDynamicLabelFromStack:_leftStickMinOffsetStack].text = [NSString stringWithFormat:@" %d ", (int16_t)sender.value];
if(settingsViewJustExpanded) return; if(settingsViewJustExpanded) return;
LiSendControllerEvent(0, 0, 0, sender.value, 0, 0, 0); LiSendControllerEvent(0, 0, 0, sender.value, 0, 0, 0);
OnScreenWidgetView.gamepadArrivalReported = true;
} }
- (void)rightStickMinOffsetSliderMoved:(UISlider* )sender{ - (void)rightStickMinOffsetSliderMoved:(UISlider* )sender{
[self findDynamicLabelFromStack:_rightStickMinOffsetStack].text = [NSString stringWithFormat:@" %d ", (int16_t)sender.value]; [self findDynamicLabelFromStack:_rightStickMinOffsetStack].text = [NSString stringWithFormat:@" %d ", (int16_t)sender.value];
if(settingsViewJustExpanded) return; if(settingsViewJustExpanded) return;
LiSendControllerEvent(0, 0, 0, 0, 0, sender.value, 0); LiSendControllerEvent(0, 0, 0, 0, 0, sender.value, 0);
OnScreenWidgetView.gamepadArrivalReported = true;
} }
- (void)invokeOscLayout{ - (void)invokeOscLayout{
@@ -965,6 +965,8 @@
} }
_mainFrameViewcontroller.sessionLaunchedWithAbsoluteTouch = _settings.touchMode.intValue == AbsoluteTouch; _mainFrameViewcontroller.sessionLaunchedWithAbsoluteTouch = _settings.touchMode.intValue == AbsoluteTouch;
OnScreenWidgetView.gamepadArrivalReported = false;
} }
- (void)keyboardWillShow:(NSNotification *)notification{ - (void)keyboardWillShow:(NSNotification *)notification{