mdx-m3-viewer
Version:
A browser WebGL model viewer. Mainly focused on models of the games Warcraft 3 and Starcraft 2.
48 lines (38 loc) • 1.59 kB
text/typescript
import { vec3 } from 'gl-matrix';
import EmittedObject from '../../emittedobject';
import EventObjectEmitterObject from './eventobjectemitterobject';
import MdxModelInstance from './modelinstance';
import EventObjectSplEmitter from './eventobjectsplemitter';
import EventObjectUbrEmitter from './eventobjectubremitter';
const vertexHeap = vec3.create();
/**
* An MDX splat or ubersplat object.
*/
export default class EventObjectSplUbr extends EmittedObject {
vertices: Float32Array = new Float32Array(12);
bind() {
let emitter = <EventObjectSplEmitter | EventObjectUbrEmitter>this.emitter;
let instance = <MdxModelInstance>emitter.instance;
let emitterObject = <EventObjectEmitterObject>emitter.emitterObject;
let vertices = this.vertices;
let scale = emitterObject.scale;
let node = instance.nodes[emitterObject.index];
let worldMatrix = node.worldMatrix;
this.health = emitterObject.lifeSpan;
vertexHeap[0] = scale;
vertexHeap[1] = scale;
vec3.transformMat4(<vec3>vertices.subarray(0, 2), vertexHeap, worldMatrix);
vertexHeap[0] = -scale;
vertexHeap[1] = scale;
vec3.transformMat4(<vec3>vertices.subarray(3, 5), vertexHeap, worldMatrix);
vertexHeap[0] = -scale;
vertexHeap[1] = -scale;
vec3.transformMat4(<vec3>vertices.subarray(6, 8), vertexHeap, worldMatrix);
vertexHeap[0] = scale;
vertexHeap[1] = -scale;
vec3.transformMat4(<vec3>vertices.subarray(9, 11), vertexHeap, worldMatrix);
}
update(dt: number) {
this.health -= dt;
}
}