UNPKG

mdx-m3-viewer

Version:

A browser WebGL model viewer. Mainly focused on models of the games Warcraft 3 and Starcraft 2.

55 lines (42 loc) 1.79 kB
import Scene from '../../scene'; import EmittedObject from '../../emittedobject'; import MdxModel from './model'; import EventObjectEmitterObject from './eventobjectemitterobject'; import MdxModelInstance from './modelinstance'; import EventObjectSpnEmitter from './eventobjectspnemitter'; /** * An MDX spawned model object. */ export default class EventObjectSpn extends EmittedObject { internalInstance: MdxModelInstance; constructor(emitter: EventObjectSpnEmitter) { super(emitter); let emitterObject = <EventObjectEmitterObject>emitter.emitterObject; let internalModel = <MdxModel>emitterObject.internalModel; this.internalInstance = <MdxModelInstance>internalModel.addInstance(); } bind() { let emitter = <EventObjectSpnEmitter>this.emitter; let instance = <MdxModelInstance>emitter.instance; let scene = <Scene>instance.scene; let node = instance.nodes[emitter.emitterObject.index]; let internalInstance = <MdxModelInstance>this.internalInstance; internalInstance.setScene(scene); internalInstance.setSequence(0); // Set the transformation and recalculate. // The later is needed for instances that went out of view, which causes their instaces to no longer get updates. internalInstance.setTransformation(node.worldLocation, node.worldRotation, node.worldScale); internalInstance.recalculateTransformation(); internalInstance.show(); this.health = 1; } update(dt: number) { let instance = this.internalInstance; let model = <MdxModel>instance.model; // Once the sequence finishes, this event object dies if (instance.frame >= model.sequences[0].interval[1]) { this.health = 0; instance.hide(); } } }