mdx-m3-viewer
Version:
A browser WebGL model viewer. Mainly focused on models of the games Warcraft 3 and Starcraft 2.
108 lines (99 loc) • 3.9 kB
text/typescript
import BinaryStream from '../../common/binarystream';
import IndexEntry from './indexentry';
import Reference from './reference';
import { Float32AnimationReference, Uint32AnimationReference } from './animationreference';
/**
* A standard material.
*/
export default class StandardMaterial {
version: number = -1;
name: Reference = new Reference();
additionalFlags: number = 0;
flags: number = 0;
blendMode: number = 0;
priority: number = 0;
usedRTTChannels: number = 0;
specularity: number = 0;
depthBlendFalloff: number = 0;
cutoutThreshold: number = 0;
unknown1: number = 0;
unknown2: number = 0;
unknown3: number = 0;
specMult: number = 0;
emisMult: number = 0;
diffuseLayer: Reference = new Reference();
decalLayer: Reference = new Reference();
specularLayer: Reference = new Reference();
glossLayer: Reference = new Reference();
emissiveLayer: Reference = new Reference();
emissive2Layer: Reference = new Reference();
evioLayer: Reference = new Reference();
evioMaskLayer: Reference = new Reference();
alphaMaskLayer: Reference = new Reference();
alphaMask2Layer: Reference = new Reference();
normalLayer: Reference = new Reference();
heightLayer: Reference = new Reference();
lightMapLayer: Reference = new Reference();
ambientOcclusionLayer: Reference = new Reference();
unknown4: Reference = new Reference();
unknown5: Reference = new Reference();
unknown6: Reference = new Reference();
unknown7: Reference = new Reference();
unknown8: number = 0;
layerBlendType: number = 0;
emisBlendType: number = 0;
emisMode: number = 0;
specType: number = 0;
unknown9: Float32AnimationReference = new Float32AnimationReference();
unknown10: Uint32AnimationReference = new Uint32AnimationReference();
unknown11: Uint8Array = new Uint8Array(12);
load(stream: BinaryStream, version: number, index: IndexEntry[]) {
this.version = version;
this.name.load(stream, index);
this.additionalFlags = stream.readUint32();
this.flags = stream.readUint32();
this.blendMode = stream.readUint32();
this.priority = stream.readInt32();
this.usedRTTChannels = stream.readUint32();
this.specularity = stream.readFloat32();
this.depthBlendFalloff = stream.readFloat32();
this.cutoutThreshold = stream.readUint8();
this.unknown1 = stream.readUint8(); // ?
this.unknown2 = stream.readUint8(); // ?
this.unknown3 = stream.readUint8(); // ?
this.specMult = stream.readFloat32();
this.emisMult = stream.readFloat32();
this.diffuseLayer.load(stream, index);
this.decalLayer.load(stream, index);
this.specularLayer.load(stream, index);
if (version > 15) {
this.glossLayer.load(stream, index);
}
this.emissiveLayer.load(stream, index);
this.emissive2Layer.load(stream, index);
this.evioLayer.load(stream, index);
this.evioMaskLayer.load(stream, index);
this.alphaMaskLayer.load(stream, index);
this.alphaMask2Layer.load(stream, index);
this.normalLayer.load(stream, index);
this.heightLayer.load(stream, index);
this.lightMapLayer.load(stream, index);
this.ambientOcclusionLayer.load(stream, index);
if (version > 18) {
this.unknown4.load; // Unknown layer
this.unknown5.load; // Unknown layer
this.unknown6.load; // Unknown layer
this.unknown7.load; // Unknown layer
}
this.unknown8 = stream.readUint32(); // ?
this.layerBlendType = stream.readUint32();
this.emisBlendType = stream.readUint32();
this.emisMode = stream.readUint32();
this.specType = stream.readUint32();
this.unknown9.load(stream); // ?
this.unknown10.load(stream); // ?
if (version > 18) {
this.unknown11 = stream.readUint8Array(this.unknown11); // ?
}
}
}