- feed integral for roll->left stick motion control
- feat: roll->left stick motion control multi-level sensitivity
This commit is contained in:
@@ -1380,16 +1380,16 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView verifyAmbiguity="off" opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="Oyk-L5-WTt" userLabel="singleTapSensitivityStack">
|
||||
<rect key="frame" x="440" y="307" width="708" height="55.5"/>
|
||||
<rect key="frame" x="440" y="307" width="712" height="55.5"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Single Tap Sensitivity" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="SuN-S2-8hj">
|
||||
<rect key="frame" x="0.0" y="0.0" width="708" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="712" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<slider verifyAmbiguity="off" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="2" minValue="0.0" maxValue="5" minimumValueImage="0.square" catalog="system" maximumValueImage="5.square" translatesAutoresizingMaskIntoConstraints="NO" id="j4n-De-TRX" userLabel="Single Tap Sensitivity Slider">
|
||||
<rect key="frame" x="-2" y="25.5" width="712" height="31"/>
|
||||
<rect key="frame" x="-2" y="25.5" width="716" height="31"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="30" id="qOF-42-hPO"/>
|
||||
</constraints>
|
||||
@@ -1966,7 +1966,7 @@
|
||||
</constraints>
|
||||
</view>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="z5Q-bW-WQ8" userLabel="widgetPanelStack" customClass="WidgetPanelStackView">
|
||||
<rect key="frame" x="325" y="156" width="650" height="623"/>
|
||||
<rect key="frame" x="325" y="156" width="650" height="658"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Profile:" textAlignment="center" lineBreakMode="tailTruncation" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="iel-xl-xd9">
|
||||
<rect key="frame" x="0.0" y="0.0" width="650" height="37"/>
|
||||
@@ -2191,8 +2191,27 @@
|
||||
</slider>
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="KXB-uJ-onx" userLabel="decelerationRateStack">
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="zqk-Xa-Dku">
|
||||
<rect key="frame" x="0.0" y="521" width="650" height="30"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Roll factor" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="x9i-JN-FSn">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="30"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="160" id="rEg-Gf-yGy"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<slider verifyAmbiguity="off" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="1" minValue="0.0" maxValue="8" translatesAutoresizingMaskIntoConstraints="NO" id="ELy-jP-cY6">
|
||||
<rect key="frame" x="158" y="0.0" width="494" height="31"/>
|
||||
<color key="tintColor" red="0.18823529410000001" green="0.69019607839999997" blue="0.78039215689999997" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color key="maximumTrackTintColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</slider>
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="KXB-uJ-onx" userLabel="decelerationRateStack">
|
||||
<rect key="frame" x="0.0" y="556" width="650" height="30"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="DecelerationRate" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Pbt-Tw-dnV" userLabel="decelerationRateLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="30"/>
|
||||
@@ -2211,7 +2230,7 @@
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="GMQ-EQ-Hum" userLabel="mouseDownButtonStack">
|
||||
<rect key="frame" x="0.0" y="556" width="650" height="31"/>
|
||||
<rect key="frame" x="0.0" y="591" width="650" height="31"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Down button" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="c1r-Hf-b7t" userLabel="mouseDownButtonLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="130" height="31"/>
|
||||
@@ -2238,7 +2257,7 @@
|
||||
</subviews>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="LGW-oJ-5Zf" userLabel="triggerModeStack">
|
||||
<rect key="frame" x="0.0" y="592" width="650" height="31"/>
|
||||
<rect key="frame" x="0.0" y="627" width="650" height="31"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Button mode" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qNQ-fB-jhY" userLabel="uiLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="130" height="31"/>
|
||||
@@ -2312,6 +2331,9 @@
|
||||
<outlet property="pitchFactorLabel" destination="fq3-ie-8by" id="dpT-7M-rIg"/>
|
||||
<outlet property="pitchFactorSlider" destination="4NQ-cL-QH0" id="VxC-yb-L1u"/>
|
||||
<outlet property="pitchFactorStack" destination="JNt-eT-HCs" id="iHx-Nk-Oko"/>
|
||||
<outlet property="rollFactorLabel" destination="x9i-JN-FSn" id="Z6N-It-yAL"/>
|
||||
<outlet property="rollFactorSlider" destination="ELy-jP-cY6" id="6aX-c5-0po"/>
|
||||
<outlet property="rollFactorStack" destination="zqk-Xa-Dku" id="PNE-l7-JwX"/>
|
||||
<outlet property="saveButton" destination="uda-zt-xrG" id="FyB-WY-rri"/>
|
||||
<outlet property="sensitivityXLabel" destination="vJs-pg-hHe" id="RRw-Zq-LUa"/>
|
||||
<outlet property="sensitivityXSlider" destination="DiG-XX-r8c" id="fz5-Et-1WV"/>
|
||||
@@ -2443,7 +2465,7 @@
|
||||
<image name="tray.full.fill" catalog="system" width="128" height="88"/>
|
||||
<image name="video.and.waveform" catalog="system" width="128" height="94"/>
|
||||
<systemColor name="linkColor">
|
||||
<color red="0.0" green="0.47843137250000001" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color red="0.0" green="0.47843137254901963" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="secondarySystemGroupedBackgroundColor">
|
||||
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
@@ -2452,13 +2474,13 @@
|
||||
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</systemColor>
|
||||
<systemColor name="systemBrownColor">
|
||||
<color red="0.63529411759999999" green="0.51764705879999995" blue="0.36862745099999999" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color red="0.63529411764705879" green="0.51764705882352946" blue="0.36862745098039218" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="systemGray3Color">
|
||||
<color red="0.78039215689999997" green="0.78039215689999997" blue="0.80000000000000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color red="0.7803921568627451" green="0.7803921568627451" blue="0.80000000000000004" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="systemTealColor">
|
||||
<color red="0.18823529410000001" green="0.69019607839999997" blue="0.78039215689999997" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color red="0.18823529411764706" green="0.69019607843137254" blue="0.7803921568627451" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
</resources>
|
||||
</document>
|
||||
|
||||
@@ -315,7 +315,7 @@
|
||||
</constraints>
|
||||
</view>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="7" translatesAutoresizingMaskIntoConstraints="NO" id="BVp-3O-vZ7" userLabel="widgetPanelStack" customClass="WidgetPanelStackView">
|
||||
<rect key="frame" x="375" y="132" width="550" height="651"/>
|
||||
<rect key="frame" x="375" y="132" width="550" height="678"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Profile:" textAlignment="center" lineBreakMode="tailTruncation" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="f46-Pt-0Pv">
|
||||
<rect key="frame" x="0.0" y="0.0" width="550" height="28"/>
|
||||
@@ -567,8 +567,30 @@
|
||||
<constraint firstAttribute="height" constant="20" id="Zq1-ux-ep3"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3Bf-uN-nLa">
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="7G4-Ms-mkR">
|
||||
<rect key="frame" x="0.0" y="550" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Roll factor" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="BNN-vq-Pve">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" constant="160" id="0eJ-2k-yRX"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<slider clearsContextBeforeDrawing="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="1" minValue="0.0" maxValue="8" translatesAutoresizingMaskIntoConstraints="NO" id="Ple-mD-zK4">
|
||||
<rect key="frame" x="158" y="0.0" width="394" height="21"/>
|
||||
<color key="tintColor" red="0.18823529410000001" green="0.69019607839999997" blue="0.78039215689999997" alpha="0.5" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<color key="maximumTrackTintColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</slider>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="20" id="J4D-gH-7HY"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="3Bf-uN-nLa">
|
||||
<rect key="frame" x="0.0" y="577" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="DecelerationRate" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="znE-Lv-uWV">
|
||||
<rect key="frame" x="0.0" y="0.0" width="160" height="20"/>
|
||||
@@ -590,7 +612,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="gsG-6n-BAb" userLabel="vibrationStyleStack">
|
||||
<rect key="frame" x="0.0" y="577" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="604" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Vibration style" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="u3w-Se-xzH" userLabel="sensitivityFactorLabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="130" height="20"/>
|
||||
@@ -621,7 +643,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lEZ-1a-89J" userLabel="mouseButtonDownStack">
|
||||
<rect key="frame" x="0.0" y="604" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="631" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Button down" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ozU-7C-qKE" userLabel="uilabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="120" height="20"/>
|
||||
@@ -651,7 +673,7 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jE7-IB-GTS" userLabel="slidableStack">
|
||||
<rect key="frame" x="0.0" y="631" width="550" height="20"/>
|
||||
<rect key="frame" x="0.0" y="658" width="550" height="20"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Button mode" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="o9I-Gt-YRd" userLabel="uilabel">
|
||||
<rect key="frame" x="0.0" y="0.0" width="120" height="20"/>
|
||||
@@ -722,6 +744,9 @@
|
||||
<outlet property="pitchFactorLabel" destination="dEy-ER-Mb3" id="0or-ME-7P1"/>
|
||||
<outlet property="pitchFactorSlider" destination="ol0-mA-VxW" id="bmd-0a-O4H"/>
|
||||
<outlet property="pitchFactorStack" destination="gkc-td-lg4" id="gI0-q7-tO2"/>
|
||||
<outlet property="rollFactorLabel" destination="BNN-vq-Pve" id="4mm-f5-d93"/>
|
||||
<outlet property="rollFactorSlider" destination="Ple-mD-zK4" id="sHy-HC-68W"/>
|
||||
<outlet property="rollFactorStack" destination="7G4-Ms-mkR" id="EzV-6y-77h"/>
|
||||
<outlet property="sensitivityXLabel" destination="dJh-Ck-ugh" id="vso-QW-vxX"/>
|
||||
<outlet property="sensitivityXSlider" destination="Vqk-gH-0xO" id="CVC-XX-0LQ"/>
|
||||
<outlet property="sensitivityXStack" destination="fem-TG-vr3" id="O9M-Ip-ZlT"/>
|
||||
@@ -2214,16 +2239,16 @@
|
||||
</constraints>
|
||||
</stackView>
|
||||
<stackView verifyAmbiguity="off" opaque="NO" contentMode="scaleToFill" ambiguous="YES" axis="vertical" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="N0i-z6-WgC" userLabel="singleTapSensitivityStack">
|
||||
<rect key="frame" x="437" y="2383" width="456" height="55.5"/>
|
||||
<rect key="frame" x="437" y="2383" width="464" height="55.5"/>
|
||||
<subviews>
|
||||
<label verifyAmbiguity="off" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Single Tap Sensitivity" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="WzD-wo-Wum">
|
||||
<rect key="frame" x="0.0" y="0.0" width="456" height="20.5"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="464" height="20.5"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<slider verifyAmbiguity="off" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" value="2" minValue="0.0" maxValue="5" minimumValueImage="0.square" catalog="system" maximumValueImage="5.square" translatesAutoresizingMaskIntoConstraints="NO" id="uCa-Oa-7mv" userLabel="Single Tap Sensitivity Slider">
|
||||
<rect key="frame" x="-2" y="25.5" width="460" height="31"/>
|
||||
<rect key="frame" x="-2" y="25.5" width="468" height="31"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="30" id="XXP-GP-uhn"/>
|
||||
</constraints>
|
||||
|
||||
@@ -404,6 +404,7 @@ static CGRect layoutViewBounds;
|
||||
buttonState.sensitivityFactorY = widgetView.sensitivityFactorY;
|
||||
buttonState.yawFactor = widgetView.yawFactor;
|
||||
buttonState.pitchFactor = widgetView.pitchFactor;
|
||||
buttonState.rollFactor = widgetView.rollFactor;
|
||||
buttonState.decelerationRate = widgetView.trackballDecelerationRate;
|
||||
buttonState.stickIndicatorOffset = widgetView.stickIndicatorOffset;
|
||||
buttonState.widgetShape = widgetView.shape;
|
||||
|
||||
@@ -38,6 +38,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@property (nonatomic, assign) CGFloat sensitivityFactorY; // for OnScreenWidgetView
|
||||
@property (nonatomic, assign) CGFloat yawFactor; // for OnScreenWidgetView
|
||||
@property (nonatomic, assign) CGFloat pitchFactor; // for OnScreenWidgetView
|
||||
@property (nonatomic, assign) CGFloat rollFactor; // for OnScreenWidgetView
|
||||
@property (nonatomic, assign) CGFloat decelerationRate; // for OnScreenWidgetView
|
||||
@property (nonatomic, assign) CGFloat stickIndicatorOffset; // for OnScreenWidgetView
|
||||
@property (nonatomic, assign) CGFloat minStickOffset; // for OnScreenWidgetView
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
[encoder encodeFloat:self.sensitivityFactorY forKey:@"sensitivityFactorY"];
|
||||
[encoder encodeFloat:self.yawFactor forKey:@"yawFactor"];
|
||||
[encoder encodeFloat:self.pitchFactor forKey:@"pitchFactor"];
|
||||
[encoder encodeFloat:self.rollFactor forKey:@"rollFactor"];
|
||||
[encoder encodeFloat:self.decelerationRate forKey:@"decelerationRate"];
|
||||
[encoder encodeFloat:self.stickIndicatorOffset forKey:@"stickIndicatorOffset"];
|
||||
[encoder encodeFloat:self.oscLayerSizeFactor forKey:@"oscLayerSizeFactor"];
|
||||
@@ -79,6 +80,7 @@
|
||||
self.sensitivityFactorY = [decoder containsValueForKey:@"sensitivityFactorY"] ? [decoder decodeFloatForKey:@"sensitivityFactorY"] : 1.0;
|
||||
self.yawFactor = [decoder containsValueForKey:@"yawFactor"] ? [decoder decodeFloatForKey:@"yawFactor"] : 1.0;
|
||||
self.pitchFactor = [decoder containsValueForKey:@"pitchFactor"] ? [decoder decodeFloatForKey:@"pitchFactor"] : 1.0;
|
||||
self.rollFactor = [decoder containsValueForKey:@"rollFactor"] ? [decoder decodeFloatForKey:@"rollFactor"] : 1.0;
|
||||
self.decelerationRate = [decoder decodeFloatForKey:@"decelerationRate"];
|
||||
self.stickIndicatorOffset = [decoder decodeFloatForKey:@"stickIndicatorOffset"];
|
||||
self.oscLayerSizeFactor = [decoder decodeFloatForKey:@"oscLayerSizeFactor"];
|
||||
|
||||
@@ -22,6 +22,7 @@ import CoreMotion
|
||||
}
|
||||
|
||||
public func mixLeftStickAndGyroInput(x: CGFloat, y: CGFloat) {
|
||||
// rollIntegral = 0
|
||||
leftStickTouchInputX = x
|
||||
leftStickTouchInputY = y
|
||||
}
|
||||
@@ -77,7 +78,8 @@ import CoreMotion
|
||||
private var yaw:Double = 0
|
||||
private var pitch:Double = 0
|
||||
private var roll:Double = 0
|
||||
|
||||
private var rollIntegral:Double = 0
|
||||
|
||||
private var isCalibrating: Bool = false
|
||||
private var sumX: Double = 0
|
||||
private var sumY: Double = 0
|
||||
@@ -124,6 +126,7 @@ import CoreMotion
|
||||
self.widgetYawFactor = yawFactor
|
||||
self.widgetPitchFactor = pitchFactor
|
||||
self.widgetRollFactor = rollFactor
|
||||
print("self.widgetRollFactor \(self.widgetRollFactor)")
|
||||
if self.gyroStarter == nil {
|
||||
self.gyroStarter = sender
|
||||
if sender.motionControlButtonString != "GYROPAUSE" {self.startGyroUpdate()}
|
||||
@@ -164,13 +167,13 @@ import CoreMotion
|
||||
/// 停止更新
|
||||
private var interruptTouchInput:Bool = false
|
||||
|
||||
@objc public func stopGyroUpdate(interruptTouchInput:Bool=false) {
|
||||
@objc public func stopGyroUpdate(interruptTouchInput:Bool=false, resetLeftStick:Bool=false) {
|
||||
gyroControlStarted = false
|
||||
gyroIsWorking = false
|
||||
if motionManager.isGyroActive{
|
||||
motionManager.stopGyroUpdates()
|
||||
}
|
||||
self.clearGyroInput(interruptTouchInput: interruptTouchInput)
|
||||
self.clearGyroInput(interruptTouchInput:interruptTouchInput, resetLeftStick:resetLeftStick)
|
||||
}
|
||||
|
||||
@objc public func stopAccelUpdate() {
|
||||
@@ -283,21 +286,25 @@ import CoreMotion
|
||||
self.onScreenControls.sendRightStickTouchPadEvent(yaw, pitch)
|
||||
}
|
||||
if oscProfile.rollToLeftStick {
|
||||
roll = leftStickTouchInputX + gyroInputToStickInput(input:rollSource*sensitvityRoll*widgetRollFactor*10)
|
||||
roll = self.clampStickInput(input: roll)
|
||||
roll = (roll >= 0 ? 1.0 : -1.0) * gyroToStickMinOffset + (self.stickMaxOffset - gyroToStickMinOffset) * (roll/self.stickMaxOffset)
|
||||
roll = gyroInputToStickInput(input:rollSource*sensitvityRoll*widgetRollFactor*0.2)
|
||||
rollIntegral = rollIntegral + roll
|
||||
var mixedLeftStickOffset = self.clampStickInput(input: rollIntegral+leftStickTouchInputX)
|
||||
mixedLeftStickOffset = (mixedLeftStickOffset >= 0 ? 1.0 : -1.0) * gyroToStickMinOffset + (self.stickMaxOffset - gyroToStickMinOffset) * (mixedLeftStickOffset/self.stickMaxOffset)
|
||||
|
||||
self.onScreenControls.sendLeftStickTouchPadEvent(roll, leftStickTouchInputY)
|
||||
self.onScreenControls.sendLeftStickTouchPadEvent(mixedLeftStickOffset, leftStickTouchInputY)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func clearGyroInput(interruptTouchInput:Bool){
|
||||
private func clearGyroInput(interruptTouchInput:Bool, resetLeftStick:Bool=false){
|
||||
if oscProfile.yawPitchToRightStick{
|
||||
self.onScreenControls.sendRightStickTouchPadEvent(rightStickTouchInputX-yawBias, rightStickTouchInputY-pitchBias)
|
||||
}
|
||||
if oscProfile.rollToLeftStick{
|
||||
self.onScreenControls.sendLeftStickTouchPadEvent(leftStickTouchInputX-rollBias, leftStickTouchInputY)
|
||||
if resetLeftStick {
|
||||
rollIntegral = 0
|
||||
self.onScreenControls.sendLeftStickTouchPadEvent(leftStickTouchInputX-rollBias, leftStickTouchInputY)
|
||||
}
|
||||
}
|
||||
if(interruptTouchInput){
|
||||
self.onScreenControls.clearLeftStickTouchPadFlag()
|
||||
|
||||
@@ -110,6 +110,9 @@ import UIKit
|
||||
@objc public var hasPitchFactor: Bool = false
|
||||
@objc public var pitchFactorMin: CGFloat = 0
|
||||
@objc public var pitchFactorMax: CGFloat = 1
|
||||
@objc public var hasRollFactor: Bool = false
|
||||
@objc public var rollFactorMin: CGFloat = 0
|
||||
@objc public var rollFactorMax: CGFloat = 1
|
||||
|
||||
@objc public var hasAutoTap: Bool = false
|
||||
@objc public var isMousePad: Bool = false
|
||||
@@ -355,6 +358,8 @@ import UIKit
|
||||
self.pitchFactorMin = 0
|
||||
self.pitchFactorMax = 1.0
|
||||
|
||||
self.hasRollFactor = self.motionControlButtonString == "GYRO" && (oscProfile.mapGyroTo == MapGyroTo.mapGyroToControllerStick && oscProfile.rollToLeftStick)
|
||||
|
||||
self.hasAutoTap = self.widgetType == WidgetTypeEnum.button && self.functionalButtonString == "" && self.motionControlButtonString == ""
|
||||
self.isMousePad = self.touchPadString == "MOUSEPAD" && widgetType == WidgetTypeEnum.touchPad
|
||||
self.hasTrackBall = self.touchPadString == "TRACKBALL"
|
||||
@@ -1790,7 +1795,7 @@ import UIKit
|
||||
widget.tapToToggleFlag = !widget.tapToToggleFlag
|
||||
}
|
||||
}
|
||||
self.motionHandler.stopGyroUpdate(interruptTouchInput: false)
|
||||
self.motionHandler.stopGyroUpdate(interruptTouchInput: false, resetLeftStick: true)
|
||||
self.motionHandler.gyroStarter = nil
|
||||
}
|
||||
else {
|
||||
|
||||
@@ -565,6 +565,7 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5;
|
||||
widgetView.sensitivityFactorY = buttonState.sensitivityFactorY;
|
||||
widgetView.yawFactor = buttonState.yawFactor;
|
||||
widgetView.pitchFactor = buttonState.pitchFactor;
|
||||
widgetView.rollFactor = buttonState.rollFactor;
|
||||
widgetView.trackballDecelerationRate = buttonState.decelerationRate;
|
||||
widgetView.stickIndicatorOffset = buttonState.stickIndicatorOffset;
|
||||
widgetView.minStickOffset = buttonState.minStickOffset;
|
||||
|
||||
@@ -4874,6 +4874,29 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"Roll factor: %.2f" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
"zh-Hans" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "滚转系数: %.2f"
|
||||
}
|
||||
},
|
||||
"zh-Hant" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "滾轉係數: %.2f"
|
||||
}
|
||||
},
|
||||
"zh-HK" : {
|
||||
"stringUnit" : {
|
||||
"state" : "translated",
|
||||
"value" : "滾轉係數: %.2f"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"Save" : {
|
||||
"extractionState" : "manual",
|
||||
"localizations" : {
|
||||
|
||||
@@ -84,6 +84,9 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@property (strong, nonatomic) IBOutlet UILabel *pitchFactorLabel;
|
||||
@property (strong, nonatomic) IBOutlet UISlider *pitchFactorSlider;
|
||||
@property (strong, nonatomic) IBOutlet UIStackView *pitchFactorStack;
|
||||
@property (strong, nonatomic) IBOutlet UILabel *rollFactorLabel;
|
||||
@property (strong, nonatomic) IBOutlet UISlider *rollFactorSlider;
|
||||
@property (strong, nonatomic) IBOutlet UIStackView *rollFactorStack;
|
||||
|
||||
|
||||
@property (strong, nonatomic) IBOutlet UIStackView *decelerationRateStack;
|
||||
|
||||
+23
-2
@@ -155,6 +155,7 @@ typedef NS_ENUM(NSUInteger, BorderWidthSliderMode) {
|
||||
widgetView.sensitivityFactorY = buttonState.sensitivityFactorY;
|
||||
widgetView.yawFactor = buttonState.yawFactor;
|
||||
widgetView.pitchFactor = buttonState.pitchFactor;
|
||||
widgetView.rollFactor = buttonState.rollFactor;
|
||||
widgetView.trackballDecelerationRate = buttonState.decelerationRate;
|
||||
widgetView.stickIndicatorOffset = buttonState.stickIndicatorOffset;
|
||||
widgetView.minStickOffset = buttonState.minStickOffset;
|
||||
@@ -746,6 +747,7 @@ typedef NS_ENUM(NSUInteger, BorderWidthSliderMode) {
|
||||
newWidget.sensitivityFactorY = widget.sensitivityFactorY;
|
||||
newWidget.yawFactor = widget.yawFactor;
|
||||
newWidget.pitchFactor = widget.pitchFactor;
|
||||
newWidget.rollFactor = widget.rollFactor;
|
||||
newWidget.trackballDecelerationRate = widget.trackballDecelerationRate;
|
||||
newWidget.stickIndicatorOffset = widget.stickIndicatorOffset;
|
||||
newWidget.minStickOffset = [widgetInitParams[@"minStickOffsetString"] floatValue];
|
||||
@@ -918,6 +920,15 @@ typedef NS_ENUM(NSUInteger, BorderWidthSliderMode) {
|
||||
[self.pitchFactorLabel setText:[LocalizationHelper localizedStringForKey:@"Pitch factor: %.2f", self->selectedWidgetView.pitchFactor]];
|
||||
[self autoFitLabel:self.pitchFactorLabel];
|
||||
}
|
||||
|
||||
self.rollFactorStack.hidden = !selectedWidgetView.hasRollFactor;
|
||||
if(selectedWidgetView.hasRollFactor){
|
||||
[self.rollFactorSlider setMinimumValue:selectedWidgetView.rollFactorMin];
|
||||
[self.rollFactorSlider setMaximumValue:selectedWidgetView.rollFactorMax];
|
||||
[self.rollFactorSlider setValue:self->selectedWidgetView.rollFactor];
|
||||
[self.rollFactorLabel setText:[LocalizationHelper localizedStringForKey:@"Roll factor: %.2f", self->selectedWidgetView.rollFactor]];
|
||||
[self autoFitLabel:self.rollFactorLabel];
|
||||
}
|
||||
|
||||
|
||||
self.stickIndicatorOffsetStack.hidden = !selectedWidgetView.hasStickIndicator;
|
||||
@@ -1174,6 +1185,12 @@ typedef NS_ENUM(NSUInteger, BorderWidthSliderMode) {
|
||||
return;
|
||||
}
|
||||
|
||||
- (void)rollFactorSliderMoved:(UISlider* )sender{
|
||||
[self.rollFactorLabel setText:[LocalizationHelper localizedStringForKey:@"Roll factor: %.2f", sender.value]];
|
||||
if(self->selectedWidgetView != nil && self->widgetViewSelected) self->selectedWidgetView.rollFactor = sender.value;
|
||||
return;
|
||||
}
|
||||
|
||||
- (void)decelerationRateSliderMoved:(UISlider* )sender{
|
||||
[self.decelerationRateLabel setText:[LocalizationHelper localizedStringForKey:@"Deceleration Rate: %.3f ", sender.value]];
|
||||
if(self->selectedWidgetView != nil && self->widgetViewSelected) self->selectedWidgetView.trackballDecelerationRate = sender.value;
|
||||
@@ -1308,13 +1325,17 @@ typedef NS_ENUM(NSUInteger, BorderWidthSliderMode) {
|
||||
self.sensitivityYStack.hidden = YES;
|
||||
|
||||
[self.yawFactorSlider addTarget:self action:@selector(yawFactorSliderMoved:) forControlEvents:(UIControlEventValueChanged)];
|
||||
self.yawFactorLabel.text = [LocalizationHelper localizedStringForKey:@"SensitivityYaw"];
|
||||
self.yawFactorLabel.text = [LocalizationHelper localizedStringForKey:@"Yaw Factor"];
|
||||
self.yawFactorStack.hidden = YES;
|
||||
|
||||
[self.pitchFactorSlider addTarget:self action:@selector(pitchFactorSliderMoved:) forControlEvents:(UIControlEventValueChanged)];
|
||||
self.pitchFactorLabel.text = [LocalizationHelper localizedStringForKey:@"SensitivityPitch"];
|
||||
self.pitchFactorLabel.text = [LocalizationHelper localizedStringForKey:@"Pitch Factor"];
|
||||
self.pitchFactorStack.hidden = YES;
|
||||
|
||||
[self.rollFactorSlider addTarget:self action:@selector(rollFactorSliderMoved:) forControlEvents:(UIControlEventValueChanged)];
|
||||
self.rollFactorLabel.text = [LocalizationHelper localizedStringForKey:@"Roll Factor"];
|
||||
self.rollFactorStack.hidden = YES;
|
||||
|
||||
[self.decelerationRateSlider addTarget:self action:@selector(decelerationRateSliderMoved:) forControlEvents:(UIControlEventValueChanged)];
|
||||
self.decelerationRateLabel.text = [LocalizationHelper localizedStringForKey:@"Deceleration Rate"];
|
||||
self.decelerationRateStack.hidden = YES;
|
||||
|
||||
@@ -1572,7 +1572,7 @@
|
||||
}
|
||||
|
||||
- (void)stopGyroUpdateWithInterruptTouchInput:(BOOL)interruption{
|
||||
[_motionHandler stopGyroUpdateWithInterruptTouchInput:interruption];
|
||||
[_motionHandler stopGyroUpdateWithInterruptTouchInput:interruption resetLeftStick:false];
|
||||
}
|
||||
|
||||
- (void)stopAccelUpdate{
|
||||
|
||||
@@ -4573,6 +4573,18 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"x9i-JN-FSn.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Roll factor\"; ObjectID = \"x9i-JN-FSn\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Roll factor"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"xfv-K0-1CO.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Tap any widget to load configuration (per widget)\\n\"; ObjectID = \"xfv-K0-1CO\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
|
||||
@@ -1297,6 +1297,18 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"BNN-vq-Pve.text" : {
|
||||
"comment" : "Class = \"UILabel\"; text = \"Roll factor\"; ObjectID = \"BNN-vq-Pve\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
"localizations" : {
|
||||
"en" : {
|
||||
"stringUnit" : {
|
||||
"state" : "new",
|
||||
"value" : "Roll factor"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"bue-hp-CWD.title" : {
|
||||
"comment" : "Class = \"UIBarButtonItem\"; title = \"Duplicate\"; ObjectID = \"bue-hp-CWD\";",
|
||||
"extractionState" : "extracted_with_value",
|
||||
|
||||
Reference in New Issue
Block a user