From 4e6c3a63d0965dda33381a88fa2b450a79e5a04c Mon Sep 17 00:00:00 2001 From: Michael Mainguy Date: Thu, 29 Aug 2024 15:18:14 -0500 Subject: [PATCH] Updated config page. --- src/diagram/diagramManager.ts | 3 +- src/diagram/diagramObject.ts | 1 + src/diagram/types/diagramEntity.ts | 2 +- src/menus/connectionPreview.ts | 1 + src/react/pages/configModal.tsx | 108 ++++++++++++++++++++++++----- 5 files changed, 95 insertions(+), 20 deletions(-) diff --git a/src/diagram/diagramManager.ts b/src/diagram/diagramManager.ts index 2f943bb..6ec1a80 100644 --- a/src/diagram/diagramManager.ts +++ b/src/diagram/diagramManager.ts @@ -79,6 +79,7 @@ export class DiagramManager { template: '#image-template', image: event.detail.data, text: event.detail.name, + type: 'entity', position: {x: 0, y: 1.6, z: 0}, rotation: {x: 0, y: Math.PI, z: 0}, scale: {x: 1, y: 1, z: 1}, @@ -138,7 +139,7 @@ export class DiagramManager { let diagramObject = this._diagramObjects.get(event?.entity?.id); switch (event.type) { case DiagramEventType.CLEAR: - this._diagramObjects.forEach((value, key) => { + this._diagramObjects.forEach((value) => { value.dispose(); }); this._diagramObjects.clear(); diff --git a/src/diagram/diagramObject.ts b/src/diagram/diagramObject.ts index 70e88ed..af32faa 100644 --- a/src/diagram/diagramObject.ts +++ b/src/diagram/diagramObject.ts @@ -177,6 +177,7 @@ export class DiagramObject { position: oldEntity.position, rotation: oldEntity.rotation, scale: oldEntity.scale, + type: 'entity', image: oldEntity.image, template: oldEntity.template, color: oldEntity.color, diff --git a/src/diagram/types/diagramEntity.ts b/src/diagram/types/diagramEntity.ts index b31c350..6bece00 100644 --- a/src/diagram/types/diagramEntity.ts +++ b/src/diagram/types/diagramEntity.ts @@ -50,7 +50,7 @@ export type DiagramEntity = { position?: { x: number, y: number, z: number }; rotation?: { x: number, y: number, z: number }; template?: string; - type: 'Entity' + type: 'entity' text?: string; scale?: { x: number, y: number, z: number }; parent?: string; diff --git a/src/menus/connectionPreview.ts b/src/menus/connectionPreview.ts index d62ca31..047885f 100644 --- a/src/menus/connectionPreview.ts +++ b/src/menus/connectionPreview.ts @@ -101,6 +101,7 @@ export class ConnectionPreview { entity: { from: this._fromId, to: mesh.id, + type: 'entity', template: DiagramTemplates.CONNECTION, color: '#000000' } diff --git a/src/react/pages/configModal.tsx b/src/react/pages/configModal.tsx index 1146b56..e2298ec 100644 --- a/src/react/pages/configModal.tsx +++ b/src/react/pages/configModal.tsx @@ -1,5 +1,5 @@ -import {Group, Modal, NumberInput, SegmentedControl, Slider, Switch} from "@mantine/core"; -import {useState} from "react"; +import {Group, Modal, SegmentedControl, Stack, Switch} from "@mantine/core"; +import {useEffect, useState} from "react"; const locationSnaps = [ {value: ".01", label: '1cm'}, @@ -8,29 +8,101 @@ const locationSnaps = [ {value: ".5", label: '50cm'}, {value: "1", label: '1m'}, ] +const rotationSnaps = [ + {value: "22.5", label: '22.5°'}, + {value: "45", label: '45°'}, + {value: "90", label: '90°'}, + {value: "180", label: '180°'}, + {value: "360", label: '360°'}, +] +let defaultConfig = + { + locationSnap: '.1', + locationSnapEnabled: true, + rotationSnap: '90', + rotationSnapEnabled: true, + flyModeEnabled: true, + snapTurnSnap: '45', + snapTurnSnapEnabled: false + } +try { + const newConfig = JSON.parse(localStorage.getItem('config')); + defaultConfig = {...defaultConfig, ...newConfig}; + console.log(defaultConfig); +} catch (e) { + +} export default function ConfigModal({configOpened, closeConfig}) { - const [locationSnap, setLocationSnap] = useState(.1); - const [locationSnapEnabled, setLocationSnapEnabled] = useState(true); + const [locationSnap, setLocationSnap] = useState(defaultConfig.locationSnap); + const [locationSnapEnabled, setLocationSnapEnabled] = useState(defaultConfig.locationSnapEnabled); + const [snapTurnSnap, setSnapTurnSnap] = useState(defaultConfig.snapTurnSnap); + const [snapTurnSnapEnabled, setSnapTurnSnapEnabled] = useState(defaultConfig.snapTurnSnapEnabled); + const [rotationSnap, setRotationSnap] = useState(defaultConfig.rotationSnap); + const [rotationSnapEnabled, setRotationSnapEnabled] = useState(defaultConfig.rotationSnapEnabled); + const [flyModeEnabled, setFlyModeEnabled] = useState(defaultConfig.flyModeEnabled); + useEffect(() => { + const config = { + locationSnap: locationSnap, + locationSnapEnabled: locationSnapEnabled, + rotationSnap: rotationSnap, + rotationSnapEnabled: rotationSnapEnabled, + snapTurnSnap: snapTurnSnap, + snapTurnSnapEnabled: snapTurnSnapEnabled, + flyModeEnabled: flyModeEnabled + } + localStorage.setItem('config', JSON.stringify(config)) + }, [locationSnap, locationSnapEnabled, rotationSnap, rotationSnapEnabled, snapTurnSnap, snapTurnSnapEnabled, flyModeEnabled]); return (

Configuration

- - - { - setLocationSnapEnabled(e.currentTarget.checked) + + + + + + { + setLocationSnapEnabled(e.currentTarget.checked) + }}/> + + + + + + + { + setRotationSnapEnabled(e.currentTarget.checked) + }}/> + + + { + setFlyModeEnabled(e.currentTarget.checked) }}/> - { - setLocationSnap(parseFloat(e)); - }}/> - + + - - - + checked={snapTurnSnapEnabled} onChange={(e) => { + setSnapTurnSnapEnabled(e.currentTarget.checked) + }}/> + + +
)