From 5791179aece0bd3e3f4e0590160c745e2f0713e1 Mon Sep 17 00:00:00 2001 From: Youwen Wu Date: Thu, 29 Feb 2024 20:11:38 -0800 Subject: [PATCH] feat: new visualization system working --- client/src/app.css | 2 + client/src/lib/Apps/DevTools/DevTools.svelte | 21 +++ .../src/lib/Apps/DevTools/simulateMotion.ts | 15 +- .../lib/Apps/DevTools/telemetrySimulators.ts | 46 +++++- client/src/lib/Dashboard/SpeedLimit.svelte | 8 +- .../CameraControls/CameraControls.svelte | 9 +- .../Visualization/CameraControls/Scene.svelte | 140 +++++++----------- .../CameraControls/utils/cameraStore.ts | 40 ++++- client/src/lib/stores/telemetryStore.ts | 12 +- client/src/lib/utils/initializeTelemetry.ts | 6 +- 10 files changed, 191 insertions(+), 108 deletions(-) diff --git a/client/src/app.css b/client/src/app.css index f7782b4..2898b55 100644 --- a/client/src/app.css +++ b/client/src/app.css @@ -21,6 +21,8 @@ overflow: auto; /* or 'scroll' if you always want scrollability */ scrollbar-width: none; /* Hide scrollbar for Firefox */ -ms-overflow-style: none; /* Hide scrollbar for IE 10+ and Edge */ + + overscroll-behavior: none; } body::-webkit-scrollbar { display: none; diff --git a/client/src/lib/Apps/DevTools/DevTools.svelte b/client/src/lib/Apps/DevTools/DevTools.svelte index f75c868..916b6df 100644 --- a/client/src/lib/Apps/DevTools/DevTools.svelte +++ b/client/src/lib/Apps/DevTools/DevTools.svelte @@ -1,4 +1,8 @@ Simulate random motion + diff --git a/client/src/lib/Dashboard/Visualization/CameraControls/CameraControls.svelte b/client/src/lib/Dashboard/Visualization/CameraControls/CameraControls.svelte index f6d3935..29b96c8 100644 --- a/client/src/lib/Dashboard/Visualization/CameraControls/CameraControls.svelte +++ b/client/src/lib/Dashboard/Visualization/CameraControls/CameraControls.svelte @@ -34,6 +34,7 @@ type PerspectiveCamera, } from 'three' import { DEG2RAD } from 'three/src/math/MathUtils' + import { cameraState } from './utils/cameraStore' const subsetOfTHREE = { Vector2, @@ -70,11 +71,9 @@ const getControls = () => ref - let disableAutoRotate = false - useTask( delta => { - if (autoRotate && !disableAutoRotate) { + if (autoRotate && !$cameraState.userControlled) { getControls().azimuthAngle += 4 * delta * DEG2RAD * autoRotateSpeed } const updated = getControls().update(delta) @@ -91,13 +90,13 @@ { - disableAutoRotate = true + cameraState.set('userControlled', true) }} on:zoom={e => { console.log('zoomstart', e) }} on:controlend={() => { - disableAutoRotate = false + cameraState.set('userControlled', false) }} {...$$restProps} bind:this={$forwardingComponent} diff --git a/client/src/lib/Dashboard/Visualization/CameraControls/Scene.svelte b/client/src/lib/Dashboard/Visualization/CameraControls/Scene.svelte index c39e00d..8e06fe2 100644 --- a/client/src/lib/Dashboard/Visualization/CameraControls/Scene.svelte +++ b/client/src/lib/Dashboard/Visualization/CameraControls/Scene.svelte @@ -1,122 +1,96 @@ { - ref.lookAt(0, 1, 0); + ref.lookAt(0, 1, 0) }} > { - $cameraControls = ref; + $cameraControls = ref }} + autoRotate={$cameraState.mode === 'orbit'} + autoRotateSpeed={3} /> + { // @ts-expect-error - $mesh = ref; + $mesh = ref }} /> diff --git a/client/src/lib/Dashboard/Visualization/CameraControls/utils/cameraStore.ts b/client/src/lib/Dashboard/Visualization/CameraControls/utils/cameraStore.ts index 37a02c6..9a68df5 100644 --- a/client/src/lib/Dashboard/Visualization/CameraControls/utils/cameraStore.ts +++ b/client/src/lib/Dashboard/Visualization/CameraControls/utils/cameraStore.ts @@ -1,7 +1,35 @@ -import type CameraControls from "camera-controls"; -import { writable } from "svelte/store"; -import type { Mesh, Object3DEventMap } from "three"; -import type { Group } from "three/examples/jsm/libs/tween.module.js"; +import type CameraControls from 'camera-controls' +import { writable } from 'svelte/store' +import type { Mesh } from 'three' -export const cameraControls = writable(); -export const mesh = writable(); +export const cameraControls = writable() +export const mesh = writable() + +type CameraMode = + | 'orbit' + | 'follow-facing' + | 'follow-direction' + | 'follow-position' + | 'showcase' + +interface CameraState { + mode: CameraMode + userControlled: boolean +} + +const { set, update, subscribe } = writable({ + mode: 'orbit', + userControlled: false, +}) + +const createCameraState = () => { + return { + update, + subscribe, + set: (prop: keyof CameraState, val: any) => + update(state => ({ ...state, [prop]: val })), + reset: () => set({ mode: 'orbit', userControlled: false }), + } +} + +export const cameraState = createCameraState() diff --git a/client/src/lib/stores/telemetryStore.ts b/client/src/lib/stores/telemetryStore.ts index 4663c97..7521597 100644 --- a/client/src/lib/stores/telemetryStore.ts +++ b/client/src/lib/stores/telemetryStore.ts @@ -1,4 +1,4 @@ -import { writable, readonly } from 'svelte/store' +import { writable, readonly, get } from 'svelte/store' let defaults: TelemetryData = { 'orientation': 0, @@ -28,6 +28,16 @@ const createTelemetryStore = () => { return store }) }, + set: (key: keyof TelemetryData, value: any) => { + let newObj = { + ...get(telemetryStore), + } + newObj = { + ...newObj, + [key]: value, + } + set(newObj) + }, reset: () => set(defaults), } } diff --git a/client/src/lib/utils/initializeTelemetry.ts b/client/src/lib/utils/initializeTelemetry.ts index 3f2d847..68d4fb3 100644 --- a/client/src/lib/utils/initializeTelemetry.ts +++ b/client/src/lib/utils/initializeTelemetry.ts @@ -34,7 +34,11 @@ export const initializeTelemetry = async ( }) const unlistenTelemetry = await listen('telemetry_data', event => { - console.log(event.payload) + const data = JSON.parse(event.payload as string) + // console.log(JSON.parse) + telemetryStore.set('connected', true) + + telemetryStore.set(data['topic_name'], data['data']) }) const unlistenAll = () => {