= {};
+
+ if (settings.toggles) {
+ formData.toggles = Object.keys(settings.toggles).reduce(
+ (curr, key: string) => ({
+ ...curr,
+ [key]: (settings.toggles && (settings.toggles as any)[key]) || false,
+ }),
+ {}
+ );
+ }
+
+ if (settings.ratios) {
+ formData.ratios = Object.keys(settings.ratios).reduce(
+ (curr, key: string) => ({
+ ...curr,
+ [key]: (settings.ratios && (settings.ratios as any)[key]) || 0.0,
+ }),
+ {}
+ );
+ }
+
+ if (settings.filtering) {
+ formData.filtering = {
+ type: settings.filtering.type ?? defaultValues.filtering.type,
+ amount: settings.filtering.amount ?? defaultValues.filtering.amount,
+ };
+ }
+
+ reset({ ...getValues(), ...formData });
+ }, [settings]);
+
+ useRPCPacket(
+ RpcMessage.SkeletonSettingsResponse,
+ (settings: SkeletonSettingsResponseT) => {
+ setSettings(settings);
+ }
+ );
+
+ return (
+ } id="tracking">
+ <>
+
+ {l10n.getString('settings-general-fk_settings')}
+
+
+
+
+ {l10n.getString('settings-general-tracker_mechanics-filtering')}
+
+
+
+
+ {l10n
+ .getString(
+ 'settings-general-tracker_mechanics-filtering-description'
+ )
+ .split('\n')
+ .map((line, i) => (
+ {line}
+ ))}
+
+
+ {l10n.getString('settings-general-tracker_mechanics-filtering-type')}
+
+
+
+
+
+
+
+ percentageFormat.format(value)}
+ min={0.1}
+ max={1.0}
+ step={0.1}
+ />
+
+
+
+
+ {l10n.getString(
+ 'settings-general-fk_settings-leg_tweak-skating_correction'
+ )}
+
+
+ {l10n.getString(
+ 'settings-general-fk_settings-leg_tweak-skating_correction-description'
+ )}
+
+
+
+
+ percentageFormat.format(value)}
+ min={0.1}
+ max={1.0}
+ step={0.1}
+ />
+
+
+
+
+ {l10n.getString('settings-general-fk_settings-leg_fk')}
+
+
+
+
+ {l10n.getString(
+ 'settings-general-fk_settings-leg_tweak-floor_clip-description'
+ )}
+
+
+
+
+
+
+
+ {l10n.getString(
+ 'settings-general-fk_settings-leg_tweak-foot_plant-description'
+ )}
+
+
+
+
+
+
+
+ {l10n.getString(
+ 'settings-general-fk_settings-leg_tweak-toe_snap-description'
+ )}
+
+
+
+
+
+
+
+
+ {l10n.getString('settings-general-fk_settings-arm_fk')}
+
+
+ {l10n.getString('settings-general-fk_settings-arm_fk-description')}
+
+
+
+
+
+
+
+
+ {l10n.getString(
+ 'settings-general-fk_settings-enforce_joint_constraints'
+ )}
+
+
+ {l10n.getString(
+ 'settings-general-fk_settings-enforce_joint_constraints-enforce_constraints-description'
+ )}
+
+
+
+
+
+
+
+
+ {l10n.getString('settings-general-fk_settings-ik')}
+
+
+ {l10n.getString(
+ 'settings-general-fk_settings-ik-use_position-description'
+ )}
+
+
+
+
+
+
+
+
+ {l10n.getString(
+ 'settings-general-fk_settings-self_localization-title'
+ )}
+
+
+ {l10n.getString(
+ 'settings-general-fk_settings-self_localization-description'
+ )}
+
+
+
+
+
+
+
+
+ {l10n.getString(
+ 'settings-general-fk_settings-skeleton_settings-ratios'
+ )}
+
+
+ {l10n.getString(
+ 'settings-general-fk_settings-skeleton_settings-ratios-description'
+ )}
+
+
+
+ percentageFormat.format(value)}
+ min={0.0}
+ max={1.0}
+ step={0.05}
+ />
+ percentageFormat.format(value)}
+ min={0.0}
+ max={1.0}
+ step={0.05}
+ />
+ percentageFormat.format(value)}
+ min={0.0}
+ max={1.0}
+ step={0.05}
+ />
+ percentageFormat.format(value)}
+ min={0.0}
+ max={1.0}
+ step={0.05}
+ />
+
+ >
+
+ );
+}
diff --git a/gui/src/components/stay-aligned/RelaxedPose.tsx b/gui/app/src/components/stay-aligned/RelaxedPose.tsx
similarity index 100%
rename from gui/src/components/stay-aligned/RelaxedPose.tsx
rename to gui/app/src/components/stay-aligned/RelaxedPose.tsx
diff --git a/gui/src/components/stay-aligned/StayAlignedInfo.tsx b/gui/app/src/components/stay-aligned/StayAlignedInfo.tsx
similarity index 100%
rename from gui/src/components/stay-aligned/StayAlignedInfo.tsx
rename to gui/app/src/components/stay-aligned/StayAlignedInfo.tsx
diff --git a/gui/src/components/tracker/SingleTrackerBodyAssignmentMenu.tsx b/gui/app/src/components/tracker/SingleTrackerBodyAssignmentMenu.tsx
similarity index 100%
rename from gui/src/components/tracker/SingleTrackerBodyAssignmentMenu.tsx
rename to gui/app/src/components/tracker/SingleTrackerBodyAssignmentMenu.tsx
diff --git a/gui/src/components/tracker/TrackerBattery.tsx b/gui/app/src/components/tracker/TrackerBattery.tsx
similarity index 100%
rename from gui/src/components/tracker/TrackerBattery.tsx
rename to gui/app/src/components/tracker/TrackerBattery.tsx
diff --git a/gui/src/components/tracker/TrackerCard.tsx b/gui/app/src/components/tracker/TrackerCard.tsx
similarity index 100%
rename from gui/src/components/tracker/TrackerCard.tsx
rename to gui/app/src/components/tracker/TrackerCard.tsx
diff --git a/gui/src/components/tracker/TrackerPartCard.tsx b/gui/app/src/components/tracker/TrackerPartCard.tsx
similarity index 100%
rename from gui/src/components/tracker/TrackerPartCard.tsx
rename to gui/app/src/components/tracker/TrackerPartCard.tsx
diff --git a/gui/src/components/tracker/TrackerSettings.tsx b/gui/app/src/components/tracker/TrackerSettings.tsx
similarity index 97%
rename from gui/src/components/tracker/TrackerSettings.tsx
rename to gui/app/src/components/tracker/TrackerSettings.tsx
index 7f6acd8fd7..75c017d710 100644
--- a/gui/src/components/tracker/TrackerSettings.tsx
+++ b/gui/app/src/components/tracker/TrackerSettings.tsx
@@ -35,7 +35,7 @@ import { SingleTrackerBodyAssignmentMenu } from './SingleTrackerBodyAssignmentMe
import { TrackerCard } from './TrackerCard';
import { Quaternion } from 'three';
import { useAppContext } from '@/hooks/app';
-import { MagnetometerToggleSetting } from '@/components/settings/pages/MagnetometerToggleSetting';
+import { MagnetometerToggleSetting } from '@/components/settings/pages/components/MagnetometerToggleSetting';
import { useSetAtom } from 'jotai';
import { ignoredTrackersAtom } from '@/store/app-store';
import { checkForUpdate } from '@/hooks/firmware-update';
@@ -85,7 +85,6 @@ export function TrackerSettingsPage() {
);
assignreq.bodyPosition = tracker?.tracker.info?.bodyPart || BodyPart.NONE;
assignreq.trackerId = tracker?.tracker.trackerId;
- assignreq.allowDriftCompensation = false;
sendRPCPacket(RpcMessage.AssignTrackerRequest, assignreq);
setSelectRotation(false);
};
@@ -96,7 +95,6 @@ export function TrackerSettingsPage() {
const assignreq = new AssignTrackerRequestT();
assignreq.bodyPosition = role;
assignreq.trackerId = tracker?.tracker.trackerId;
- assignreq.allowDriftCompensation = false;
sendRPCPacket(RpcMessage.AssignTrackerRequest, assignreq);
setSelectBodypart(false);
};
@@ -116,7 +114,6 @@ export function TrackerSettingsPage() {
assignreq.displayName = trackerName ?? null;
assignreq.trackerId = tracker?.tracker.trackerId;
- assignreq.allowDriftCompensation = false;
sendRPCPacket(RpcMessage.AssignTrackerRequest, assignreq);
};
@@ -321,9 +318,9 @@ export function TrackerSettingsPage() {
{l10n.getString('tracker-infos-url')}
- {tracker?.device?.hardwareInfo?.ipAddress?.addr
+ {tracker?.device?.hardwareInfo?.ipAddress
? `udp://${IPv4.fromNumber(
- tracker?.device?.hardwareInfo?.ipAddress?.addr || 0
+ tracker?.device?.hardwareInfo?.ipAddress || 0
).toString()}`
: '--'}
@@ -509,8 +506,7 @@ export function TrackerSettingsPage() {
MagnetometerStatus.NOT_SUPPORTED && (
)}
diff --git a/gui/src/components/tracker/TrackerStatus.tsx b/gui/app/src/components/tracker/TrackerStatus.tsx
similarity index 94%
rename from gui/src/components/tracker/TrackerStatus.tsx
rename to gui/app/src/components/tracker/TrackerStatus.tsx
index 87485ae501..f5e7e1ea34 100644
--- a/gui/src/components/tracker/TrackerStatus.tsx
+++ b/gui/app/src/components/tracker/TrackerStatus.tsx
@@ -12,6 +12,7 @@ const statusLabelMap: { [key: number]: string } = {
[TrackerStatusEnum.OCCLUDED]: 'tracker-status-occluded',
[TrackerStatusEnum.OK]: 'tracker-status-ok',
[TrackerStatusEnum.TIMED_OUT]: 'tracker-status-timed_out',
+ [TrackerStatusEnum.SLEEPING]: 'tracker-status-sleeping',
};
const statusClassMap: { [key: number]: string } = {
@@ -22,6 +23,7 @@ const statusClassMap: { [key: number]: string } = {
[TrackerStatusEnum.OCCLUDED]: 'bg-status-warning',
[TrackerStatusEnum.OK]: 'bg-status-success',
[TrackerStatusEnum.TIMED_OUT]: 'bg-status-warning',
+ [TrackerStatusEnum.SLEEPING]: 'bg-cyan-500',
};
export function TrackerStatus({ status }: { status: number }) {
diff --git a/gui/src/components/tracker/TrackerWifi.tsx b/gui/app/src/components/tracker/TrackerWifi.tsx
similarity index 100%
rename from gui/src/components/tracker/TrackerWifi.tsx
rename to gui/app/src/components/tracker/TrackerWifi.tsx
diff --git a/gui/src/components/tracker/TrackersTable.tsx b/gui/app/src/components/tracker/TrackersTable.tsx
similarity index 96%
rename from gui/src/components/tracker/TrackersTable.tsx
rename to gui/app/src/components/tracker/TrackersTable.tsx
index 3092e953f7..482760904a 100644
--- a/gui/src/components/tracker/TrackersTable.tsx
+++ b/gui/app/src/components/tracker/TrackersTable.tsx
@@ -184,11 +184,8 @@ function Row({
const { tracker, device } = data;
const warning =
- !!highlightedTrackers?.trackers.find(
- (t) =>
- t?.deviceId?.id === tracker.trackerId?.deviceId?.id &&
- t?.trackerNum === tracker.trackerId?.trackerNum
- ) && highlightedTrackers.step;
+ !!highlightedTrackers?.trackers.find((t) => t === tracker.trackerId) &&
+ highlightedTrackers.step;
return (
@@ -253,8 +250,10 @@ function Row({
)}
|
- {tracker.tps && (
- {tracker.tps}
+ {tracker.tps !== null && (
+
+ {tracker.tps.toString()}
+
)}
|
@@ -266,9 +265,9 @@ function Row({
/>
|
- {tracker?.temp && tracker?.temp?.temp != 0 && (
+ {tracker?.temp && tracker?.temp != 0 && (
- {tracker.temp.temp.toFixed(2)}
+ {tracker.temp.toFixed(2)}
)}
|
@@ -293,7 +292,7 @@ function Row({
udp://
{IPv4.fromNumber(
- device?.hardwareInfo?.ipAddress?.addr || 0
+ device?.hardwareInfo?.ipAddress || 0
).toString()}
diff --git a/gui/src/components/tracking-checklist/TrackingChecklist.tsx b/gui/app/src/components/tracking-checklist/TrackingChecklist.tsx
similarity index 94%
rename from gui/src/components/tracking-checklist/TrackingChecklist.tsx
rename to gui/app/src/components/tracking-checklist/TrackingChecklist.tsx
index 40b9d4f4da..d3084d1232 100644
--- a/gui/src/components/tracking-checklist/TrackingChecklist.tsx
+++ b/gui/app/src/components/tracking-checklist/TrackingChecklist.tsx
@@ -6,16 +6,16 @@ import {
} from '@/hooks/tracking-checklist';
import classNames from 'classnames';
import {
- ChangeSettingsRequestT,
EnableSteamVRDriverRequestT,
ResetType,
RpcMessage,
- SettingsRequestT,
- SettingsResponseT,
- SteamVRTrackersSettingT,
TrackingChecklistPublicNetworksT,
TrackingChecklistSteamVRDisconnectedT,
TrackingChecklistStepId,
+ BodyPart,
+ ChangeOutputTrackersSettingsRequestT,
+ OutputTrackersSettingsResponseT,
+ OutputTrackersSettingsRequestT,
} from 'solarxr-protocol';
import { ReactNode, useEffect, useMemo, useState } from 'react';
import { CheckIcon } from '@/components/commons/icon/CheckIcon';
@@ -31,7 +31,7 @@ import {
ArrowRightIcon,
} from '@/components/commons/icon/ArrowIcons';
import { Localized, useLocalization } from '@fluent/react';
-import { WrenchIcon } from '@/components/commons/icon/WrenchIcons';
+import { WrenchIcon } from '@/components/commons/icon/WrenchIcon';
import { TrackingChecklistModal } from './TrackingChecklistModal';
import { NavLink, useNavigate } from 'react-router-dom';
import { useBreakpoint } from '@/hooks/breakpoint';
@@ -176,36 +176,41 @@ function SteamVRDisconnected({
function SteamVRHandsEnabled() {
const { sendRPCPacket, useRPCPacket } = useWebsocketAPI();
const [steamVrTrackers, setSteamVrTrackers] = useState | null>(null);
useEffect(() => {
- sendRPCPacket(RpcMessage.SettingsRequest, new SettingsRequestT());
+ sendRPCPacket(
+ RpcMessage.OutputTrackersSettingsRequest,
+ new OutputTrackersSettingsRequestT()
+ );
}, []);
- useRPCPacket(RpcMessage.SettingsResponse, (settings: SettingsResponseT) => {
- if (settings.steamVrTrackers) {
- setSteamVrTrackers(settings.steamVrTrackers);
+ useRPCPacket(
+ RpcMessage.OutputTrackersSettingsResponse,
+ (settings: OutputTrackersSettingsResponseT) => {
+ if (settings.trackers) {
+ setSteamVrTrackers(settings);
+ }
}
- });
+ );
const disableHandTrackers = () => {
- const settings = new ChangeSettingsRequestT();
- settings.steamVrTrackers = new SteamVRTrackersSettingT(
- steamVrTrackers?.waist,
- steamVrTrackers?.chest,
- steamVrTrackers?.automaticTrackerToggle,
- steamVrTrackers?.leftFoot,
- steamVrTrackers?.rightFoot,
- steamVrTrackers?.leftKnee,
- steamVrTrackers?.rightKnee,
- steamVrTrackers?.leftElbow,
- steamVrTrackers?.rightElbow,
- false,
- false
+ const req = new ChangeOutputTrackersSettingsRequestT();
+
+ const newTrackers = steamVrTrackers?.trackers.filter(
+ (tracker) =>
+ tracker != BodyPart.LEFT_HAND && tracker != BodyPart.RIGHT_HAND
);
- sendRPCPacket(RpcMessage.ChangeSettingsRequest, settings);
+ if (newTrackers !== undefined) {
+ req.trackers = newTrackers;
+ }
+ req.automaticTrackerToggle =
+ steamVrTrackers?.automaticTrackerToggle === true;
+ req.sendDerivedVelocity = steamVrTrackers?.sendDerivedVelocity === true;
+
+ sendRPCPacket(RpcMessage.ChangeOutputTrackersSettingsRequest, req);
};
return (
@@ -299,7 +304,7 @@ const stepContentLookup: Record<
-
+