Skip to content

Commit 9a14eef

Browse files
authored
BVH Status and Paused tracking is not presisted in gui (#1332)
1 parent 264710a commit 9a14eef

File tree

6 files changed

+50
-13
lines changed

6 files changed

+50
-13
lines changed

gui/src/components/BVHButton.tsx

+11-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useLocalization } from '@fluent/react';
2-
import { useState } from 'react';
2+
import { useEffect, useState } from 'react';
33
import {
44
RecordBVHRequestT,
55
RecordBVHStatusT,
@@ -8,12 +8,17 @@ import {
88
import { useWebsocketAPI } from '@/hooks/websocket-api';
99
import { BigButton } from './commons/BigButton';
1010
import { RecordIcon } from './commons/icon/RecordIcon';
11+
import classNames from 'classnames';
1112

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

18+
useEffect(() => {
19+
sendRPCPacket(RpcMessage.RecordBVHStatusRequest, new RecordBVHRequestT());
20+
}, []);
21+
1722
const toggleBVH = () => {
1823
const record = new RecordBVHRequestT();
1924
record.stop = recording;
@@ -29,7 +34,11 @@ export function BVHButton(props: React.HTMLAttributes<HTMLButtonElement>) {
2934
text={l10n.getString(recording ? 'bvh-recording' : 'bvh-start_recording')}
3035
icon={<RecordIcon width={20} />}
3136
onClick={toggleBVH}
32-
className={props.className}
37+
className={classNames(
38+
props.className,
39+
'border',
40+
recording ? 'border-status-critical' : 'border-transparent'
41+
)}
3342
></BigButton>
3443
);
3544
}

gui/src/components/ClearDriftCompensationButton.tsx

+6-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ import { useWebsocketAPI } from '@/hooks/websocket-api';
44
import { BigButton } from './commons/BigButton';
55
import { TrashIcon } from './commons/icon/TrashIcon';
66

7-
export function ClearDriftCompensationButton() {
7+
export function ClearDriftCompensationButton({
8+
disabled,
9+
}: {
10+
disabled: boolean;
11+
}) {
812
const { l10n } = useLocalization();
913
const { sendRPCPacket } = useWebsocketAPI();
1014

@@ -18,6 +22,7 @@ export function ClearDriftCompensationButton() {
1822
text={l10n.getString('widget-drift_compensation-clear')}
1923
icon={<TrashIcon size={20} />}
2024
onClick={clearDriftCompensation}
25+
disabled={disabled}
2126
>
2227
{}
2328
</BigButton>

gui/src/components/TrackingPauseButton.tsx

+9-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useLocalization } from '@fluent/react';
2-
import { useState } from 'react';
2+
import { useEffect, useState } from 'react';
33
import {
44
SetPauseTrackingRequestT,
55
RpcMessage,
@@ -10,6 +10,7 @@ import { useWebsocketAPI } from '@/hooks/websocket-api';
1010
import { BigButton } from './commons/BigButton';
1111
import { PlayIcon } from './commons/icon/PlayIcon';
1212
import { PauseIcon } from './commons/icon/PauseIcon';
13+
import classNames from 'classnames';
1314

1415
export function TrackingPauseButton(
1516
props: React.HTMLAttributes<HTMLButtonElement>
@@ -30,10 +31,12 @@ export function TrackingPauseButton(
3031
}
3132
);
3233

33-
sendRPCPacket(
34-
RpcMessage.TrackingPauseStateRequest,
35-
new TrackingPauseStateRequestT()
36-
);
34+
useEffect(() => {
35+
sendRPCPacket(
36+
RpcMessage.TrackingPauseStateRequest,
37+
new TrackingPauseStateRequestT()
38+
);
39+
}, []);
3740

3841
return (
3942
<BigButton
@@ -42,7 +45,7 @@ export function TrackingPauseButton(
4245
)}
4346
icon={trackingPause ? <PlayIcon width={20} /> : <PauseIcon width={20} />}
4447
onClick={toggleTracking}
45-
className={props.className}
48+
className={classNames(props.className, 'min-h-24')}
4649
></BigButton>
4750
);
4851
}

gui/src/components/WidgetsComponent.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ export function WidgetsComponent() {
5252
<ClearMountingButton></ClearMountingButton>
5353
<BVHButton></BVHButton>
5454
<TrackingPauseButton></TrackingPauseButton>
55-
{driftCompensationEnabled && (
56-
<ClearDriftCompensationButton></ClearDriftCompensationButton>
57-
)}
55+
<ClearDriftCompensationButton
56+
disabled={!driftCompensationEnabled}
57+
></ClearDriftCompensationButton>
5858
</div>
5959
<div className="w-full">
6060
<OverlayWidget></OverlayWidget>

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

+20
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,15 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
8787
)
8888
}
8989

90+
registerPacketListener(
91+
RpcMessage.RecordBVHStatusRequest,
92+
) { conn: GenericConnection, messageHeader: RpcMessageHeader ->
93+
this.onBVHStatusRequest(
94+
conn,
95+
messageHeader,
96+
)
97+
}
98+
9099
registerPacketListener(
91100
RpcMessage.SkeletonResetAllRequest,
92101
) { conn: GenericConnection, messageHeader: RpcMessageHeader ->
@@ -300,6 +309,17 @@ class RPCHandler(private val api: ProtocolAPI) : ProtocolHandler<RpcMessageHeade
300309
conn.send(fbb.dataBuffer())
301310
}
302311

312+
fun onBVHStatusRequest(conn: GenericConnection, messageHeader: RpcMessageHeader) {
313+
if (messageHeader.message(RecordBVHStatusRequest()) !is RecordBVHStatusRequest) return
314+
315+
val fbb = FlatBufferBuilder(40)
316+
val status = RecordBVHStatus
317+
.createRecordBVHStatus(fbb, api.server.bvhRecorder.isRecording)
318+
val outbound = this.createRPCMessage(fbb, RpcMessage.RecordBVHStatus, status)
319+
fbb.finish(outbound)
320+
conn.send(fbb.dataBuffer())
321+
}
322+
303323
fun onResetRequest(conn: GenericConnection, messageHeader: RpcMessageHeader) {
304324
val req = messageHeader.message(ResetRequest()) as? ResetRequest ?: return
305325

0 commit comments

Comments
 (0)