public void doStitch() { Stitcher.Holder[] aholder = (Stitcher.Holder[]) this.setStitchHolders.toArray(new Stitcher.Holder[this.setStitchHolders.size()]); Arrays.sort(aholder); Stitcher.Holder[] aholder1 = aholder; int i = aholder.length; for (int j = 0; j < i; ++j) { Stitcher.Holder holder = aholder1[j]; if (!this.allocateSlot(holder)) { String s = String.format( "Unable to fit: %s - size: %dx%d - Maybe try a lowerresolution texturepack?", new Object[] { holder.getAtlasSprite().getIconName(), Integer.valueOf(holder.getAtlasSprite().getIconWidth()), Integer.valueOf(holder.getAtlasSprite().getIconHeight()) }); throw new StitcherException(holder, s); } } if (this.forcePowerOf2) { this.currentWidth = MathHelper.roundUpToPowerOfTwo(this.currentWidth); this.currentHeight = MathHelper.roundUpToPowerOfTwo(this.currentHeight); } }
/** Expand stitched texture in order to make space for specified tile */ private boolean expandAndAllocateSlot(Stitcher.Holder par1StitchHolder) { int i = Math.min(par1StitchHolder.getWidth(), par1StitchHolder.getHeight()); boolean flag = this.currentWidth == 0 && this.currentHeight == 0; boolean flag1; int j; if (this.forcePowerOf2) { j = MathHelper.roundUpToPowerOfTwo(this.currentWidth); int k = MathHelper.roundUpToPowerOfTwo(this.currentHeight); int l = MathHelper.roundUpToPowerOfTwo(this.currentWidth + i); int i1 = MathHelper.roundUpToPowerOfTwo(this.currentHeight + i); boolean flag2 = l <= this.maxWidth; boolean flag3 = i1 <= this.maxHeight; if (!flag2 && !flag3) { return false; } boolean flag4 = j != l; boolean flag5 = k != i1; if (flag4 ^ flag5) { flag1 = flag5 && flag3; // Forge: Bug fix: Attempt to fill all downward space before expanding // width } else { flag1 = flag2 && j <= k; } } else { boolean flag6 = this.currentWidth + i <= this.maxWidth; boolean flag7 = this.currentHeight + i <= this.maxHeight; if (!flag6 && !flag7) { return false; } flag1 = flag6 && (flag || this.currentWidth <= this.currentHeight); } j = Math.max(par1StitchHolder.getWidth(), par1StitchHolder.getHeight()); if (MathHelper.roundUpToPowerOfTwo((flag1 ? this.currentHeight : this.currentWidth) + j) > (flag1 ? this.maxHeight : this.maxWidth)) { return false; } else { Stitcher.Slot slot; if (flag1) { if (par1StitchHolder.getWidth() > par1StitchHolder.getHeight()) { par1StitchHolder.rotate(); } if (this.currentHeight == 0) { this.currentHeight = par1StitchHolder.getHeight(); } slot = new Stitcher.Slot( this.currentWidth, 0, par1StitchHolder.getWidth(), this.currentHeight); this.currentWidth += par1StitchHolder.getWidth(); } else { slot = new Stitcher.Slot( 0, this.currentHeight, this.currentWidth, par1StitchHolder.getHeight()); this.currentHeight += par1StitchHolder.getHeight(); } slot.addSlot(par1StitchHolder); this.stitchSlots.add(slot); return true; } }