Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BVH Status and Paused tracking is not presisted in gui #1332

Merged
merged 8 commits into from
Mar 10, 2025
13 changes: 11 additions & 2 deletions gui/src/components/BVHButton.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useLocalization } from '@fluent/react';
import { useState } from 'react';
import { useEffect, useState } from 'react';
import {
RecordBVHRequestT,
RecordBVHStatusT,
Expand All @@ -8,12 +8,17 @@ import {
import { useWebsocketAPI } from '@/hooks/websocket-api';
import { BigButton } from './commons/BigButton';
import { RecordIcon } from './commons/icon/RecordIcon';
import classNames from 'classnames';

export function BVHButton(props: React.HTMLAttributes<HTMLButtonElement>) {
const { l10n } = useLocalization();
const { useRPCPacket, sendRPCPacket } = useWebsocketAPI();
const [recording, setRecording] = useState(false);

useEffect(() => {
sendRPCPacket(RpcMessage.RecordBVHStatusRequest, new RecordBVHRequestT());
}, []);

const toggleBVH = () => {
const record = new RecordBVHRequestT();
record.stop = recording;
Expand All @@ -29,7 +34,11 @@ export function BVHButton(props: React.HTMLAttributes<HTMLButtonElement>) {
text={l10n.getString(recording ? 'bvh-recording' : 'bvh-start_recording')}
icon={<RecordIcon width={20} />}
onClick={toggleBVH}
className={props.className}
className={classNames(
props.className,
'border',
recording ? 'border-status-critical' : 'border-transparent'
)}
></BigButton>
);
}
7 changes: 6 additions & 1 deletion gui/src/components/ClearDriftCompensationButton.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@ import { useWebsocketAPI } from '@/hooks/websocket-api';
import { BigButton } from './commons/BigButton';
import { TrashIcon } from './commons/icon/TrashIcon';

export function ClearDriftCompensationButton() {
export function ClearDriftCompensationButton({
disabled,
}: {
disabled: boolean;
}) {
const { l10n } = useLocalization();
const { sendRPCPacket } = useWebsocketAPI();

Expand All @@ -18,6 +22,7 @@ export function ClearDriftCompensationButton() {
text={l10n.getString('widget-drift_compensation-clear')}
icon={<TrashIcon size={20} />}
onClick={clearDriftCompensation}
disabled={disabled}
>
{}
</BigButton>
Expand Down
15 changes: 9 additions & 6 deletions gui/src/components/TrackingPauseButton.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { useLocalization } from '@fluent/react';
import { useState } from 'react';
import { useEffect, useState } from 'react';
import {
SetPauseTrackingRequestT,
RpcMessage,
Expand All @@ -10,6 +10,7 @@ import { useWebsocketAPI } from '@/hooks/websocket-api';
import { BigButton } from './commons/BigButton';
import { PlayIcon } from './commons/icon/PlayIcon';
import { PauseIcon } from './commons/icon/PauseIcon';
import classNames from 'classnames';

export function TrackingPauseButton(
props: React.HTMLAttributes<HTMLButtonElement>
Expand All @@ -30,10 +31,12 @@ export function TrackingPauseButton(
}
);

sendRPCPacket(
RpcMessage.TrackingPauseStateRequest,
new TrackingPauseStateRequestT()
);
useEffect(() => {
sendRPCPacket(
RpcMessage.TrackingPauseStateRequest,
new TrackingPauseStateRequestT()
);
}, []);

return (
<BigButton
Expand All @@ -42,7 +45,7 @@ export function TrackingPauseButton(
)}
icon={trackingPause ? <PlayIcon width={20} /> : <PauseIcon width={20} />}
onClick={toggleTracking}
className={props.className}
className={classNames(props.className, 'min-h-24')}
></BigButton>
);
}
6 changes: 3 additions & 3 deletions gui/src/components/WidgetsComponent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,9 @@ export function WidgetsComponent() {
<ClearMountingButton></ClearMountingButton>
<BVHButton></BVHButton>
<TrackingPauseButton></TrackingPauseButton>
{driftCompensationEnabled && (
<ClearDriftCompensationButton></ClearDriftCompensationButton>
)}
<ClearDriftCompensationButton
disabled={!driftCompensationEnabled}
></ClearDriftCompensationButton>
</div>
<div className="w-full">
<OverlayWidget></OverlayWidget>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,15 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
)
}

registerPacketListener(
RpcMessage.RecordBVHStatusRequest,
) { conn: GenericConnection, messageHeader: RpcMessageHeader ->
this.onBVHStatusRequest(
conn,
messageHeader,
)
}

registerPacketListener(
RpcMessage.SkeletonResetAllRequest,
) { conn: GenericConnection, messageHeader: RpcMessageHeader ->
Expand Down Expand Up @@ -300,6 +309,17 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
conn.send(fbb.dataBuffer())
}

fun onBVHStatusRequest(conn: GenericConnection, messageHeader: RpcMessageHeader) {
if (messageHeader.message(RecordBVHStatusRequest()) !is RecordBVHStatusRequest) return

val fbb = FlatBufferBuilder(40)
val status = RecordBVHStatus
.createRecordBVHStatus(fbb, api.server.bvhRecorder.isRecording)
val outbound = this.createRPCMessage(fbb, RpcMessage.RecordBVHStatus, status)
fbb.finish(outbound)
conn.send(fbb.dataBuffer())
}

fun onResetRequest(conn: GenericConnection, messageHeader: RpcMessageHeader) {
val req = messageHeader.message(ResetRequest()) as? ResetRequest ?: return

Expand Down