mdx-m3-viewer
Version:
A browser WebGL model viewer. Mainly focused on models of the games Warcraft 3 and Starcraft 2.
65 lines (53 loc) • 2.34 kB
text/typescript
import ParticleEmitter from '../../../parsers/mdlx/particleemitter';
import MdxModel from './model';
import GenericObject from './genericobject';
/**
* An MDX particle emitter.
*/
export default class ParticleEmitterObject extends GenericObject {
internalModel: MdxModel | null = null;
speed: number;
latitude: number;
longitude: number;
lifeSpan: number;
gravity: number;
emissionRate: number;
ok: boolean = false;
constructor(model: MdxModel, emitter: ParticleEmitter, index: number) {
super(model, emitter, index);
this.speed = emitter.speed;
this.latitude = emitter.latitude;
this.longitude = emitter.longitude;
this.lifeSpan = emitter.lifeSpan;
this.gravity = emitter.gravity;
this.emissionRate = emitter.emissionRate;
model.viewer.load(emitter.path.replace(/\\/g, '/').toLowerCase().replace('.mdl', '.mdx'), model.pathSolver, model.solverParams)
.then((model) => {
if (model) {
this.internalModel = <MdxModel>model;
this.ok = true;
}
});
}
getSpeed(out: Float32Array, sequence: number, frame: number, counter: number) {
return this.getScalarValue(out, 'KPES', sequence, frame, counter, this.speed);
}
getLatitude(out: Float32Array, sequence: number, frame: number, counter: number) {
return this.getScalarValue(out, 'KPLTV', sequence, frame, counter, this.latitude);
}
getLongitude(out: Float32Array, sequence: number, frame: number, counter: number) {
return this.getScalarValue(out, 'KPLN', sequence, frame, counter, this.longitude);
}
getLifeSpan(out: Float32Array, sequence: number, frame: number, counter: number) {
return this.getScalarValue(out, 'KPEL', sequence, frame, counter, this.lifeSpan);
}
getGravity(out: Float32Array, sequence: number, frame: number, counter: number) {
return this.getScalarValue(out, 'KPEG', sequence, frame, counter, this.gravity);
}
getEmissionRate(out: Float32Array, sequence: number, frame: number, counter: number) {
return this.getScalarValue(out, 'KPEE', sequence, frame, counter, this.emissionRate);
}
getVisibility(out: Float32Array, sequence: number, frame: number, counter: number) {
return this.getScalarValue(out, 'KPEV', sequence, frame, counter, 1);
}
}