UNPKG

mdx-m3-viewer

Version:

A browser WebGL model viewer. Mainly focused on models of the games Warcraft 3 and Starcraft 2.

159 lines (147 loc) 6.47 kB
import M3ParserReference from './reference'; import M3ParserBoundingSphere from './boundingsphere'; import M3ParserBoundingShape from './boundingshape'; /** * The model information structure. */ export default class M3ParserModel { /** * @param {BinaryReader} reader * @param {number} version * @param {Array<M3ParserIndexEntry>} index */ constructor(reader, version, index) { /** @member {number} */ this.version = version; /** @member {M3ParserReference} */ this.modelName = new M3ParserReference(reader, index); /** @member {number} */ this.flags = reader.readUint32(); /** @member {M3ParserReference} */ this.sequences = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.stc = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.stg = new M3ParserReference(reader, index); /** @member {number} */ this.unknown0 = reader.readFloat32(); /** @member {number} */ this.unknown1 = reader.readFloat32(); /** @member {number} */ this.unknown2 = reader.readFloat32(); /** @member {number} */ this.unknown3 = reader.readFloat32(); /** @member {M3ParserReference} */ this.sts = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.bones = new M3ParserReference(reader, index); /** @member {number} */ this.numberOfBonesToCheckForSkin = reader.readUint32(); /** @member {number} */ this.vertexFlags = reader.readUint32(); /** @member {M3ParserReference} */ this.vertices = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.divisions = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.boneLookup = new M3ParserReference(reader, index); /** @member {M3ParserBoundingSphere} */ this.boundings = new M3ParserBoundingSphere(reader); /** @member {?} */ this.unknown4To20 = reader.readUint32Array(16); /** @member {M3ParserReference} */ this.attachmentPoints = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.attachmentPointAddons = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.ligts = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.shbxData = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.cameras = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.unknown21 = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.materialReferences = new M3ParserReference(reader, index); /** @member {Array<M3ParserReference>} */ this.materials = [ new M3ParserReference(reader, index), // Standard new M3ParserReference(reader, index), // Displacement new M3ParserReference(reader, index), // Composite new M3ParserReference(reader, index), // Terrain new M3ParserReference(reader, index), // Volume new M3ParserReference(reader, index), // ? new M3ParserReference(reader, index), // Creep ]; if (version > 24) { this.materials.push(new M3ParserReference(reader, index)); // Volume noise } if (version > 25) { this.materials.push(new M3ParserReference(reader, index)); // Splat terrain bake } if (version > 27) { this.materials.push(new M3ParserReference(reader, index)); // ? } if (version > 28) { this.materials.push(new M3ParserReference(reader, index)); // Lens flare } /** @member {M3ParserReference} */ this.particleEmitters = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.particleEmitterCopies = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.ribbonEmitters = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.projections = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.forces = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.warps = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.unknown22 = new M3ParserReference(reader, index); // ? /** @member {M3ParserReference} */ this.rigidBodies = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.unknown23 = new M3ParserReference(reader, index); // ? /** @member {M3ParserReference} */ this.physicsJoints = new M3ParserReference(reader, index); if (version > 27) { /** @member {?M3ParserReference} */ this.clothBehavior = new M3ParserReference(reader, index); } /** @member {M3ParserReference} */ this.unknown24 = new M3ParserReference(reader, index); // ? /** @member {M3ParserReference} */ this.ikjtData = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.unknown25 = new M3ParserReference(reader, index); // ? if (version > 24) { /** @member {?M3ParserReference} */ this.unknown26 = new M3ParserReference(reader, index); // ? } /** @member {M3ParserReference} */ this.partsOfTurrentBehaviors = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.turrentBehaviors = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.absoluteInverseBoneRestPositions = new M3ParserReference(reader, index); /** @member {M3ParserBoundingShape} */ this.tightHitTest = new M3ParserBoundingShape(reader); /** @member {M3ParserReference} */ this.fuzzyHitTestObjects = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.attachmentVolumes = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.attachmentVolumesAddon0 = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.attachmentVolumesAddon1 = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.billboardBehaviors = new M3ParserReference(reader, index); /** @member {M3ParserReference} */ this.tmdData = new M3ParserReference(reader, index); /** @member {number} */ this.unknown27 = reader.readUint32(); // ? /** @member {M3ParserReference} */ this.unknown28 = new M3ParserReference(reader, index); // ? } }