mirror of
https://github.com/SlimeVR/SlimeVR-Server.git
synced 2026-04-06 02:01:58 +02:00
Add setting for step mounting
This commit is contained in:
@@ -637,6 +637,8 @@ settings-general-fk_settings-arm_fk = Arm tracking
|
||||
settings-general-fk_settings-arm_fk-description = Force arms to be tracked from the headset (HMD) even if positional hand data is available.
|
||||
settings-general-fk_settings-arm_fk-force_arms = Force arms from HMD
|
||||
settings-general-fk_settings-reset_settings = Reset settings
|
||||
settings-general-fk_settings-reset_settings-step_mounting-description = Use step mounting method instead of ski pose.
|
||||
settings-general-fk_settings-reset_settings-step_mounting = Step mounting
|
||||
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.
|
||||
settings-general-fk_settings-reset_settings-reset_hmd_pitch = Reset HMD pitch
|
||||
settings-general-fk_settings-arm_fk-reset_mode-description = Change which arm pose is expected for mounting calibration.
|
||||
|
||||
@@ -850,46 +850,64 @@ export function GeneralSettings() {
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col pt-2">
|
||||
<div className="flex flex-col pt-2 pb-2">
|
||||
<Typography variant="section-title">
|
||||
{l10n.getString('settings-general-fk_settings-reset_settings')}
|
||||
</Typography>
|
||||
</div>
|
||||
<div className="flex flex-col pt-2 pb-3">
|
||||
<div className="grid grid-cols-2 gap-2">
|
||||
<div className="flex flex-col gap-2">
|
||||
<Typography>
|
||||
{l10n.getString(
|
||||
'settings-general-fk_settings-reset_settings-reset_hmd_pitch-description'
|
||||
)}
|
||||
</Typography>
|
||||
<CheckBox
|
||||
variant="toggle"
|
||||
outlined
|
||||
control={control}
|
||||
name="resetsSettings.resetHmdPitch"
|
||||
label={l10n.getString(
|
||||
'settings-general-fk_settings-reset_settings-reset_hmd_pitch'
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex flex-col gap-2 justify-end">
|
||||
<Typography>
|
||||
{l10n.getString(
|
||||
'settings-general-fk_settings-leg_fk-reset_mounting_feet-description-v1'
|
||||
)}
|
||||
</Typography>
|
||||
<CheckBox
|
||||
variant="toggle"
|
||||
outlined
|
||||
control={control}
|
||||
name="resetsSettings.resetMountingFeet"
|
||||
label={l10n.getString(
|
||||
'settings-general-fk_settings-leg_fk-reset_mounting_feet-v1'
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="grid sm:grid-cols-1 gap-3 pb-3">
|
||||
<Typography>
|
||||
{l10n.getString(
|
||||
'settings-general-fk_settings-reset_settings-step_mounting-description'
|
||||
)}
|
||||
</Typography>
|
||||
</div>
|
||||
<div className="grid sm:grid-cols-1 gap-2 pb-3">
|
||||
<CheckBox
|
||||
variant="toggle"
|
||||
outlined
|
||||
control={control}
|
||||
name="resetsSettings.stepMounting"
|
||||
label={l10n.getString(
|
||||
'settings-general-fk_settings-reset_settings-step_mounting'
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
<div className="grid sm:grid-cols-1 gap-3 pb-3">
|
||||
<Typography>
|
||||
{l10n.getString(
|
||||
'settings-general-fk_settings-reset_settings-reset_hmd_pitch-description'
|
||||
)}
|
||||
</Typography>
|
||||
</div>
|
||||
<div className="grid sm:grid-cols-1 gap-3 pb-3">
|
||||
<CheckBox
|
||||
variant="toggle"
|
||||
outlined
|
||||
control={control}
|
||||
name="resetsSettings.resetHmdPitch"
|
||||
label={l10n.getString(
|
||||
'settings-general-fk_settings-reset_settings-reset_hmd_pitch'
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
<div className="grid sm:grid-cols-1 gap-3 pb-3">
|
||||
<Typography>
|
||||
{l10n.getString(
|
||||
'settings-general-fk_settings-leg_fk-reset_mounting_feet-description-v1'
|
||||
)}
|
||||
</Typography>
|
||||
</div>
|
||||
<div className="grid sm:grid-cols-1 gap-3 pb-3">
|
||||
<CheckBox
|
||||
variant="toggle"
|
||||
outlined
|
||||
control={control}
|
||||
name="resetsSettings.resetMountingFeet"
|
||||
label={l10n.getString(
|
||||
'settings-general-fk_settings-leg_fk-reset_mounting_feet-v1'
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
@@ -14,6 +14,7 @@ export interface ResetSettingsForm {
|
||||
yawResetSmoothTime: number;
|
||||
saveMountingReset: boolean;
|
||||
resetHmdPitch: boolean;
|
||||
stepMounting: boolean;
|
||||
}
|
||||
|
||||
export const defaultResetSettings = {
|
||||
@@ -22,6 +23,7 @@ export const defaultResetSettings = {
|
||||
yawResetSmoothTime: 0.0,
|
||||
saveMountingReset: false,
|
||||
resetHmdPitch: false,
|
||||
stepMounting: false,
|
||||
};
|
||||
|
||||
export function loadResetSettings(resetSettingsForm: ResetSettingsForm) {
|
||||
@@ -31,6 +33,7 @@ export function loadResetSettings(resetSettingsForm: ResetSettingsForm) {
|
||||
resetsSettings.yawResetSmoothTime = resetSettingsForm.yawResetSmoothTime;
|
||||
resetsSettings.saveMountingReset = resetSettingsForm.saveMountingReset;
|
||||
resetsSettings.resetHmdPitch = resetSettingsForm.resetHmdPitch;
|
||||
resetsSettings.stepMounting = resetSettingsForm.stepMounting;
|
||||
|
||||
return resetsSettings;
|
||||
}
|
||||
|
||||
@@ -48,6 +48,7 @@ enum class MountingMethods(val id: Int) {
|
||||
}
|
||||
|
||||
class ResetsConfig {
|
||||
var stepMounting = false
|
||||
|
||||
// Always reset mounting for feet
|
||||
var resetMountingFeet = false
|
||||
|
||||
@@ -369,6 +369,7 @@ fun createArmsResetModeSettings(
|
||||
resetsConfig.yawResetSmoothTime,
|
||||
resetsConfig.saveMountingReset,
|
||||
resetsConfig.resetHmdPitch,
|
||||
resetsConfig.stepMounting,
|
||||
)
|
||||
|
||||
fun createSettingsResponse(fbb: FlatBufferBuilder, server: VRServer): Int {
|
||||
|
||||
@@ -332,6 +332,7 @@ class RPCSettingsHandler(var rpcHandler: RPCHandler, var api: ProtocolAPI) {
|
||||
resetsConfig.saveMountingReset = req.resetsSettings().saveMountingReset()
|
||||
resetsConfig.yawResetSmoothTime = req.resetsSettings().yawResetSmoothTime()
|
||||
resetsConfig.resetHmdPitch = req.resetsSettings().resetHmdPitch()
|
||||
resetsConfig.stepMounting = req.resetsSettings().stepMounting()
|
||||
resetsConfig.updateTrackersResetsSettings()
|
||||
}
|
||||
|
||||
|
||||
@@ -1627,7 +1627,7 @@ class HumanSkeleton(
|
||||
if (bodyParts.isEmpty() || bodyParts.contains(BodyPart.HEAD)) {
|
||||
// Only reset if head allowMounting or is computed but not HMD
|
||||
if (it.allowMounting || (it.isComputed && !it.isHmd)) {
|
||||
it.resetsHandler.resetMountingAccel(referenceRotation)
|
||||
it.resetsHandler.resetMounting(referenceRotation)
|
||||
}
|
||||
}
|
||||
referenceRotation = it.getRotation()
|
||||
@@ -1636,7 +1636,7 @@ class HumanSkeleton(
|
||||
for (tracker in trackersToReset) {
|
||||
// Only reset if tracker needsMounting
|
||||
if (tracker != null && tracker.allowMounting && (bodyParts.isEmpty() || bodyParts.contains(tracker.trackerPosition?.bodyPart))) {
|
||||
tracker.resetsHandler.resetMountingAccel(referenceRotation)
|
||||
tracker.resetsHandler.resetMounting(referenceRotation)
|
||||
}
|
||||
}
|
||||
legTweaks.resetBuffer()
|
||||
|
||||
@@ -39,6 +39,7 @@ class TrackerResetsHandler(val tracker: Tracker) {
|
||||
private var yawResetSmoothTime = 0.0f
|
||||
var saveMountingReset = false
|
||||
var resetHmdPitch = false
|
||||
var stepMounting = false
|
||||
var allowDriftCompensation = false
|
||||
var lastResetQuaternion: Quaternion? = null
|
||||
|
||||
@@ -164,6 +165,7 @@ class TrackerResetsHandler(val tracker: Tracker) {
|
||||
yawResetSmoothTime = config.yawResetSmoothTime
|
||||
saveMountingReset = config.saveMountingReset
|
||||
resetHmdPitch = config.resetHmdPitch
|
||||
stepMounting = config.stepMounting
|
||||
}
|
||||
|
||||
fun trySetMountingReset(quat: Quaternion) {
|
||||
@@ -392,18 +394,6 @@ class TrackerResetsHandler(val tracker: Tracker) {
|
||||
tracker.resetFilteringQuats(reference)
|
||||
}
|
||||
|
||||
fun resetMountingAccel(reference: Quaternion) {
|
||||
if (tracker.trackerDataType == TrackerDataType.FLEX_RESISTANCE) {
|
||||
tracker.trackerFlexHandler.resetMax()
|
||||
tracker.resetFilteringQuats(reference)
|
||||
return
|
||||
} else if (tracker.trackerDataType == TrackerDataType.FLEX_ANGLE) {
|
||||
return
|
||||
}
|
||||
|
||||
tracker.startMounting()
|
||||
}
|
||||
|
||||
/**
|
||||
* Perform the math to align the tracker to go forward
|
||||
* and stores it in mountRotFix, and adjusts yawFix
|
||||
@@ -417,6 +407,11 @@ class TrackerResetsHandler(val tracker: Tracker) {
|
||||
return
|
||||
}
|
||||
|
||||
if (stepMounting) {
|
||||
tracker.startMounting()
|
||||
return
|
||||
}
|
||||
|
||||
constraintFix = Quaternion.IDENTITY
|
||||
|
||||
// Get the current calibrated rotation
|
||||
|
||||
Submodule solarxr-protocol updated: fa2895b19a...941f262055
Reference in New Issue
Block a user