diff --git a/src/MPQEditor/MPQData.ts b/src/MPQEditor/MPQData.ts index c90e2dfd..e19368da 100644 --- a/src/MPQEditor/MPQData.ts +++ b/src/MPQEditor/MPQData.ts @@ -78,6 +78,13 @@ export class MPQData { return this._defaultModelLayers; } + // get layers, which will NOT be qauntized by default + getLayers(): string[] { + return this._content[MPQData._layersKey].map( + (item: any) => item[MPQData._nameKey] + ); + } + // update section(quantization parameter) of nondefault layer updateSectionOfLayer(name: string, section: string, value: string) { let layer = this._content[MPQData._layersKey].find( @@ -105,10 +112,35 @@ export class MPQData { this.filterDefaultModelLayersByContent(); } + setLayers(names: string[]) { + let layersToAdd = Array(); + let layersToDefault = Array(); + this._content[MPQData._layersKey].forEach((layer: any) => { + let foundIndex = names.findIndex( + (name: string) => name === layer[MPQData._nameKey] + ); + if (foundIndex < 0) { + // name to default + layersToDefault.push(layer["name"]); + } + }); + names.forEach((name: any) => { + let foundIndex = this._content[MPQData._layersKey].findIndex( + (x: any) => x[MPQData._nameKey] === name + ); + if (foundIndex < 0) { + // name to add + layersToAdd.push(name); + } + }); + this.setLayersToDefault(layersToDefault); + this.addLayers(layersToAdd); + + return layersToAdd; + } + private filterDefaultModelLayersByContent() { - let layers = this._content[MPQData._layersKey].map( - (item: any) => item[MPQData._nameKey] - ); + let layers = this.getLayers(); this._defaultModelLayers = this._allModelLayers?.filter( (name) => layers.find((filterName: string) => name === filterName) === undefined diff --git a/src/Tests/MPQEditor/MPQData.test.ts b/src/Tests/MPQEditor/MPQData.test.ts index e82208d8..4161914d 100644 --- a/src/Tests/MPQEditor/MPQData.test.ts +++ b/src/Tests/MPQEditor/MPQData.test.ts @@ -166,5 +166,78 @@ suite("MPQEditor", function () { assert.throws(() => data.setLayersToDefault(["layer_2"])); }); }); + + suite("#getLayers", function () { + test("get layers", function () { + let data = new MPQData(); + data.setWithString(defaultMPQText); + let allLayers = ["layer_1", "layer_2"]; + data.setAllModelLayers(allLayers); + // add specific layer + data.addLayers(["layer_1"]); + + const layers = data.getLayers(); + let index = layers?.findIndex((name) => name === "layer_1"); + + assert.isTrue(layers.length === 1); + assert.isTrue(index === 0); + }); + + test("NEG: get empty layers", function () { + let data = new MPQData(); + data.setWithString(defaultMPQText); + const layers = data.getLayers(); + assert(layers.length === 0); + }); + }); + + suite("#getLayers", function () { + test("get layers", function () { + let data = new MPQData(); + data.setWithString(defaultMPQText); + let allLayers = ["layer_1", "layer_2"]; + data.setAllModelLayers(allLayers); + // add specific layer + data.addLayers(["layer_1"]); + + const layers = data.getLayers(); + let index = layers?.findIndex((name) => name === "layer_1"); + + assert.isTrue(layers.length === 1); + assert.isTrue(index === 0); + }); + + test("NEG: get empty layers", function () { + let data = new MPQData(); + data.setWithString(defaultMPQText); + const layers = data.getLayers(); + assert(layers.length === 0); + }); + }); + + suite("#setLayers", function () { + test("set layers", function () { + let data = new MPQData(); + data.setWithString(defaultMPQText); + let allLayers = ["layer_1", "layer_2"]; + data.setAllModelLayers(allLayers); + // add specific layer + data.setLayers(["layer_1"]); + + const layers = data.getLayers(); + let index = layers?.findIndex((name) => name === "layer_1"); + + assert.isTrue(layers.length === 1); + assert.isTrue(index === 0); + }); + + test("NEG: set empty layers", function () { + let data = new MPQData(); + data.setWithString(defaultMPQText); + data.setLayers([]); + const layers = data.getLayers(); + assert(layers.length === 0); + }); + }); }); });