UNPKG

osrscachereader

Version:
121 lines (100 loc) 3.06 kB
/** * @class KitDefinition * @category Definitions * @hideconstructor */ export class KitDefinition { /** * The ID of this Kit * @type {number} */ id; /** * Color values to find to be replaced for this Spot Anim * @type {Array} */ recolorToFind = []; /** * What the color values will be replaced with * @type {Array} */ recolorToReplace = []; /** * Textures to find to be replaced for this Object * @type {Array} */ retextureToFind = []; /** * What the texture will be replaced with * @type {Array} */ retextureToReplace = []; /** * What body part this kit represents * @type {number} */ bodyPartId = -1; /** * Models that compose this kit * @type {Array<number>} */ models = []; /** @type {Array<number>} */ chatheadModels = [-1, -1, -1, -1, -1]; /** @type {boolean} */ nonSelectable = false; } export default class KitLoader { load(bytes, id) { let def = new KitDefinition(); def.id = id; let dataview = new DataView(bytes.buffer); do { var opcode = dataview.readUint8(); this.handleOpcode(def, opcode, dataview); } while (opcode != 0); return def; } handleOpcode(def, opcode, dataview) { switch (opcode) { case 0: break; case 1: def.bodyPartId = dataview.readUint8(); break; case 2: var length = dataview.readUint8(); def.models = []; for (var index = 0; index < length; ++index) def.models[index] = dataview.readUint16(); break; case 3: def.nonSelectable = true; break; case 40: var length = dataview.readUint8(); def.recolorToFind = []; def.recolorToReplace = []; for (var index = 0; index < length; ++index) { def.recolorToFind[index] = dataview.readInt16(); def.recolorToReplace[index] = dataview.readInt16(); } break; case 41: var length = dataview.readUint16(); def.retextureToFind = new short[length](); def.retextureToReplace = new short[length](); for (var index = 0; index < length; ++index) { def.retextureToFind[index] = dataview.readInt16(); def.retextureToReplace[index] = dataview.readInt16(); } break; default: if (opcode >= 60 && opcode < 70) { if (def.chatheadModels == undefined) def.chatheadModels = []; def.chatheadModels[opcode - 60] = dataview.readUint16(); } else { throw "Unknown opcode found: " + opcode; } } } }