UNPKG

mylingo3d

Version:

Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor

63 lines (56 loc) 2.12 kB
import { applyMixins } from "@lincode/utils" import { MeshStandardMaterial, Object3D } from "three" import IFound, { foundDefaults, foundSchema } from "../../interface/IFound" import TexturedBasicMixin from "./mixins/TexturedBasicMixin" import TexturedStandardMixin from "./mixins/TexturedStandardMixin" import { appendableRoot } from "../../api/core/Appendable" import Model from "../Model" import AnimatedObjectManager from "./AnimatedObjectManager" import SimpleObjectManager from "./SimpleObjectManager" import { standardMaterial } from "../utils/reusables" class FoundManager extends SimpleObjectManager implements IFound { public static componentName = "find" public static defaults = foundDefaults public static schema = foundSchema protected material: MeshStandardMaterial public constructor(mesh: Object3D) { super(mesh) //@ts-ignore this.material = mesh.material ??= standardMaterial appendableRoot.delete(this) } public model?: Model private retargetAnimations() { if (!this.model?.animationManagers) return for (const animationManager of Object.values( this.model.animationManagers )) this.animations[animationManager.name] = this.watch( animationManager.retarget(this.nativeObject3d) ) this.model = undefined } public override get animation() { return super.animation } public override set animation(val) { this.retargetAnimations() super.animation = val } private managerSet?: boolean protected override addToRaycastSet(set: Set<Object3D>) { if (!this.managerSet) { this.managerSet = true this.nativeObject3d.traverse( (child) => (child.userData.manager = this) ) } return super.addToRaycastSet(set) } } interface FoundManager extends AnimatedObjectManager, TexturedBasicMixin, TexturedStandardMixin {} applyMixins(FoundManager, [TexturedBasicMixin, TexturedStandardMixin]) export default FoundManager