diff --git a/src/editor/Editor.js b/src/editor/Editor.js
index 6dc576f1..c24521c3 100644
--- a/src/editor/Editor.js
+++ b/src/editor/Editor.js
@@ -350,7 +350,7 @@ export default class Editor extends EventEmitter {
const scene = this.scene;
- const floorPlanNode = scene.findNodeByType(FloorPlanNode);
+ const floorPlanNode = scene.findNodeByType(FloorPlanNode, false);
if (floorPlanNode) {
await floorPlanNode.generate(signal);
diff --git a/src/editor/nodes/EditorNodeMixin.js b/src/editor/nodes/EditorNodeMixin.js
index 83ff002c..cf55c22f 100644
--- a/src/editor/nodes/EditorNodeMixin.js
+++ b/src/editor/nodes/EditorNodeMixin.js
@@ -10,6 +10,7 @@ import { Color, Object3D } from "three";
import serializeColor from "../utils/serializeColor";
import LoadingCube from "../objects/LoadingCube";
import ErrorIcon from "../objects/ErrorIcon";
+import traverseFilteredSubtrees from "../utils/traverseFilteredSubtrees";
export default function EditorNodeMixin(Object3DClass) {
return class extends Object3DClass {
@@ -56,7 +57,13 @@ export default function EditorNodeMixin(Object3DClass) {
const visibleComponent = json.components.find(c => c.name === "visible");
if (visibleComponent) {
- node.visible = visibleComponent.props.visible;
+ node._visible = visibleComponent.props.visible;
+ }
+
+ const editorSettingsComponent = json.components.find(c => c.name === "editor-settings");
+
+ if (editorSettingsComponent) {
+ node.enabled = editorSettingsComponent.props.enabled;
}
}
@@ -70,13 +77,14 @@ export default function EditorNodeMixin(Object3DClass) {
this.nodeName = this.constructor.nodeName;
this.name = this.constructor.nodeName;
this.isNode = true;
- this.isCollapsed = false;
this.disableTransform = this.constructor.disableTransform;
this.useMultiplePlacementMode = this.constructor.useMultiplePlacementMode;
this.ignoreRaycast = this.constructor.ignoreRaycast;
this.staticMode = StaticModes.Inherits;
this.originalStaticMode = null;
+ this.enabled = true;
+ this._visible = true;
this.saveParent = false;
this.loadingCube = null;
this.errorIcon = null;
@@ -110,10 +118,20 @@ export default function EditorNodeMixin(Object3DClass) {
}
this.issues = source.issues.slice();
+ this._visible = source._visible;
+ this.enabled = source.enabled;
return this;
}
+ get visible() {
+ return this.enabled && this._visible;
+ }
+
+ set visible(value) {
+ this._visible = value;
+ }
+
onPlay() {}
onUpdate(dt) {
@@ -163,7 +181,13 @@ export default function EditorNodeMixin(Object3DClass) {
{
name: "visible",
props: {
- visible: this.visible
+ visible: this._visible
+ }
+ },
+ {
+ name: "editor-settings",
+ props: {
+ enabled: this.enabled
}
}
]
@@ -345,40 +369,46 @@ export default function EditorNodeMixin(Object3DClass) {
return isDynamic(this);
}
- findNodeByType(nodeType) {
- if (this.constructor === nodeType) {
- return this;
- }
+ findNodeByType(nodeType, includeDisabled = true) {
+ let node = null;
- for (const child of this.children) {
- if (child.isNode) {
- const result = child.findNodeByType(nodeType);
-
- if (result) {
- return result;
- }
+ traverseFilteredSubtrees(this, child => {
+ if (node) {
+ return false;
}
- }
- return null;
+ if (!child.isNode) {
+ return;
+ }
+
+ if (!child.enabled && !includeDisabled) {
+ return false;
+ }
+
+ if (child.constructor === nodeType) {
+ node = child;
+ }
+ });
+
+ return node;
}
- getNodesByType(nodeType) {
+ getNodesByType(nodeType, includeDisabled = true) {
const nodes = [];
- if (this.constructor === nodeType) {
- nodes.push(this);
- }
-
- for (const child of this.children) {
- if (child.isNode) {
- const results = child.getNodesByType(nodeType);
-
- for (const result of results) {
- nodes.push(result);
- }
+ traverseFilteredSubtrees(this, child => {
+ if (!child.isNode) {
+ return;
}
- }
+
+ if (!child.enabled && !includeDisabled) {
+ return false;
+ }
+
+ if (child.constructor === nodeType) {
+ nodes.push(this);
+ }
+ });
return nodes;
}
diff --git a/src/editor/nodes/FloorPlanNode.js b/src/editor/nodes/FloorPlanNode.js
index 848e6e77..8f647f60 100644
--- a/src/editor/nodes/FloorPlanNode.js
+++ b/src/editor/nodes/FloorPlanNode.js
@@ -9,6 +9,7 @@ import RecastClient from "../recast/RecastClient";
import HeightfieldClient from "../heightfield/HeightfieldClient";
import SpawnPointNode from "../nodes/SpawnPointNode";
import * as recastWasmUrl from "recast-wasm/dist/recast.wasm";
+import traverseFilteredSubtrees from "../utils/traverseFilteredSubtrees";
const recastClient = new RecastClient();
const heightfieldClient = new HeightfieldClient();
@@ -102,13 +103,17 @@ export default class FloorPlanNode extends EditorNodeMixin(FloorPlan) {
const collidableMeshes = [];
const walkableMeshes = [];
- const groundPlaneNode = this.editor.scene.findNodeByType(GroundPlaneNode);
+ const groundPlaneNode = this.editor.scene.findNodeByType(GroundPlaneNode, false);
if (groundPlaneNode && groundPlaneNode.walkable) {
walkableMeshes.push(groundPlaneNode.walkableMesh);
}
- this.editor.scene.traverse(object => {
+ traverseFilteredSubtrees(this.editor.scene, object => {
+ if (!object.enabled) {
+ return false;
+ }
+
if (object.isNode && object.model && (object.collidable || object.walkable)) {
object.model.traverse(child => {
if (child.isMesh) {
@@ -124,7 +129,7 @@ export default class FloorPlanNode extends EditorNodeMixin(FloorPlan) {
}
});
- const boxColliderNodes = this.editor.scene.getNodesByType(BoxColliderNode);
+ const boxColliderNodes = this.editor.scene.getNodesByType(BoxColliderNode, false);
for (const node of boxColliderNodes) {
if (node.walkable) {
@@ -179,7 +184,7 @@ export default class FloorPlanNode extends EditorNodeMixin(FloorPlan) {
let heightfield = null;
if (!this.forceTrimesh) {
- const spawnPoints = this.editor.scene.getNodesByType(SpawnPointNode);
+ const spawnPoints = this.editor.scene.getNodesByType(SpawnPointNode, false);
let minY = Number.POSITIVE_INFINITY;
for (let j = 0; j < spawnPoints.length; j++) {
diff --git a/src/editor/nodes/SceneNode.js b/src/editor/nodes/SceneNode.js
index 785415c7..93de4cba 100644
--- a/src/editor/nodes/SceneNode.js
+++ b/src/editor/nodes/SceneNode.js
@@ -7,6 +7,7 @@ import GroupNode from "./GroupNode";
import getNodeWithUUID from "../utils/getNodeWithUUID";
import serializeColor from "../utils/serializeColor";
import { DistanceModelType } from "../objects/AudioSource";
+import traverseFilteredSubtrees from "../utils/traverseFilteredSubtrees";
// Migrate v1 spoke scene to v2
function migrateV1ToV2(json) {
@@ -528,7 +529,11 @@ export default class SceneNode extends EditorNodeMixin(Scene) {
});
for (const node of nodeList) {
- node.prepareForExport(ctx);
+ if (node.enabled) {
+ node.prepareForExport(ctx);
+ } else {
+ node.parent.remove(node);
+ }
}
this.addGLTFComponent("background", {
@@ -617,8 +622,16 @@ export default class SceneNode extends EditorNodeMixin(Scene) {
getAnimationClips() {
const animations = [];
- this.traverse(child => {
- if (child.isNode && child.type === "Model") {
+ traverseFilteredSubtrees(this, child => {
+ if (!child.isNode) {
+ return;
+ }
+
+ if (!child.enabled) {
+ return false;
+ }
+
+ if (child.type === "Model") {
animations.push(...child.clips);
}
});
@@ -630,18 +643,23 @@ export default class SceneNode extends EditorNodeMixin(Scene) {
const contentAttributions = [];
const seenAttributions = new Set();
- this.traverse(obj => {
- if (!(obj.isNode && obj.attribution)) return;
+ traverseFilteredSubtrees(this, obj => {
+ if (!obj.isNode) {
+ return;
+ }
+
+ if (!obj.enabled) {
+ return false;
+ }
+
const attribution = obj.attribution;
if (!attribution) return;
- if (attribution) {
- const attributionKey = attribution.url || `${attribution.title}_${attribution.author}`;
- if (seenAttributions.has(attributionKey)) return;
- seenAttributions.add(attributionKey);
- contentAttributions.push(attribution);
- }
+ const attributionKey = attribution.url || `${attribution.title}_${attribution.author}`;
+ if (seenAttributions.has(attributionKey)) return;
+ seenAttributions.add(attributionKey);
+ contentAttributions.push(attribution);
});
return contentAttributions;
diff --git a/src/editor/utils/traverseFilteredSubtrees.js b/src/editor/utils/traverseFilteredSubtrees.js
new file mode 100644
index 00000000..1fc2969f
--- /dev/null
+++ b/src/editor/utils/traverseFilteredSubtrees.js
@@ -0,0 +1,11 @@
+export default function traverseFilteredSubtrees(object, cb) {
+ if (cb(object) === false) {
+ return;
+ }
+
+ const children = object.children;
+
+ for (let i = 0; i < children.length; i++) {
+ traverseFilteredSubtrees(children[i], cb);
+ }
+}
diff --git a/src/ui/hierarchy/HierarchyPanelContainer.js b/src/ui/hierarchy/HierarchyPanelContainer.js
index ca79eaaf..ed2ff565 100644
--- a/src/ui/hierarchy/HierarchyPanelContainer.js
+++ b/src/ui/hierarchy/HierarchyPanelContainer.js
@@ -132,6 +132,7 @@ const TreeNodeLabel = styled.div`
color: ${props => (props.isOver && props.canDrop ? props.theme.text : "inherit")};
border-radius: 4px;
padding: 0 2px;
+ text-decoration: ${props => (props.enabled ? "none" : "line-through")};
`;
function borderStyle({ isOver, canDrop, position }) {
@@ -173,7 +174,7 @@ function TreeNode({
style
}) {
const node = nodes[index];
- const { isLeaf, object, depth, selected, active, iconComponent, isCollapsed, childIndex, lastChild } = node;
+ const { isLeaf, object, depth, selected, active, iconComponent, isExpanded, childIndex, lastChild, enabled } = node;
const editor = useContext(EditorContext);
@@ -432,8 +433,8 @@ function TreeNode({
{isLeaf ? (
) : (
-
- {isCollapsed ? : }
+
+ {isExpanded ? : }
)}
@@ -452,7 +453,7 @@ function TreeNode({
/>
) : (
-
+
{object.name}
)}
@@ -485,9 +486,10 @@ TreeNode.propTypes = {
selected: PropTypes.bool,
active: PropTypes.bool,
iconComponent: PropTypes.object,
- isCollapsed: PropTypes.bool,
+ isExpanded: PropTypes.bool,
childIndex: PropTypes.number.isRequired,
- lastChild: PropTypes.bool.isRequired
+ lastChild: PropTypes.bool.isRequired,
+ enabled: PropTypes.bool.isRequired
})
),
renamingNode: PropTypes.object,
@@ -506,38 +508,41 @@ TreeNode.propTypes = {
const MemoTreeNode = memo(TreeNode, areEqual);
-function* treeWalker(editor, collapsedNodes) {
+function* treeWalker(editor, expandedNodes) {
const stack = [];
stack.push({
depth: 0,
object: editor.scene,
childIndex: 0,
- lastChild: true
+ lastChild: true,
+ parentEnabled: true
});
while (stack.length !== 0) {
- const { depth, object, childIndex, lastChild } = stack.pop();
+ const { depth, object, childIndex, lastChild, parentEnabled } = stack.pop();
const NodeEditor = editor.getNodeEditor(object) || DefaultNodeEditor;
const iconComponent = NodeEditor.iconComponent || DefaultNodeEditor.iconComponent;
- const isCollapsed = collapsedNodes[object.id];
+ const isExpanded = expandedNodes[object.id] || object === editor.scene;
+ const enabled = parentEnabled && object.enabled;
yield {
id: object.id,
isLeaf: object.children.filter(c => c.isNode).length === 0,
- isCollapsed,
+ isExpanded,
depth,
object,
iconComponent,
selected: editor.selected.indexOf(object) !== -1,
active: editor.selected.length > 0 && object === editor.selected[editor.selected.length - 1],
+ enabled,
childIndex,
lastChild
};
- if (object.children.length !== 0 && !isCollapsed) {
+ if (object.children.length !== 0 && isExpanded) {
for (let i = object.children.length - 1; i >= 0; i--) {
const child = object.children[i];
@@ -546,7 +551,8 @@ function* treeWalker(editor, collapsedNodes) {
depth: depth + 1,
object: child,
childIndex: i,
- lastChild: i === 0
+ lastChild: i === 0,
+ parentEnabled: enabled
});
}
}
@@ -558,68 +564,68 @@ export default function HierarchyPanel() {
const editor = useContext(EditorContext);
const onUpload = useUpload(uploadOptions);
const [renamingNode, setRenamingNode] = useState(null);
- const [collapsedNodes, setCollapsedNodes] = useState({});
+ const [expandedNodes, setExpandedNodes] = useState({});
const [nodes, setNodes] = useState([]);
const updateNodeHierarchy = useCallback(() => {
- setNodes(Array.from(treeWalker(editor, collapsedNodes)));
- }, [editor, collapsedNodes]);
+ setNodes(Array.from(treeWalker(editor, expandedNodes)));
+ }, [editor, expandedNodes]);
const expandNode = useCallback(
node => {
- delete collapsedNodes[node.id];
- setCollapsedNodes({ ...collapsedNodes });
+ setExpandedNodes({ ...expandedNodes, [node.id]: true });
},
- [collapsedNodes]
+ [expandedNodes]
);
const collapseNode = useCallback(
node => {
- setCollapsedNodes({ ...collapsedNodes, [node.id]: true });
+ delete expandedNodes[node.id];
+ setExpandedNodes({ ...expandedNodes });
},
- [setCollapsedNodes, collapsedNodes]
+ [setExpandedNodes, expandedNodes]
);
const expandChildren = useCallback(
node => {
node.object.traverse(child => {
if (child.isNode) {
- delete collapsedNodes[child.id];
+ expandedNodes[child.id] = true;
}
});
- setCollapsedNodes({ ...collapsedNodes });
+ setExpandedNodes({ ...expandedNodes });
},
- [setCollapsedNodes, collapsedNodes]
+ [setExpandedNodes, expandedNodes]
);
const collapseChildren = useCallback(
node => {
node.object.traverse(child => {
if (child.isNode) {
- collapsedNodes[child.id] = true;
+ delete expandedNodes[child.id];
}
});
- setCollapsedNodes({ ...collapsedNodes });
+ setExpandedNodes({ ...expandedNodes });
},
- [setCollapsedNodes, collapsedNodes]
+ [setExpandedNodes, expandedNodes]
);
const onExpandAllNodes = useCallback(() => {
- setCollapsedNodes({});
- }, [setCollapsedNodes]);
-
- const onCollapseAllNodes = useCallback(() => {
- const newCollapsedNodes = {};
+ const newExpandedNodes = {};
editor.scene.traverse(child => {
if (child.isNode) {
- newCollapsedNodes[child.id] = true;
+ newExpandedNodes[child.id] = true;
}
});
- setCollapsedNodes(newCollapsedNodes);
- }, [editor, setCollapsedNodes]);
+ setExpandedNodes(newExpandedNodes);
+ }, [editor, setExpandedNodes]);
+
+ const onCollapseAllNodes = useCallback(() => {
+ setExpandedNodes({});
+ }, [setExpandedNodes]);
const onObjectChanged = useCallback(
(objects, propertyName) => {
- if (propertyName === "name" || !propertyName) {
+ if (propertyName === "name" || propertyName === "enabled" || !propertyName) {
updateNodeHierarchy();
}
},
@@ -664,13 +670,13 @@ export default function HierarchyPanel() {
const onToggle = useCallback(
(_e, node) => {
- if (collapsedNodes[node.id]) {
- expandNode(node);
- } else {
+ if (expandedNodes[node.id]) {
collapseNode(node);
+ } else {
+ expandNode(node);
}
},
- [collapsedNodes, expandNode, collapseNode]
+ [expandedNodes, expandNode, collapseNode]
);
const onKeyDown = useCallback(
@@ -838,7 +844,7 @@ export default function HierarchyPanel() {
useEffect(() => {
updateNodeHierarchy();
- }, [collapsedNodes, updateNodeHierarchy]);
+ }, [expandedNodes, updateNodeHierarchy]);
return (
diff --git a/src/ui/properties/PropertiesPanelContainer.js b/src/ui/properties/PropertiesPanelContainer.js
index 539a3f96..85838f57 100644
--- a/src/ui/properties/PropertiesPanelContainer.js
+++ b/src/ui/properties/PropertiesPanelContainer.js
@@ -98,7 +98,11 @@ class PropertiesPanelContainer extends Component {
};
onChangeVisible = value => {
- this.props.editor.setPropertySelected("visible", value);
+ this.props.editor.setPropertySelected("_visible", value);
+ };
+
+ onChangeEnabled = value => {
+ this.props.editor.setPropertySelected("enabled", value);
};
render() {
@@ -140,9 +144,14 @@ class PropertiesPanelContainer extends Component {
{activeNode.nodeName !== "Scene" && (
-
-
-
+ <>
+
+
+
+
+
+
+ >
)}
{!disableTransform && }
diff --git a/test/integration/snapshots/Editor.test.js.md b/test/integration/snapshots/Editor.test.js.md
index 3ac6f466..29908e70 100644
--- a/test/integration/snapshots/Editor.test.js.md
+++ b/test/integration/snapshots/Editor.test.js.md
@@ -38,6 +38,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'box-collider',
props: {},
@@ -75,6 +81,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'trigger-volume',
props: {
@@ -120,6 +132,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'spawner',
props: {
@@ -160,6 +178,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'group',
props: {},
@@ -197,6 +221,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'video',
props: {
@@ -249,6 +279,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'image',
props: {
@@ -292,6 +328,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'gltf-model',
props: {
@@ -351,6 +393,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'ambient-light',
props: {
@@ -391,6 +439,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'spawn-point',
props: {},
@@ -428,6 +482,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'gltf-model',
props: {
@@ -491,6 +551,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'point-light',
props: {
@@ -539,6 +605,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'directional-light',
props: {
@@ -586,6 +658,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'spot-light',
props: {
@@ -636,6 +714,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'floor-plan',
props: {
@@ -684,6 +768,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'image',
props: {
@@ -727,6 +817,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'link',
props: {
@@ -766,6 +862,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'skybox',
props: {
@@ -812,6 +914,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'ground-plane',
props: {
@@ -861,6 +969,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'video',
props: {
@@ -913,6 +1027,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'spawn-point',
props: {},
@@ -950,6 +1070,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'hemisphere-light',
props: {
@@ -991,6 +1117,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'group',
props: {},
@@ -1079,6 +1211,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'trigger-volume',
props: {
@@ -1124,6 +1262,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'point-light',
props: {
@@ -1211,6 +1355,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'hemisphere-light',
props: {
@@ -1252,6 +1402,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'floor-plan',
props: {
@@ -1300,6 +1456,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'ambient-light',
props: {
@@ -1340,6 +1502,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'simple-water',
props: {
@@ -1400,6 +1568,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'spawn-point',
props: {},
@@ -1437,6 +1611,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'kit-piece',
props: {
@@ -1502,6 +1682,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'link',
props: {
@@ -1541,6 +1727,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'kit-piece',
props: {
@@ -1606,6 +1798,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'gltf-model',
props: {
@@ -1665,6 +1863,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'particle-emitter',
props: {
@@ -1731,6 +1935,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'image',
props: {
@@ -1774,6 +1984,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'video',
props: {
@@ -1826,6 +2042,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'box-collider',
props: {},
@@ -1863,6 +2085,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'spawner',
props: {
@@ -1903,6 +2131,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'media-frame',
props: {
@@ -1942,6 +2176,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'audio',
props: {
@@ -1993,6 +2233,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'directional-light',
props: {
@@ -2040,6 +2286,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'ground-plane',
props: {
@@ -2089,6 +2341,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'skybox',
props: {
@@ -2135,6 +2393,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'group',
props: {},
@@ -2172,6 +2436,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'waypoint',
props: {
@@ -2251,6 +2521,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'trigger-volume',
props: {
@@ -2296,6 +2572,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'point-light',
props: {
@@ -2383,6 +2665,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'hemisphere-light',
props: {
@@ -2424,6 +2712,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'floor-plan',
props: {
@@ -2472,6 +2766,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'ambient-light',
props: {
@@ -2512,6 +2812,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'simple-water',
props: {
@@ -2572,6 +2878,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'scene-preview-camera',
props: {},
@@ -2609,6 +2921,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'spawn-point',
props: {},
@@ -2646,6 +2964,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'kit-piece',
props: {
@@ -2711,6 +3035,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'link',
props: {
@@ -2750,6 +3080,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'kit-piece',
props: {
@@ -2815,6 +3151,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'gltf-model',
props: {
@@ -2874,6 +3216,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'particle-emitter',
props: {
@@ -2940,6 +3288,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'image',
props: {
@@ -2983,6 +3337,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'video',
props: {
@@ -3035,6 +3395,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'box-collider',
props: {},
@@ -3072,6 +3438,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'spawner',
props: {
@@ -3112,6 +3484,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'media-frame',
props: {
@@ -3151,6 +3529,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'audio',
props: {
@@ -3202,6 +3586,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'directional-light',
props: {
@@ -3249,6 +3639,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'ground-plane',
props: {
@@ -3298,6 +3694,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'skybox',
props: {
@@ -3344,6 +3746,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'group',
props: {},
@@ -3381,6 +3789,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'waypoint',
props: {
@@ -3499,6 +3913,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'floor-plan',
props: {
@@ -3547,6 +3967,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'spawn-point',
props: {},
@@ -3584,6 +4010,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'gltf-model',
props: {
@@ -3643,6 +4075,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'directional-light',
props: {
@@ -3690,6 +4128,12 @@ Generated by [AVA](https://avajs.dev).
visible: true,
},
},
+ {
+ name: 'editor-settings',
+ props: {
+ enabled: true,
+ },
+ },
{
name: 'skybox',
props: {
diff --git a/test/integration/snapshots/Editor.test.js.snap b/test/integration/snapshots/Editor.test.js.snap
index f1785baa..0e1e2182 100644
Binary files a/test/integration/snapshots/Editor.test.js.snap and b/test/integration/snapshots/Editor.test.js.snap differ