From 54594b37b7e914f12d3771ddbfd956be646186d4 Mon Sep 17 00:00:00 2001 From: cyantree - Christoph Schreiber Date: Tue, 30 Jun 2020 15:34:05 +0200 Subject: [PATCH] Fix layer handling in cutter --- src/js/game/shape_definition.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/js/game/shape_definition.js b/src/js/game/shape_definition.js index fca5f730..55d3b132 100644 --- a/src/js/game/shape_definition.js +++ b/src/js/game/shape_definition.js @@ -441,6 +441,7 @@ export class ShapeDefinition extends BasicSerializableObject { */ cloneFilteredByQuadrants(includeQuadrants) { const newLayers = this.internalCloneLayers(); + let lastNonEmptyLayer = -1; for (let layerIndex = 0; layerIndex < newLayers.length; ++layerIndex) { const quadrants = newLayers[layerIndex]; let anyContents = false; @@ -448,16 +449,16 @@ export class ShapeDefinition extends BasicSerializableObject { if (includeQuadrants.indexOf(quadrantIndex) < 0) { quadrants[quadrantIndex] = null; } else if (quadrants[quadrantIndex]) { - anyContents = true; + lastNonEmptyLayer = layerIndex; } } - - // Check if the layer is entirely empty - if (!anyContents) { - newLayers.splice(layerIndex, 1); - layerIndex -= 1; - } } + + // Remove top most empty layers which aren't needed anymore + if (lastNonEmptyLayer !== newLayers.length - 1) { + newLayers.splice(lastNonEmptyLayer + 1); + } + return new ShapeDefinition({ layers: newLayers }); }