import type {VFC} from 'react' import React from 'react' import TransformControlsModeSelect from './TransformControlsModeSelect' import {useEditorStore} from '../store' import shallow from 'zustand/shallow' import ReferenceWindow from './ReferenceWindow' import TransformControlsSpaceSelect from './TransformControlsSpaceSelect' import ViewportShadingSelect from './ViewportShadingSelect' import {AiFillEye, GiPocketBow, RiFocus3Line} from 'react-icons/all' import {Vector3} from 'three' import {IconButton, Button, SettingsButton} from './elements' import ViewportSettings from './ViewportSettings' import type {$FixMe} from '@theatre/shared/utils/types' import studio from '@theatre/studio' import {getSelected} from './useSelected' import {useVal} from '@theatre/dataverse-react' const UI: VFC = () => { const [ editorObject, transformControlsMode, transformControlsSpace, viewportShading, setTransformControlsMode, setTransformControlsSpace, setViewportShading, ] = useEditorStore( (state) => [ state.editorObject, state.transformControlsMode, state.transformControlsSpace, state.viewportShading, state.setTransformControlsMode, state.setTransformControlsSpace, state.setViewportShading, ], shallow, ) const referenceWindowSize = useVal(editorObject?.props.referenceWindowSize) ?? 120 if (!editorObject) return <> return (
setTransformControlsMode(value)} />
} onClick={() => { const orbitControls = useEditorStore.getState().orbitControlsRef?.current const selected = getSelected() let focusObject if (selected) { focusObject = useEditorStore.getState().editablesSnapshot![selected] .proxyObject } if (orbitControls && focusObject) { focusObject.getWorldPosition( // @ts-ignore TODO orbitControls.target as Vector3, ) } }} />
} onClick={() => { const camera = ( useEditorStore.getState().orbitControlsRef ?.current as $FixMe )?.object const selected = getSelected() let proxyObject if (selected) { proxyObject = useEditorStore.getState().editablesSnapshot![selected] .proxyObject if (proxyObject && camera) { const direction = new Vector3() const position = camera.position.clone() camera.getWorldDirection(direction) proxyObject.position.set(0, 0, 0) proxyObject.lookAt(direction) proxyObject.parent!.worldToLocal(position) proxyObject.position.copy(position) proxyObject.updateMatrix() } } }} />
} label="Viewport settings">
{/* Bottom-left corner*/}
) } export default UI