UNPKG

mdx-m3-viewer

Version:

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

93 lines (71 loc) 1.82 kB
import BinaryStream from '../../../common/binarystream'; import CustomTextTrigger from './customtexttrigger'; /** * war3map.wct - the custom text (jass) trigger file. */ export default class War3MapWct { /** * @param {?ArrayBuffer} buffer */ constructor(buffer) { /** @member {number} */ this.version = 0; /** @member {string} */ this.comment = ''; /** @member {?CustomTextTrigger} */ this.trigger = null; /** @member {Array<CustomTextTrigger>} */ this.triggers = []; if (buffer) { this.load(buffer); } } /** * @param {ArrayBuffer} buffer */ load(buffer) { let stream = new BinaryStream(buffer); this.version = stream.readInt32(); if (this.version === 1) { this.comment = stream.readUntilNull(); let trigger = new CustomTextTrigger(); trigger.load(stream); this.trigger = trigger; } for (let i = 0, l = stream.readUint32(); i < l; i++) { let trigger = new CustomTextTrigger(); trigger.load(stream); this.triggers[i] = trigger; } } /** * @return {ArrayBuffer} */ save() { let buffer = new ArrayBuffer(this.getByteLength()); let stream = new BinaryStream(buffer); stream.writeInt32(this.version); if (this.version === 1) { stream.write(`${this.comment}\0`); this.trigger.save(stream); } stream.writeUint32(this.triggers.length); for (let trigger of this.triggers) { trigger.save(stream); } return buffer; } /** * @return {number} */ getByteLength() { let size = 8; if (this.version === 1) { size += this.comment.length + 1 + this.trigger.getByteLength(); } for (let trigger of this.triggers) { size += trigger.getByteLength(); } return size; } }