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
text/typescript
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();
}
}
}