package sim.app.collisionsPJ;
import sim.engine.*;
import sim.field.continuous.*;
import ec.util.*;
import sim.physics2D.util.*;
import java.awt.*;
import sim.physics2D.constraint.*;
import sim.physics2D.*;
import sim.util.Double2D;
public class Collisions extends SimState
{
public double xMin = 0;
public double xMax = 200;
public double yMin = 0;
public double yMax = 200;
int wallPos = 10;
public Continuous2D fieldEnvironment;
public Collisions(long seed)
{
this(seed, 200, 200);
}
public Collisions(long seed, int width, int height)
{
super(seed);
xMax = width;
yMax = height;
createGrids();
}
void createGrids()
{
fieldEnvironment = new Continuous2D(25, (xMax - xMin), (yMax - yMin));
}
// Resets and starts a simulation
public void start()
{
super.start(); // clear out the schedule
createGrids();
PhysicsEngine2D objPE = new PhysicsEngine2D();
Double2D pos;
Double2D vel;
Wall wall;
// WALLS
// HORIZ
pos = new Double2D(100,wallPos);
wall = new Wall(pos, 200 - wallPos * 2, 6);
fieldEnvironment.setObjectLocation(wall, new sim.util.Double2D(pos.x, pos.y));
objPE.register(wall);
pos = new Double2D(100,200 - wallPos);
wall = new Wall(pos, 200 - wallPos * 2, 6);
fieldEnvironment.setObjectLocation(wall, new sim.util.Double2D(pos.x, pos.y));
objPE.register(wall);
// VERT
pos = new Double2D(wallPos,100);
wall = new Wall(pos, 6, 200 - wallPos * 2);
fieldEnvironment.setObjectLocation(wall, new sim.util.Double2D(pos.x, pos.y));
objPE.register(wall);
pos = new Double2D(200 - wallPos,100);
wall = new Wall(pos, 6, 200 - wallPos * 2);
fieldEnvironment.setObjectLocation(wall, new sim.util.Double2D(pos.x, pos.y));
objPE.register(wall);
pos = new Double2D(100, 100);
vel = new Double2D(1, 1);
MobilePoly rec = new MobilePoly(pos, vel, 10, 20, Color.red);
fieldEnvironment.setObjectLocation(rec, new sim.util.Double2D(pos.x, pos.y));
objPE.register(rec);
schedule.scheduleRepeating(rec);
pos = new Double2D(50, 50);
vel = new Double2D(.5, .5);
MobilePoly rec2 = new MobilePoly(pos, vel, 20, 10, Color.red);
fieldEnvironment.setObjectLocation(rec2, new sim.util.Double2D(pos.x, pos.y));
objPE.register(rec2);
schedule.scheduleRepeating(rec2);
pos = new Double2D(90, 50);
vel = new Double2D(.5, .5);
MobilePoly rec3 = new MobilePoly(pos, vel, 20, 10, Color.red);
fieldEnvironment.setObjectLocation(rec3, new sim.util.Double2D(pos.x, pos.y));
objPE.register(rec3);
schedule.scheduleRepeating(rec3);
PinJoint pj = new PinJoint(new Double2D(70, 50), rec2, rec3);
objPE.register(pj);
pos = new Double2D(70, 50);
vel = new Double2D(.5, .5);
JointDisplay jd = new JointDisplay(pos, vel, 3);
fieldEnvironment.setObjectLocation(jd, new sim.util.Double2D(pos.x, pos.y));
schedule.scheduleRepeating(jd);
objPE.register(jd);
PinJoint pj2 = new PinJoint(new Double2D(70, 50), rec2, jd);
objPE.register(pj2);
// schedule the physics engine
schedule.scheduleRepeating(objPE);
}
public static void main(String[] args)
{
doLoop(Collisions.class, args);
System.exit(0);
}
}