use of spacegraph.space2d.phys.common.Vec2 in project narchy by automenta.
the class TestQueryCallback method init.
public void init(TestbedState model) {
this.model = model;
Vec2 gravity = new Vec2(0, -10f);
world = model.getWorldCreator().createWorld(gravity);
bomb = null;
mouseJoint = null;
mouseTracing = false;
mouseTracerPosition.setZero();
mouseTracerVelocity.setZero();
BodyDef bodyDef = new BodyDef();
groundBody = world.createBody(bodyDef);
init(world, false);
}
use of spacegraph.space2d.phys.common.Vec2 in project narchy by automenta.
the class Sim method initTest.
@Override
public void initTest(boolean deserialized) {
getWorld().setGravity(new Vec2());
getWorld().setAllowSleep(false);
}
use of spacegraph.space2d.phys.common.Vec2 in project narchy by automenta.
the class TopDownViewWheeledPhysicsComponent method stop.
public void stop() {
if (cachedPhysics2dBody == null) {
return;
}
cachedPhysics2dBody.body.setAngularVelocity(0);
cachedPhysics2dBody.body.setLinearVelocity(new Vec2());
}
use of spacegraph.space2d.phys.common.Vec2 in project narchy by automenta.
the class TopDownViewWheeledPhysicsComponent method thrust.
public void thrust(float angle, float force) {
if (cachedPhysics2dBody == null) {
return;
}
// + Math.PI / 2; //compensate for initial orientation
angle += cachedPhysics2dBody.body.getAngle();
// cachedPhysics2dBody.body..applyForceToCenter(new Vec2((float) Math.cos(angle) * force, (float) Math.sin(angle) * force));
Vec2 v = new Vec2((float) Math.cos(angle) * force, (float) Math.sin(angle) * force);
cachedPhysics2dBody.body.setLinearVelocity(v);
if (setRotationOfPhysics2dBody) {
cachedPhysics2dBody.body.setTransform(cachedPhysics2dBody.body.getPosition(), angle);
}
}
use of spacegraph.space2d.phys.common.Vec2 in project narchy by automenta.
the class Test method main.
public static void main(String[] args) {
Environment environment = new Environment();
JavascriptDescriptor javascriptDescriptor = new JavascriptDescriptor();
javascriptDescriptor.engine = new JavascriptEngine();
javascriptDescriptor.environmentScriptingAccessor = new EnvironmentScriptingAccessor(environment);
javascriptDescriptor.helperScriptingAccessor = new HelperScriptingAccessor();
javascriptDescriptor.componentManipulationScriptingAccessor = new ComponentManipulationScriptingAccessor();
// execute the initialisation script
final String worldInitialisationScript = "function initializeWorld(environment) {" + " environmentScriptingAccessor.physics2dCreateWorld();" + "}";
WorldInitialisation.executeWorldInitialisationScript(environment, javascriptDescriptor, worldInitialisationScript);
final String spawnScript = "function spawn() {" + " var resultEntity = environmentScriptingAccessor.createNewEntity(helperScriptingAccessor.create2dArrayRealVector(0.0, 0.0));\n" + " // create physics body of a rover body and set physics parameters\n" + " var verticesPoints = helperScriptingAccessor.createList();\n" + " verticesPoints.add(helperScriptingAccessor.create2dArrayRealVector(3.0, 0.0));\n" + " verticesPoints.add(helperScriptingAccessor.create2dArrayRealVector(-1.0, 2.0));\n" + " verticesPoints.add(helperScriptingAccessor.create2dArrayRealVector(-1.0, -2.0));\n" + " var linearDamping = 0.9;\n" + " var angularDamping = 0.6;\n" + " var restitution = 0.9; // bounciness\n" + " var friction = 0.5;\n" + " var mass = 5.0;\n" + " var static = false;\n" + " var position = helperScriptingAccessor.create2dArrayRealVector(0.0, 0.0);\n" + " resultEntity.physics2dBody = environmentScriptingAccessor.physics2dCreateBodyWithShape(static, position, verticesPoints, linearDamping, angularDamping, mass, restitution, friction);\n" + " " + " var physicsComponent = componentManipulationScriptingAccessor.createTopDownViewWheeledPhysicsComponent(8.0, 0.44 * 0.25);" + " resultEntity.components.addComponent(physicsComponent);\n" + " var controllerComponent = componentManipulationScriptingAccessor.createTopDownViewWheeledControllerComponent(1.0);" + " controllerComponent.physicsComponent = physicsComponent;" + " resultEntity.components.addComponent(controllerComponent);\n" + " var biasedRandomAIComponent = componentManipulationScriptingAccessor.createBiasedRandomAIComponent(3.0, 0.5, 0.5);" + " biasedRandomAIComponent.topDownViewWheeledControllerComponent = controllerComponent;" + " resultEntity.components.addComponent(biasedRandomAIComponent);\n" + " " + " return resultEntity;\n" + "}\n";
EntityDescriptor entityDescriptor = EntitySpawner.spawn(javascriptDescriptor, spawnScript, new ArrayList<>());
environment.entities.add(entityDescriptor);
// spawn testboxes manually
final List<ArrayRealVector> boxPositions = RandomSampler.sample(new ArrayRealVector(new double[] { 10.0, 10.0 }), 10);
for (final ArrayRealVector boxPosition : boxPositions) {
EntityDescriptor createdEntity = javascriptDescriptor.environmentScriptingAccessor.createNewEntity(javascriptDescriptor.helperScriptingAccessor.create2dArrayRealVector(0.0f, 0.0f));
// create physics body of a rover body and set physics parameters
List verticesPoints = javascriptDescriptor.helperScriptingAccessor.createList();
verticesPoints.add(javascriptDescriptor.helperScriptingAccessor.create2dArrayRealVector(-.5f, 0.5f));
verticesPoints.add(javascriptDescriptor.helperScriptingAccessor.create2dArrayRealVector(0.5f, 0.5f));
verticesPoints.add(javascriptDescriptor.helperScriptingAccessor.create2dArrayRealVector(0.5f, -0.5f));
verticesPoints.add(javascriptDescriptor.helperScriptingAccessor.create2dArrayRealVector(-0.5f, -0.5f));
float linearDamping = 0.9f;
float angularDamping = 0.6f;
float restitution = 0.9f;
float friction = 0.5f;
float mass = 5.0f;
boolean isStatic = false;
ArrayRealVector position = boxPosition;
createdEntity.physics2dBody = javascriptDescriptor.environmentScriptingAccessor.physics2dCreateBodyWithShape(isStatic, position, verticesPoints, linearDamping, angularDamping, mass, restitution, friction);
environment.entities.add(createdEntity);
}
final float timeDelta = 0.1f;
final float cameraZoomScaleDiff = 2.0f;
final float initScale = 50.0f;
final Vec2 initPosition = new Vec2(-10.0f, -10.0f);
PhysicsCamera physicsCamera = new PhysicsCamera(initPosition, initScale, cameraZoomScaleDiff);
JoglAbstractDraw debugDraw = new JoglDraw(physicsCamera);
GLCapabilities config = new GLCapabilities(GLProfile.getDefault());
config.setHardwareAccelerated(true);
config.setAlphaBits(8);
config.setAccumAlphaBits(8);
config.setAccumRedBits(8);
config.setAccumGreenBits(8);
config.setAccumBlueBits(8);
config.setNumSamples(1);
// config.setBackgroundOpaque(false);
JoglPanel panel = new JoglPanel(environment.physicsWorld2d, debugDraw, null, config);
debugDraw.setPanel(panel);
DrawerRunnable drawerRunnable = new DrawerRunnable();
drawerRunnable.panel = panel;
JFrame window = new JFrame();
window.setTitle("Testbed");
window.setLayout(new BorderLayout());
window.add(panel, "Center");
window.pack();
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
for (; ; ) {
environment.stepFrame(timeDelta, javascriptDescriptor);
for (EntityDescriptor iterationEntity : environment.entities) {
if (iterationEntity.physics2dBody == null) {
continue;
}
}
// draw
SwingUtilities.invokeLater(drawerRunnable);
try {
Thread.sleep((int) (timeDelta * 1000.0f));
} catch (InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}
Aggregations