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.85 kB
text/typescript
import BinaryStream from '../../common/binarystream';
import IndexEntry from './indexentry';
import Reference from './reference';
import { M3ParserFloat32AnimationReference, M3ParserUint32AnimationReference } from './animationreference';
/**
* A standard material.
*/
export default class M3ParserStandardMaterial {
version: number;
name: Reference;
additionalFlags: number;
flags: number;
blendMode: number;
priority: number;
usedRTTChannels: number;
specularity: number;
depthBlendFalloff: number;
cutoutThreshold: number;
unknown1: number;
unknown2: number;
unknown3: number;
specMult: number;
emisMult: number;
diffuseLayer: Reference;
decalLayer: Reference;
specularLayer: Reference;
glossLayer: Reference | null = null;
emissiveLayer: Reference;
emissive2Layer: Reference;
evioLayer: Reference;
evioMaskLayer: Reference;
alphaMaskLayer: Reference;
alphaMask2Layer: Reference;
normalLayer: Reference;
heightLayer: Reference;
lightMapLayer: Reference;
ambientOcclusionLayer: Reference;
unknown4: Reference | null = null;
unknown5: Reference | null = null;
unknown6: Reference | null = null;
unknown7: Reference | null = null;
unknown8: number;
layerBlendType: number;
emisBlendType: number;
emisMode: number;
specType: number;
unknown9: M3ParserFloat32AnimationReference;
unknown10: M3ParserUint32AnimationReference;
unknown11: Uint8Array | null = null;
constructor(reader: BinaryStream, version: number, index: IndexEntry[]) {
this.version = version;
this.name = new Reference(reader, index);
this.additionalFlags = reader.readUint32();
this.flags = reader.readUint32();
this.blendMode = reader.readUint32();
this.priority = reader.readInt32();
this.usedRTTChannels = reader.readUint32();
this.specularity = reader.readFloat32();
this.depthBlendFalloff = reader.readFloat32();
this.cutoutThreshold = reader.readUint8();
this.unknown1 = reader.readUint8(); // ?
this.unknown2 = reader.readUint8(); // ?
this.unknown3 = reader.readUint8(); // ?
this.specMult = reader.readFloat32();
this.emisMult = reader.readFloat32();
this.diffuseLayer = new Reference(reader, index);
this.decalLayer = new Reference(reader, index);
this.specularLayer = new Reference(reader, index);
if (version > 15) {
this.glossLayer = new Reference(reader, index);
}
this.emissiveLayer = new Reference(reader, index);
this.emissive2Layer = new Reference(reader, index);
this.evioLayer = new Reference(reader, index);
this.evioMaskLayer = new Reference(reader, index);
this.alphaMaskLayer = new Reference(reader, index);
this.alphaMask2Layer = new Reference(reader, index);
this.normalLayer = new Reference(reader, index);
this.heightLayer = new Reference(reader, index);
this.lightMapLayer = new Reference(reader, index);
this.ambientOcclusionLayer = new Reference(reader, index);
if (version > 18) {
this.unknown4 = new Reference(reader, index); // Unknown layer
this.unknown5 = new Reference(reader, index); // Unknown layer
this.unknown6 = new Reference(reader, index); // Unknown layer
this.unknown7 = new Reference(reader, index); // Unknown layer
}
this.unknown8 = reader.readUint32(); // ?
this.layerBlendType = reader.readUint32();
this.emisBlendType = reader.readUint32();
this.emisMode = reader.readUint32();
this.specType = reader.readUint32();
this.unknown9 = new M3ParserFloat32AnimationReference(reader); // ?
this.unknown10 = new M3ParserUint32AnimationReference(reader); // ?
if (version > 18) {
this.unknown11 = reader.readUint8Array(12); // ?
}
}
}