@Override public Sprite getTileSprite(Sprite sprite, double dX, double dY, double xScale, double yScale) { serviceRectangle.setCoords(sprite.getX() * xScale + dX, sprite.getY() * yScale + dY); serviceRectangle.setSize(sprite.getWidth() * xScale, sprite.getHeight() * yScale); serviceRectangle.shapeType = sprite.shapeType; return serviceRectangle; }
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; }
public void setShape(Sprite sprite, Sprite templateSprite, Sprite spriteShape) { double angle = sprite.displayingAngle; if (templateSprite.visualizer.rotating) angle += sprite.angle; if (angle == 0) { spriteShape.setCoords( templateSprite.getX() * sprite.getWidth() + sprite.getX(), templateSprite.getY() * sprite.getHeight() + sprite.getY()); } else { double relativeX = templateSprite.getX() * sprite.getWidth(); double relativeY = templateSprite.getY() * sprite.getHeight(); spriteShape.setCoords( relativeX * Math.cos(angle) - relativeY * Math.sin(angle) + sprite.getX(), relativeX * Math.sin(angle) + relativeY * Math.cos(angle) + sprite.getY()); } spriteShape.setSize( sprite.getWidth() * templateSprite.getWidth(), sprite.getHeight() * templateSprite.getHeight()); spriteShape.angle = sprite.angle + templateSprite.angle; spriteShape.displayingAngle = sprite.displayingAngle + templateSprite.displayingAngle; }