public static SpriteTemplate fromSprites( LinkedList<Sprite> sprites, Layer layer, Shape pivotShape, Relativity relativity) { SpriteTemplate template = null; double leftX = 0d, topY = 0d, rightX = 0d, bottomY = 0d; Sprite newSprite = new Sprite(); for (Sprite sprite : sprites) { if (sprite.shapeType.getNum() == ShapeType.spriteTemplate.getNum()) continue; if (template != null) { leftX = Math.min(leftX, sprite.leftX()); topY = Math.min(topY, sprite.topY()); rightX = Math.max(rightX, sprite.rightX()); bottomY = Math.max(bottomY, sprite.bottomY()); } else { template = new SpriteTemplate(); leftX = sprite.leftX(); topY = sprite.topY(); rightX = sprite.rightX(); bottomY = sprite.bottomY(); if (pivotShape == null) pivotShape = sprite; } } if (template != null) { newSprite.setCoords(0.5d * (leftX + rightX), 0.5d * (topY + bottomY)); newSprite.setHeight(bottomY - topY); newSprite.shapeType = template; if (layer != null) layer.insert(newSprite, pivotShape, relativity); for (Sprite sprite : sprites) { if (sprite.shapeType.getNum() == ShapeType.spriteTemplate.getNum()) continue; layer.remove(sprite); sprite.setCoords( (newSprite.getX() - sprite.getX()) / newSprite.getWidth(), (newSprite.getY() - sprite.getY()) / newSprite.getHeight()); sprite.setSize( sprite.getWidth() / newSprite.getWidth(), sprite.getHeight() / newSprite.getHeight()); template.sprites.addLast(sprite); } } return template; }