Skip to content

Commit aa6b5ab

Browse files
authored
Bring back resetMountingFeet toggle for mounting resets (#1509)
2 parents a8116a7 + b2ee4e0 commit aa6b5ab

File tree

14 files changed

+82
-124
lines changed

14 files changed

+82
-124
lines changed

gui/public/i18n/en/translation.ftl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ widget-overlay-is_mirrored_label = Display Overlay as Mirror
276276
widget-drift_compensation-clear = Clear drift compensation
277277
278278
## Widget: Clear Reset Mounting
279-
widget-clear_mounting = Clear reset mounting
279+
widget-clear_mounting = Clear Reset Mounting
280280
281281
## Widget: Developer settings
282282
widget-developer_mode = Developer Mode
@@ -586,8 +586,8 @@ settings-general-fk_settings-leg_tweak-floor_clip-description = Floor-clip can r
586586
settings-general-fk_settings-leg_tweak-toe_snap-description = Toe-snap attempts to guess the rotation of your feet if foot trackers are not in use.
587587
settings-general-fk_settings-leg_tweak-foot_plant-description = Foot-plant rotates your feet to be parallel to the ground when in contact.
588588
settings-general-fk_settings-leg_fk = Leg tracking
589-
settings-general-fk_settings-leg_fk-reset_mounting_feet-description = Enable feet Mounting Reset by tiptoeing.
590-
settings-general-fk_settings-leg_fk-reset_mounting_feet = Feet Mounting Reset
589+
settings-general-fk_settings-leg_fk-reset_mounting_feet-description-v1 = Force feet mounting reset during general mounting resets.
590+
settings-general-fk_settings-leg_fk-reset_mounting_feet-v1 = Force feet mounting reset
591591
settings-general-fk_settings-enforce_joint_constraints = Skeletal Limits
592592
settings-general-fk_settings-enforce_joint_constraints-enforce_constraints = Enforce constraints
593593
settings-general-fk_settings-enforce_joint_constraints-enforce_constraints-description = Prevents joints from rotating past their limit

gui/src/components/WidgetsComponent.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ export function WidgetsComponent() {
5555
<ResetButton type={ResetType.Yaw} size="big"></ResetButton>
5656
<ResetButton type={ResetType.Full} size="big"></ResetButton>
5757
<ResetButton type={ResetType.Mounting} size="big"></ResetButton>
58-
<ClearMountingButton></ClearMountingButton>
5958
<ResetButton
6059
type={ResetType.Mounting}
6160
size="big"
@@ -66,6 +65,7 @@ export function WidgetsComponent() {
6665
size="big"
6766
bodyPartsToReset="fingers"
6867
></ResetButton>
68+
<ClearMountingButton></ClearMountingButton>
6969
{(typeof __ANDROID__ === 'undefined' || !__ANDROID__?.isThere()) && (
7070
<BVHButton></BVHButton>
7171
)}

gui/src/components/home/ResetButton.tsx

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import {
2323
} from '@/components/commons/icon/ResetIcon';
2424
import { useStatusContext } from '@/hooks/status-system';
2525
import classNames from 'classnames';
26+
import { FootIcon } from '@/components/commons/icon/FootIcon';
27+
import { FingersIcon } from '@/components/commons/icon/FingersIcon';
2628

2729
export function ResetButton({
2830
type,
@@ -90,15 +92,17 @@ export function ResetButton({
9092
const reset = () => {
9193
const req = new ResetRequestT();
9294
req.resetType = type;
93-
if (bodyPartsToReset === 'default') {
94-
// Default (server handles it)
95-
req.bodyParts = [];
96-
} else if (bodyPartsToReset === 'feet') {
97-
// Feet
98-
req.bodyParts = feetBodyParts;
99-
} else if (bodyPartsToReset === 'fingers') {
100-
// Fingers
101-
req.bodyParts = fingerBodyParts;
95+
switch (bodyPartsToReset) {
96+
case 'default':
97+
// Server handles it. Usually all body parts except fingers.
98+
req.bodyParts = [];
99+
break;
100+
case 'feet':
101+
req.bodyParts = feetBodyParts;
102+
break;
103+
case 'fingers':
104+
req.bodyParts = fingerBodyParts;
105+
break;
102106
}
103107
sendRPCPacket(RpcMessage.ResetRequest, req);
104108
};
@@ -144,7 +148,14 @@ export function ResetButton({
144148
case ResetType.Yaw:
145149
return <YawResetIcon width={20} />;
146150
case ResetType.Mounting:
147-
return <MountingResetIcon width={20} />;
151+
switch (bodyPartsToReset) {
152+
case 'default':
153+
return <MountingResetIcon width={20} />;
154+
case 'feet':
155+
return <FootIcon width={30} />;
156+
case 'fingers':
157+
return <FingersIcon width={20} />;
158+
}
148159
}
149160
return <FullResetIcon width={20} />;
150161
};

gui/src/components/settings/pages/GeneralSettings.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ export type SettingsForm = {
9696
correctionStrength: number;
9797
};
9898
resetsSettings: {
99+
resetMountingFeet: boolean;
99100
armsMountingResetMode: number;
100101
yawResetSmoothTime: number;
101102
saveMountingReset: boolean;
@@ -156,6 +157,7 @@ const defaultValues: SettingsForm = {
156157
},
157158
legTweaks: { correctionStrength: 0.3 },
158159
resetsSettings: {
160+
resetMountingFeet: false,
159161
armsMountingResetMode: 0,
160162
yawResetSmoothTime: 0.0,
161163
saveMountingReset: false,
@@ -287,6 +289,8 @@ export function GeneralSettings() {
287289

288290
if (values.resetsSettings) {
289291
const resetsSettings = new ResetsSettingsT();
292+
resetsSettings.resetMountingFeet =
293+
values.resetsSettings.resetMountingFeet;
290294
resetsSettings.armsMountingResetMode =
291295
values.resetsSettings.armsMountingResetMode;
292296
resetsSettings.yawResetSmoothTime =
@@ -861,6 +865,24 @@ export function GeneralSettings() {
861865
)}
862866
/>
863867
</div>
868+
<div className="flex flex-col pt-2 pb-3">
869+
<Typography color="secondary">
870+
{l10n.getString(
871+
'settings-general-fk_settings-leg_fk-reset_mounting_feet-description-v1'
872+
)}
873+
</Typography>
874+
</div>
875+
<div className="grid sm:grid-cols-1 gap-3 pb-3">
876+
<CheckBox
877+
variant="toggle"
878+
outlined
879+
control={control}
880+
name="resetsSettings.resetMountingFeet"
881+
label={l10n.getString(
882+
'settings-general-fk_settings-leg_fk-reset_mounting_feet-v1'
883+
)}
884+
/>
885+
</div>
864886

865887
<Typography color="secondary">
866888
{l10n.getString(

server/core/src/main/java/dev/slimevr/VRServer.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,7 @@ class VRServer @JvmOverloads constructor(
306306
queueTask { humanPoseManager.resetTrackersYaw(resetSourceName, bodyParts) }
307307
}
308308

309-
fun resetTrackersMounting(resetSourceName: String?, bodyParts: List<Int> = TrackerUtils.allBodyPartsButFeetAndFingers) {
309+
fun resetTrackersMounting(resetSourceName: String?, bodyParts: List<Int> = TrackerUtils.allBodyPartsButFingers) {
310310
queueTask { humanPoseManager.resetTrackersMounting(resetSourceName, bodyParts) }
311311
}
312312

server/core/src/main/java/dev/slimevr/config/ResetsConfig.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ enum class ArmsResetModes(val id: Int) {
3131

3232
class ResetsConfig {
3333

34+
// Always reset mounting for feet
35+
var resetMountingFeet = false
36+
3437
// Reset mode used for the arms
3538
var mode = ArmsResetModes.BACK
3639

server/core/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsBuilder.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,7 @@ public static int createArmsResetModeSettings(
346346
return ResetsSettings
347347
.createResetsSettings(
348348
fbb,
349+
resetsConfig.getResetMountingFeet(),
349350
resetsConfig.getMode().getId(),
350351
resetsConfig.getYawResetSmoothTime(),
351352
resetsConfig.getSaveMountingReset(),

server/core/src/main/java/dev/slimevr/protocol/rpc/settings/RPCSettingsHandler.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ class RPCSettingsHandler(var rpcHandler: RPCHandler, var api: ProtocolAPI) {
342342
if (mode != null) {
343343
resetsConfig.mode = mode
344344
}
345+
resetsConfig.resetMountingFeet = req.resetsSettings().resetMountingFeet()
345346
resetsConfig.saveMountingReset = req.resetsSettings().saveMountingReset()
346347
resetsConfig.yawResetSmoothTime = req.resetsSettings().yawResetSmoothTime()
347348
resetsConfig.resetHmdPitch = req.resetsSettings().resetHmdPitch()

server/core/src/main/java/dev/slimevr/tracking/processor/HumanPoseManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -571,7 +571,7 @@ class HumanPoseManager(val server: VRServer?) {
571571
}
572572

573573
@JvmOverloads
574-
fun resetTrackersMounting(resetSourceName: String?, bodyParts: List<Int> = TrackerUtils.allBodyPartsButFeetAndFingers) {
574+
fun resetTrackersMounting(resetSourceName: String?, bodyParts: List<Int> = TrackerUtils.allBodyPartsButFingers) {
575575
skeleton.resetTrackersMounting(resetSourceName, bodyParts)
576576
}
577577

server/core/src/main/java/dev/slimevr/tracking/processor/skeleton/HumanSkeleton.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1570,9 +1570,13 @@ class HumanSkeleton(
15701570
LogManager.info("[HumanSkeleton] Reset: yaw ($resetSourceName)")
15711571
}
15721572

1573+
/**
1574+
* if bodyParts is empty, this resets mounting for all trackers.
1575+
* Keep in mind TrackerResetsHandler.kt has some logic as well for which trackers get reset (feet)
1576+
*/
15731577
@VRServerThread
15741578
@JvmOverloads
1575-
fun resetTrackersMounting(resetSourceName: String?, bodyParts: List<Int> = TrackerUtils.allBodyPartsButFeetAndFingers) {
1579+
fun resetTrackersMounting(resetSourceName: String?, bodyParts: List<Int>) {
15761580
val trackersToReset = trackersToReset
15771581

15781582
// TODO: PLEASE rewrite this handling at some point in the future... This is so
@@ -1596,10 +1600,13 @@ class HumanSkeleton(
15961600
}
15971601
referenceRotation = it.getRotation()
15981602
}
1603+
1604+
// If onlyFeet is true, feet will be forced to be mounting reset in their reset handlers.
1605+
val onlyFeet = bodyParts.isNotEmpty() && bodyParts.all { it == BodyPart.LEFT_FOOT || it == BodyPart.RIGHT_FOOT }
15991606
for (tracker in trackersToReset) {
16001607
// Only reset if tracker needsMounting
16011608
if (tracker != null && tracker.needsMounting && (bodyParts.isEmpty() || bodyParts.contains(tracker.trackerPosition?.bodyPart))) {
1602-
tracker.resetsHandler.resetMounting(referenceRotation)
1609+
tracker.resetsHandler.resetMounting(referenceRotation, onlyFeet)
16031610
}
16041611
}
16051612
legTweaks.resetBuffer()

0 commit comments

Comments
 (0)