diff --git a/packages/scene-composer/package.json b/packages/scene-composer/package.json index 5732af5e7..18eca718f 100644 --- a/packages/scene-composer/package.json +++ b/packages/scene-composer/package.json @@ -154,10 +154,10 @@ "jest": { "coverageThreshold": { "global": { - "lines": 77.00, - "statements": 76.00, - "functions": 77.0, - "branches": 63.0, + "lines": 77.55, + "statements": 76.71, + "functions": 77.15, + "branches": 63.49, "branchesTrue": 100 } } diff --git a/packages/scene-composer/src/components/panels/SceneNodeInspectorPanel.tsx b/packages/scene-composer/src/components/panels/SceneNodeInspectorPanel.tsx index 2474f5b9f..520c48bdc 100644 --- a/packages/scene-composer/src/components/panels/SceneNodeInspectorPanel.tsx +++ b/packages/scene-composer/src/components/panels/SceneNodeInspectorPanel.tsx @@ -29,6 +29,7 @@ export const SceneNodeInspectorPanel: React.FC = () => { const intl = useIntl(); const tagResizeEnabled = getGlobalSettings().featureConfig[COMPOSER_FEATURES.TagResize]; + const subModelMovementEnabled = getGlobalSettings().featureConfig[COMPOSER_FEATURES.SubModelMovement]; const i18nKnownComponentTypesStrings = defineMessages({ [KnownComponentType.ModelRef]: { @@ -81,6 +82,13 @@ export const SceneNodeInspectorPanel: React.FC = () => { [selectedSceneNode], ); + const isSubModelComponent = useMemo( + () => !!findComponentByType(selectedSceneNode, KnownComponentType.SubModelRef), + [selectedSceneNode], + ); + + const transformVisible = !isSubModelComponent || subModelMovementEnabled; + const shouldShowScale = !((isTagComponent && !tagResizeEnabled) || isCameraComponent); const readonly: Triplet = [false, false, false]; @@ -133,7 +141,7 @@ export const SceneNodeInspectorPanel: React.FC = () => { handleInputChanges({ name: e?.toString() })} /> - {!isEnvironmentNode(selectedSceneNode) && ( + {!isEnvironmentNode(selectedSceneNode) && transformVisible && ( new TransformControlsImpl(camera, domElement)); const tagResizeEnabled = getGlobalSettings().featureConfig[COMPOSER_FEATURES.TagResize]; + const subModelMovementEnabled = getGlobalSettings().featureConfig[COMPOSER_FEATURES.SubModelMovement]; const isTagComponent = useMemo( () => !!findComponentByType(selectedSceneNode, KnownComponentType.Tag), [selectedSceneNode], ); + const isSubModelComponent = useMemo( + () => !!findComponentByType(selectedSceneNode, KnownComponentType.SubModelRef), + [selectedSceneNode], + ); + + const transformVisible = !isSubModelComponent || subModelMovementEnabled; + // Set transform controls' camera useEffect(() => { setTransformControls(transformControls); @@ -68,7 +76,7 @@ export function EditorTransformControls() { // Update transform controls' attached object useEffect(() => { - if (selectedSceneNodeRef && !isEnvironmentNode(selectedSceneNode)) { + if (selectedSceneNodeRef && !isEnvironmentNode(selectedSceneNode) && transformVisible) { const object3d = getObject3DBySceneNodeRef(selectedSceneNodeRef); if (object3d) { log?.verbose('attach transform controls to', object3d); diff --git a/packages/scene-composer/src/interfaces/feature.ts b/packages/scene-composer/src/interfaces/feature.ts index a21bebba0..4961cc269 100644 --- a/packages/scene-composer/src/interfaces/feature.ts +++ b/packages/scene-composer/src/interfaces/feature.ts @@ -11,6 +11,7 @@ export enum COMPOSER_FEATURES { CameraView = 'CameraView', EnvironmentModel = 'EnvironmentModel', TagResize = 'TagResize', + SubModelMovement = 'SubModelMovement', } export type FeatureConfig = Partial>; diff --git a/packages/scene-composer/stories/SceneComposer.stories.tsx b/packages/scene-composer/stories/SceneComposer.stories.tsx index 95b7fe704..7fe4d2017 100644 --- a/packages/scene-composer/stories/SceneComposer.stories.tsx +++ b/packages/scene-composer/stories/SceneComposer.stories.tsx @@ -152,6 +152,7 @@ const knobsConfigurationDecorator = [ [COMPOSER_FEATURES.CameraView]: true, [COMPOSER_FEATURES.EnvironmentModel]: false, [COMPOSER_FEATURES.TagResize]: true, + [COMPOSER_FEATURES.SubModelMovement]: false, ...args.config.featureConfig, }, ...args.config,