mylingo3d
Version:
Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor
29 lines (25 loc) • 1.02 kB
text/typescript
import { omit } from "@lincode/utils"
import createObject from "./createObject"
import { nonSerializedProperties, SceneGraphNode } from "./types"
import Loaded from "../../display/core/Loaded"
import { Object3D } from "three"
import Reresolvable from "../../display/core/utils/Reresolvable"
const nodeToObjectManager = (
node: SceneGraphNode,
loadedResolvables: Array<Reresolvable<Object3D>> | undefined
) => {
if (node.type === "animation" || node.type === "lingo3d") return
const object = createObject(node.type)
loadedResolvables &&
object instanceof Loaded &&
loadedResolvables.push(object.loaded)
Object.assign(object, omit(node, nonSerializedProperties))
node.children
?.map((n) => nodeToObjectManager(n, loadedResolvables))
.forEach((c) => c && object.append(c))
return object
}
export default (
graph: Array<SceneGraphNode>,
loadedResolvables?: Array<Reresolvable<Object3D>>
) => graph.map((n) => nodeToObjectManager(n, loadedResolvables))