@@ -0,0 +1,2478 @@
+package alfredo.sprite;%0A%0Aimport alfredo.geom.Point;%0A%0A/**%0A * A Transform encapsulates a position and a direction.%0A * %0A * The position is a Point and can be used as such, while the%0A * direction is a double for maximum accuracy.%0A * @author TheMonsterFromTheDeep%0A */%0Apublic class Transform implements Worldly %7B%0A    protected Point location; //Protected so that they aren't rashly modified (needed for some entities)%0A    protected double direction;%0A%0A    @Override%0A    public float getWorldX() %7B%0A        return location.x;%0A    %7D%0A%0A    @Override%0A    public float getWorldY() %7B%0A        return location.y;%0A    %7D%0A%0A    @Override%0A    public double getWorldDirection() %7B%0A        return direction;%0A    %7D%0A    %0A    public void setX(float x) %7B%0A        location.x = x;%0A    %7D%0A    %0A    public void setY(float y) %7B%0A        location.y = y;%0A    %7D%0A    %0A    public void setDirection(double direction) %7B%0A        this.direction = direction;%0A    %7D%0A    %0A    public float getX() %7B return location.x; %7D%0A    public float getY() %7B return location.y; %7D%0A    public double getDirection() %7B return direction; %7D%0A    %0A    public final void moveX(float amount) %7B%0A        setX(location.x + amount);%0A    %7D%0A    %0A    public final void moveY(float amount) %7B%0A        setY(location.y + amount);%0A    %7D%0A    %0A    public final void move(float amount) %7B%0A        setX(location.x + (float)(Math.cos(Math.toRadians(direction + 90)) * amount));%0A        setY(location.y + (float)(Math.sin(Math.toRadians(direction + 90)) * amount));%0A    %7D%0A    %0A    public final void rotate(double direction) %7B%0A        setDirection(this.direction + direction);%0A    %7D%0A    %0A    public final void pointTowards(float x, float y) %7B%0A        setDirection(Math.toDegrees(Math.atan2(y - location.y, x - location.x)) - 90);%0A    %7D%0A    %0A    public final void pointTowards(Point p) %7B%0A        pointTowards(p.x, p.y);%0A    %7D%0A    %0A    /**%0A     * Returns the Transform's location through a copy. This prevents the original transform%0A     * from being set without the setter methods.%0A     * @return The Transform's position.%0A     */%0A    public final Point getLocation() %7B%0A        return new Point(location.x, location.y);%0A    %7D%0A    %0A    public final void setLocation(float x, float y) %7B%0A        setX(x);%0A        setY(y);%0A    %7D%0A    %0A    /**%0A     * Copies the specified Point's location as the new location of this Transform.%0A     * @param p The new location of the Transform.%0A     */%0A    public final void setLocation(Point p) %7B%0A        setX(p.x);%0A        setY(p.y);%0A    %7D%0A%7D

Add other thign