@@ -0,0 +1,2689 @@
+package bot.simulation.objects;%0A%0Aimport bot.Bot;%0Aimport bot.Constants;%0Aimport bot.simulation.Simulation;%0A%0Aimport java.awt.*;%0A%0Apublic class Movable %7B%0A    public static final int STATE_ON_FIELD_UNUSED = 0; // on field%0A    public static final int STATE_ON_FIELD = 1;%0A    public static final int STATE_OFF_FIELD = 2; // off field%0A%0A    public static final int TYPE_BALL = 0;%0A    public static final int TYPE_PUCK = 1;%0A    public Bot bot;%0A    public Simulation simulation;%0A%0A    public int type;%0A    public int state;%0A    public double radius;%0A    public double mass;%0A    public double friction;%0A    public double restitution;%0A%0A    public Vector2d position;%0A    public Vector2d velocity;%0A    public Vector3d spin;%0A%0A    public Movable(Bot bot, Simulation simulation) %7B%0A        this.bot = bot;%0A        this.simulation = simulation;%0A%0A        this.position = new Vector2d();%0A        this.velocity = new Vector2d();%0A        this.spin = new Vector3d();%0A%0A        this.state = STATE_ON_FIELD;%0A    %7D%0A%0A    public void move(double elapsedSeconds) %7B%0A        // if not zero...%0A        this.position = Vector2d.sum(this.position, Vector2d.multiply(this.velocity, elapsedSeconds));%0A    %7D%0A%0A    public void render(Graphics2D g2) %7B%0A        if (bot == null) %7B%0A            return;%0A        %7D%0A%0A        g2.setColor(Color.GREEN);%0A%0A        int X = bot.helper.toScreenX(position.x - radius);%0A        int Y = bot.helper.toScreenY(position.y + radius);%0A        int scaledRadius = bot.helper.toScreenScale(radius * 2.0);%0A%0A        g2.fillOval(X, Y, scaledRadius, scaledRadius);%0A    %7D%0A%0A    public boolean isMovingOrSpinning() %7B%0A        return Math.abs(this.velocity.x) %3E Constants.SMALL_VALUE %7C%7C Math.abs(this.velocity.y) %3E Constants.SMALL_VALUE %7C%7C Math.abs(this.spin.x) %3E Constants.SMALL_VALUE %7C%7C Math.abs(this.spin.y) %3E Constants.SMALL_VALUE %7C%7C Math.abs(this.spin.z) %3E Constants.SMALL_VALUE;%0A    %7D%0A%0A    public boolean isMoving() %7B%0A        return Math.abs(this.velocity.x) %3E Constants.SMALL_VALUE %7C%7C Math.abs(this.velocity.y) %3E Constants.SMALL_VALUE;%0A    %7D%0A%0A    public boolean hasFieldState() %7B%0A        return ((this.state == STATE_ON_FIELD) %7C%7C (this.state == STATE_OFF_FIELD));%0A    %7D%0A%0A    public void ballInGoal(String _arg_1) %7B%0A        if (this.state == STATE_ON_FIELD) %7B%0A            this.state = Movable.STATE_OFF_FIELD;%0A            this.velocity.scale(0.1);%0A            //System.out.println(%22ballInGoal!!%22);%0A%0A            if (this.simulation != null) %7B%0A                if (_arg_1 == %22TableEvent.LOCAL_PLAYER_SCORED%22) %7B%0A                    simulation.result.scored = true;%0A                %7D else %7B%0A                    simulation.result.badShot = true; // own goal%0A                %7D%0A            %7D%0A        %7D%0A        ;%0A    %7D%0A%7D%0A

Create Movable.java