mdx-m3-viewer
Version:
A browser WebGL model viewer. Mainly focused on models of the games Warcraft 3 and Starcraft 2.
70 lines (60 loc) • 2.45 kB
text/typescript
import RibbonEmitter from '../../../parsers/mdlx/ribbonemitter';
import MdxModel from './model';
import GenericObject from './genericobject';
import Layer from './layer';
import { EMITTER_RIBBON } from './geometryemitterfuncs';
/**
* An MDX ribbon emitter.
*/
export default class RibbonEmitterObject extends GenericObject {
geometryEmitterType: number = EMITTER_RIBBON;
layer: Layer;
heightAbove: number;
heightBelow: number;
alpha: number;
color: Float32Array;
lifeSpan: number;
textureSlot: number;
emissionRate: number;
gravity: number;
columns: number;
rows: number;
/**
* Even if the internal texture isn't loaded, it's fine to run emitters based on this emitter object.
*
* The ribbons will simply be black.
*/
ok: boolean = true;
constructor(model: MdxModel, emitter: RibbonEmitter, index: number) {
super(model, emitter, index);
this.layer = model.materials[emitter.materialId].layers[0];
this.heightAbove = emitter.heightAbove;
this.heightBelow = emitter.heightBelow;
this.alpha = emitter.alpha;
this.color = emitter.color;
this.lifeSpan = emitter.lifeSpan;
this.textureSlot = emitter.textureSlot;
this.emissionRate = emitter.emissionRate;
this.gravity = emitter.gravity;
this.columns = emitter.columns;
this.rows = emitter.rows;
}
getHeightBelow(out: Float32Array, sequence: number, frame: number, counter: number) {
return this.getScalarValue(out, 'KRHB', sequence, frame, counter, this.heightBelow);
}
getHeightAbove(out: Float32Array, sequence: number, frame: number, counter: number) {
return this.getScalarValue(out, 'KRHA', sequence, frame, counter, this.heightAbove);
}
getTextureSlot(out: Uint32Array, sequence: number, frame: number, counter: number) {
return this.getScalarValue(out, 'KRTX', sequence, frame, counter, 0);
}
getColor(out: Float32Array, sequence: number, frame: number, counter: number) {
return this.getVectorValue(out, 'KRCO', sequence, frame, counter, this.color);
}
getAlpha(out: Float32Array, sequence: number, frame: number, counter: number) {
return this.getScalarValue(out, 'KRAL', sequence, frame, counter, this.alpha);
}
getVisibility(out: Float32Array, sequence: number, frame: number, counter: number) {
return this.getScalarValue(out, 'KRVS', sequence, frame, counter, 1);
}
}