mdx-m3-viewer
Version:
A browser WebGL model viewer. Mainly focused on models of the games Warcraft 3 and Starcraft 2.
69 lines (53 loc) • 1.46 kB
text/typescript
import RibbonEmitterObject from './ribbonemitterobject';
import MdxModelInstance from './modelinstance';
import MdxEmitter from './emitter';
import Ribbon from './ribbon';
/**
* A ribbon emitter.
*/
export default class RibbonEmitter extends MdxEmitter {
first: Ribbon | null = null;
last: Ribbon | null = null;
updateEmission(dt: number) {
let instance = <MdxModelInstance>this.instance;
if (instance.allowParticleSpawn) {
let emitterObject = <RibbonEmitterObject>this.emitterObject;
// It doesn't make sense to emit more than 1 ribbon at the same time.
this.currentEmission = Math.min(this.currentEmission + emitterObject.emissionRate * dt, 1);
}
}
emit() {
let ribbon = <Ribbon>this.emitObject();
let last = this.last;
if (last) {
last.next = ribbon;
ribbon.prev = last;
} else {
this.first = ribbon;
}
this.last = ribbon;
}
kill(object: Ribbon) {
super.kill(object);
let prev = object.prev;
let next = object.next;
if (object === this.first) {
this.first = next;
}
if (object === this.last) {
this.first = null;
this.last = null;
}
if (prev) {
prev.next = next;
}
if (next) {
next.prev = prev;
}
object.prev = null;
object.next = null;
}
createObject(): Ribbon {
return new Ribbon(this);
}
}