mdx-m3-viewer
Version:
A browser WebGL model viewer. Mainly focused on models of the games Warcraft 3 and Starcraft 2.
57 lines (44 loc) • 1.52 kB
text/typescript
import ParticleEmitter2Object from './particleemitter2object';
import MdxModelInstance from './modelinstance';
import MdxNode from './node';
import MdxEmitter from './emitter';
import Particle2 from './particle2';
const emissionRateHeap = new Float32Array(1);
/**
* An MDX particle emitter type 2.
*/
export default class ParticleEmitter2 extends MdxEmitter {
node: MdxNode;
lastEmissionKey: number = -1;
constructor(instance: MdxModelInstance, emitterObject: ParticleEmitter2Object) {
super(instance, emitterObject);
this.node = instance.nodes[emitterObject.index];
}
updateEmission(dt: number) {
let instance = <MdxModelInstance>this.instance;
if (instance.allowParticleSpawn) {
let emitterObject = <ParticleEmitter2Object>this.emitterObject;
let keyframe = emitterObject.getEmissionRate(emissionRateHeap, instance.sequence, instance.frame, instance.counter);
if (emitterObject.squirt) {
if (keyframe !== this.lastEmissionKey) {
this.currentEmission += emissionRateHeap[0];
}
this.lastEmissionKey = keyframe;
} else {
this.currentEmission += emissionRateHeap[0] * dt;
}
}
}
emit() {
let emitterObject = <ParticleEmitter2Object>this.emitterObject;
if (emitterObject.head) {
this.emitObject(0);
}
if (emitterObject.tail) {
this.emitObject(1);
}
}
createObject(): Particle2 {
return new Particle2(this);
}
}