package sim.app.collisions;
import java.awt.*;
import sim.engine.*;
import sim.physics2D.physicalObject.*;
import sim.physics2D.util.*;
import sim.util.Double2D;
public class MobilePoly extends MobileObject2D implements Steppable
{
// public double radius;
public MobilePoly(Double2D pos, Double2D vel, double width, double height, Paint paint)
{
this.setVelocity(vel);
this.setPose(pos, new Angle(0));
this.setShape(new sim.physics2D.shape.Rectangle(width, height, paint), width * height);
this.setCoefficientOfFriction(0);
this.setCoefficientOfRestitution(1);
}
public void step(SimState state)
{
Double2D position = this.getPosition();
Collisions simCollisions = (Collisions)state;
checkWallCollisions(simCollisions, position);
simCollisions.fieldEnvironment.setObjectLocation(this, new sim.util.Double2D(position.x, position.y));
}
public boolean checkWallCollisions(Collisions simCollisions, Double2D newPos)
{
double dist = 0;
Double2D velocity = this.getVelocity();
Double2D position = this.getPosition();
// check walls
if(newPos.x > simCollisions.xMax)
{
position = new Double2D(simCollisions.xMax, position.y);
velocity = new Double2D(-velocity.x, velocity.y);
}
if(newPos.y > simCollisions.yMax)
{
position = new Double2D(position.x, simCollisions.yMax);
velocity = new Double2D(velocity.x, -velocity.y);
}
if(newPos.x < simCollisions.xMin)
{
position = new Double2D(simCollisions.xMin, position.y);
velocity = new Double2D(-velocity.x, velocity.y);
}
if(newPos.y < simCollisions.yMin)
{
position = new Double2D(position.x, simCollisions.yMin);
velocity = new Double2D(velocity.x, -velocity.y);
}
this.setVelocity(velocity);
this.setPose(position, this.getOrientation());
return true;
}
}