Skip to content

Commit afedb97

Browse files
ImSapphireButterscotchV
authored andcommitted
Add setting for step mounting
1 parent 0cf3e09 commit afedb97

File tree

9 files changed

+73
-52
lines changed

9 files changed

+73
-52
lines changed

gui/public/i18n/en/translation.ftl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,8 @@ settings-general-fk_settings-arm_fk = Arm tracking
628628
settings-general-fk_settings-arm_fk-description = Force arms to be tracked from the headset (HMD) even if positional hand data is available.
629629
settings-general-fk_settings-arm_fk-force_arms = Force arms from HMD
630630
settings-general-fk_settings-reset_settings = Reset settings
631+
settings-general-fk_settings-reset_settings-step_mounting-description = Use step mounting method instead of ski pose.
632+
settings-general-fk_settings-reset_settings-step_mounting = Step mounting
631633
settings-general-fk_settings-reset_settings-reset_hmd_pitch-description = Reset the HMD's pitch (vertical rotation) upon doing a full reset. Useful if wearing an HMD on the forehead for VTubing or mocap. Do not enable for VR.
632634
settings-general-fk_settings-reset_settings-reset_hmd_pitch = Reset HMD pitch
633635
settings-general-fk_settings-arm_fk-reset_mode-description = Change which arm pose is expected for mounting calibration.

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

Lines changed: 54 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -813,46 +813,64 @@ export function GeneralSettings() {
813813
/>
814814
</div>
815815

816-
<div className="flex flex-col pt-2">
816+
<div className="flex flex-col pt-2 pb-2">
817817
<Typography variant="section-title">
818818
{l10n.getString('settings-general-fk_settings-reset_settings')}
819819
</Typography>
820820
</div>
821-
<div className="flex flex-col pt-2 pb-3">
822-
<div className="grid grid-cols-2 gap-2">
823-
<div className="flex flex-col gap-2">
824-
<Typography>
825-
{l10n.getString(
826-
'settings-general-fk_settings-reset_settings-reset_hmd_pitch-description'
827-
)}
828-
</Typography>
829-
<CheckBox
830-
variant="toggle"
831-
outlined
832-
control={control}
833-
name="resetsSettings.resetHmdPitch"
834-
label={l10n.getString(
835-
'settings-general-fk_settings-reset_settings-reset_hmd_pitch'
836-
)}
837-
/>
838-
</div>
839-
<div className="flex flex-col gap-2 justify-end">
840-
<Typography>
841-
{l10n.getString(
842-
'settings-general-fk_settings-leg_fk-reset_mounting_feet-description-v1'
843-
)}
844-
</Typography>
845-
<CheckBox
846-
variant="toggle"
847-
outlined
848-
control={control}
849-
name="resetsSettings.resetMountingFeet"
850-
label={l10n.getString(
851-
'settings-general-fk_settings-leg_fk-reset_mounting_feet-v1'
852-
)}
853-
/>
854-
</div>
855-
</div>
821+
<div className="grid sm:grid-cols-1 gap-3 pb-3">
822+
<Typography>
823+
{l10n.getString(
824+
'settings-general-fk_settings-reset_settings-step_mounting-description'
825+
)}
826+
</Typography>
827+
</div>
828+
<div className="grid sm:grid-cols-1 gap-2 pb-3">
829+
<CheckBox
830+
variant="toggle"
831+
outlined
832+
control={control}
833+
name="resetsSettings.stepMounting"
834+
label={l10n.getString(
835+
'settings-general-fk_settings-reset_settings-step_mounting'
836+
)}
837+
/>
838+
</div>
839+
<div className="grid sm:grid-cols-1 gap-3 pb-3">
840+
<Typography>
841+
{l10n.getString(
842+
'settings-general-fk_settings-reset_settings-reset_hmd_pitch-description'
843+
)}
844+
</Typography>
845+
</div>
846+
<div className="grid sm:grid-cols-1 gap-3 pb-3">
847+
<CheckBox
848+
variant="toggle"
849+
outlined
850+
control={control}
851+
name="resetsSettings.resetHmdPitch"
852+
label={l10n.getString(
853+
'settings-general-fk_settings-reset_settings-reset_hmd_pitch'
854+
)}
855+
/>
856+
</div>
857+
<div className="grid sm:grid-cols-1 gap-3 pb-3">
858+
<Typography>
859+
{l10n.getString(
860+
'settings-general-fk_settings-leg_fk-reset_mounting_feet-description-v1'
861+
)}
862+
</Typography>
863+
</div>
864+
<div className="grid sm:grid-cols-1 gap-3 pb-3">
865+
<CheckBox
866+
variant="toggle"
867+
outlined
868+
control={control}
869+
name="resetsSettings.resetMountingFeet"
870+
label={l10n.getString(
871+
'settings-general-fk_settings-leg_fk-reset_mounting_feet-v1'
872+
)}
873+
/>
856874
</div>
857875

858876
<div>

gui/src/hooks/reset-settings.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export interface ResetSettingsForm {
1414
yawResetSmoothTime: number;
1515
saveMountingReset: boolean;
1616
resetHmdPitch: boolean;
17+
stepMounting: boolean;
1718
}
1819

1920
export const defaultResetSettings = {
@@ -22,6 +23,7 @@ export const defaultResetSettings = {
2223
yawResetSmoothTime: 0.0,
2324
saveMountingReset: false,
2425
resetHmdPitch: false,
26+
stepMounting: false,
2527
};
2628

2729
export function loadResetSettings(resetSettingsForm: ResetSettingsForm) {
@@ -31,6 +33,7 @@ export function loadResetSettings(resetSettingsForm: ResetSettingsForm) {
3133
resetsSettings.yawResetSmoothTime = resetSettingsForm.yawResetSmoothTime;
3234
resetsSettings.saveMountingReset = resetSettingsForm.saveMountingReset;
3335
resetsSettings.resetHmdPitch = resetSettingsForm.resetHmdPitch;
36+
resetsSettings.stepMounting = resetSettingsForm.stepMounting;
3437

3538
return resetsSettings;
3639
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ enum class MountingMethods(val id: Int) {
4848
}
4949

5050
class ResetsConfig {
51+
var stepMounting = false
5152

5253
// Always reset mounting for feet
5354
var resetMountingFeet = false

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,8 @@ public static int createArmsResetModeSettings(
350350
resetsConfig.getMode().getId(),
351351
resetsConfig.getYawResetSmoothTime(),
352352
resetsConfig.getSaveMountingReset(),
353-
resetsConfig.getResetHmdPitch()
353+
resetsConfig.getResetHmdPitch(),
354+
resetsConfig.getStepMounting()
354355
);
355356
}
356357

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
@@ -347,6 +347,7 @@ class RPCSettingsHandler(var rpcHandler: RPCHandler, var api: ProtocolAPI) {
347347
resetsConfig.saveMountingReset = req.resetsSettings().saveMountingReset()
348348
resetsConfig.yawResetSmoothTime = req.resetsSettings().yawResetSmoothTime()
349349
resetsConfig.resetHmdPitch = req.resetsSettings().resetHmdPitch()
350+
resetsConfig.stepMounting = req.resetsSettings().stepMounting()
350351
resetsConfig.updateTrackersResetsSettings()
351352
}
352353

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1625,7 +1625,7 @@ class HumanSkeleton(
16251625
if (bodyParts.isEmpty() || bodyParts.contains(BodyPart.HEAD)) {
16261626
// Only reset if head allowMounting or is computed but not HMD
16271627
if (it.allowMounting || (it.isComputed && !it.isHmd)) {
1628-
it.resetsHandler.resetMountingAccel(referenceRotation)
1628+
it.resetsHandler.resetMounting(referenceRotation)
16291629
}
16301630
}
16311631
referenceRotation = it.getRotation()
@@ -1634,7 +1634,7 @@ class HumanSkeleton(
16341634
for (tracker in trackersToReset) {
16351635
// Only reset if tracker needsMounting
16361636
if (tracker != null && tracker.allowMounting && (bodyParts.isEmpty() || bodyParts.contains(tracker.trackerPosition?.bodyPart))) {
1637-
tracker.resetsHandler.resetMountingAccel(referenceRotation)
1637+
tracker.resetsHandler.resetMounting(referenceRotation)
16381638
}
16391639
}
16401640
legTweaks.resetBuffer()

server/core/src/main/java/dev/slimevr/tracking/trackers/TrackerResetsHandler.kt

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ class TrackerResetsHandler(val tracker: Tracker) {
4141
private var yawResetSmoothTime = 0.0f
4242
var saveMountingReset = false
4343
var resetHmdPitch = false
44+
var stepMounting = false
4445
var allowDriftCompensation = false
4546
var lastResetQuaternion: Quaternion? = null
4647

@@ -156,6 +157,7 @@ class TrackerResetsHandler(val tracker: Tracker) {
156157
yawResetSmoothTime = config.yawResetSmoothTime
157158
saveMountingReset = config.saveMountingReset
158159
resetHmdPitch = config.resetHmdPitch
160+
stepMounting = config.stepMounting
159161
}
160162

161163
fun trySetMountingReset(quat: Quaternion) {
@@ -382,18 +384,6 @@ class TrackerResetsHandler(val tracker: Tracker) {
382384
tracker.resetFilteringQuats(reference)
383385
}
384386

385-
fun resetMountingAccel(reference: Quaternion) {
386-
if (tracker.trackerDataType == TrackerDataType.FLEX_RESISTANCE) {
387-
tracker.trackerFlexHandler.resetMax()
388-
tracker.resetFilteringQuats(reference)
389-
return
390-
} else if (tracker.trackerDataType == TrackerDataType.FLEX_ANGLE) {
391-
return
392-
}
393-
394-
tracker.startMounting()
395-
}
396-
397387
/**
398388
* Perform the math to align the tracker to go forward
399389
* and stores it in mountRotFix, and adjusts yawFix
@@ -407,6 +397,11 @@ class TrackerResetsHandler(val tracker: Tracker) {
407397
return
408398
}
409399

400+
if (stepMounting) {
401+
tracker.startMounting()
402+
return
403+
}
404+
410405
constraintFix = Quaternion.IDENTITY
411406

412407
// Get the current calibrated rotation

0 commit comments

Comments
 (0)