Fix streamIdleMode checkbox being wonky

This commit is contained in:
lee-at-zoo-corp
2025-03-21 16:08:21 -04:00
parent c32a3edb39
commit 2cca1376e2
3 changed files with 47 additions and 33 deletions

View File

@ -275,11 +275,6 @@ export class CameraControls {
>[0]
const cb = ({ data, type }: CallBackParam) => {
// We're reconnecting, so ignore this init proces.
if (this.oldCameraState) {
return
}
const camSettings = data.settings
this.camera.position.set(
camSettings.pos.x,
@ -965,16 +960,16 @@ export class CameraControls {
}
async restoreRemoteCameraStateAndTriggerSync() {
if (!this.oldCameraState) return
await this.engineCommandManager.sendSceneCommand({
type: 'modeling_cmd_req',
cmd_id: uuidv4(),
cmd: {
type: 'default_camera_set_view',
view: this.oldCameraState,
},
})
if (this.oldCameraState) {
await this.engineCommandManager.sendSceneCommand({
type: 'modeling_cmd_req',
cmd_id: uuidv4(),
cmd: {
type: 'default_camera_set_view',
view: this.oldCameraState,
},
})
}
await this.engineCommandManager.sendSceneCommand({
type: 'modeling_cmd_req',

View File

@ -1494,6 +1494,7 @@ export class EngineCommandManager extends EventTarget {
})
this._camControlsCameraChange()
// eslint-disable-next-line @typescript-eslint/no-floating-promises
this.sendSceneCommand({
// CameraControls subscribes to default_camera_get_settings response events
@ -1504,6 +1505,7 @@ export class EngineCommandManager extends EventTarget {
type: 'default_camera_get_settings',
},
})
setIsStreamReady(true)
// Other parts of the application should use this to react on scene ready.
@ -1717,7 +1719,7 @@ export class EngineCommandManager extends EventTarget {
cmd: {
type: 'reconfigure_stream',
...this.streamDimensions,
fps: 30,
fps: 60, // This is required but it does next to nothing
},
}
this.engineConnection?.send(resizeCmd)

View File

@ -219,16 +219,32 @@ export function createSettings() {
(typeof v === 'number' &&
v >= 1 * MS_IN_MINUTE &&
v <= 60 * MS_IN_MINUTE),
Component: ({ value, updateValue }) => (
Component: ({ value: settingValueInStorage, updateValue: writeSettingValueToStorage }) => {
const [timeoutId, setTimeoutId] = useState(undefined)
const [preview, setPreview] = useState(settingValueInStorage === undefined ? settingValueInStorage : (settingValueInStorage / MS_IN_MINUTE))
const onChangeRange = (e: React.SyntheticEvent) => setPreview(e.currentTarget.value)
const onSaveRange = (e: React.SyntheticEvent) => {
if (preview === undefined) return
writeSettingValueToStorage(Number(e.currentTarget.value) * MS_IN_MINUTE)
}
return (
<div className="flex item-center gap-4 px-2 m-0 py-0">
<div className="flex flex-col">
<input
type="checkbox"
checked={value !== undefined}
onChange={(e) =>
updateValue(
!e.currentTarget.checked ? undefined : 5 * MS_IN_MINUTE
)
checked={settingValueInStorage !== undefined}
onChange={(event) => {
if (timeoutId) { return }
const isChecked = event.currentTarget.checked
clearTimeout(timeoutId)
setTimeoutId(setTimeout(() => {
const requested = !isChecked ? undefined : 5
setPreview(requested)
writeSettingValueToStorage(requested === undefined ? undefined : Number(requested) * MS_IN_MINUTE)
setTimeoutId(undefined)
}, 100))
}
}
className="block w-4 h-4"
/>
@ -237,13 +253,14 @@ export function createSettings() {
<div className="flex flex-col grow">
<input
type="range"
onChange={(e) =>
updateValue(Number(e.currentTarget.value) * MS_IN_MINUTE)
}
disabled={value === undefined}
onChange={onChangeRange}
onMouseUp={onSaveRange}
onKeyUp={onSaveRange}
onPointerUp={onSaveRange}
disabled={preview === undefined}
value={
value !== null && value !== undefined
? value / MS_IN_MINUTE
preview !== null && preview !== undefined
? preview
: 5
}
min={1}
@ -251,18 +268,18 @@ export function createSettings() {
step={1}
className="block flex-1"
/>
{value !== undefined && value !== null && (
{preview !== undefined && preview !== null && (
<div>
{value / MS_IN_MINUTE === 60
{preview / MS_IN_MINUTE === 60
? '1 hour'
: value / MS_IN_MINUTE === 1
: preview / MS_IN_MINUTE === 1
? '1 minute'
: value / MS_IN_MINUTE + ' minutes'}
: preview + ' minutes'}
</div>
)}
</div>
</div>
),
)},
}),
allowOrbitInSketchMode: new Setting<boolean>({
defaultValue: false,