Merge pull request #1079 from mozilla/feature/enabled-flag

Enabled/Disabled Elements and Default Collapsed State
This commit is contained in:
Robert Long 2021-01-21 11:27:02 -08:00 коммит произвёл GitHub
Родитель 8ed45f9ba7 8e2d2bc17c
Коммит de2209b8f0
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
9 изменённых файлов: 613 добавлений и 90 удалений

Просмотреть файл

@ -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);

Просмотреть файл

@ -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;
}

Просмотреть файл

@ -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++) {

Просмотреть файл

@ -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;

Просмотреть файл

@ -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);
}
}

Просмотреть файл

@ -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 ? (
<TreeNodeLeafSpacer />
) : (
<TreeNodeToggle collapsed={isCollapsed} onClick={onClickToggle}>
{isCollapsed ? <CaretRight size={12} /> : <CaretDown size={12} />}
<TreeNodeToggle onClick={onClickToggle}>
{isExpanded ? <CaretDown size={12} /> : <CaretRight size={12} />}
</TreeNodeToggle>
)}
@ -452,7 +453,7 @@ function TreeNode({
/>
</TreeNodeRenameInputContainer>
) : (
<TreeNodeLabel canDrop={canDropOn} isOver={isOverOn}>
<TreeNodeLabel enabled={enabled} canDrop={canDropOn} isOver={isOverOn}>
{object.name}
</TreeNodeLabel>
)}
@ -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 (
<Panel id="hierarchy-panel" title="Hierarchy" icon={ProjectDiagram}>

Просмотреть файл

@ -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 {
<NameInputGroupContainer>
<NameInputGroup node={activeNode} editor={editor} />
{activeNode.nodeName !== "Scene" && (
<VisibleInputGroup name="Visible">
<BooleanInput value={activeNode.visible} onChange={this.onChangeVisible} />
</VisibleInputGroup>
<>
<VisibleInputGroup name="Visible">
<BooleanInput value={activeNode._visible} onChange={this.onChangeVisible} />
</VisibleInputGroup>
<VisibleInputGroup name="Enabled">
<BooleanInput value={activeNode.enabled} onChange={this.onChangeEnabled} />
</VisibleInputGroup>
</>
)}
</NameInputGroupContainer>
{!disableTransform && <TransformPropertyGroup node={activeNode} editor={editor} />}

Просмотреть файл

@ -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: {

Двоичные данные
test/integration/snapshots/Editor.test.js.snap

Двоичный файл не отображается.