Search in sources :

Example 1 with PhysicsCamera

use of nars.rover.physics.PhysicsCamera 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();
        }
    }
}
Also used : ArrayRealVector(org.apache.commons.math3.linear.ArrayRealVector) PhysicsCamera(nars.rover.physics.PhysicsCamera) JavascriptEngine(ptrman.difficultyEnvironment.JavascriptEngine) EnvironmentScriptingAccessor(ptrman.difficultyEnvironment.scriptAccessors.EnvironmentScriptingAccessor) JoglDraw(ptrman.difficultyEnvironment.view.JoglDraw) DrawerRunnable(ptrman.difficultyEnvironment.view.DrawerRunnable) ComponentManipulationScriptingAccessor(ptrman.difficultyEnvironment.scriptAccessors.ComponentManipulationScriptingAccessor) EntityDescriptor(ptrman.difficultyEnvironment.EntityDescriptor) GLCapabilities(com.jogamp.opengl.GLCapabilities) HelperScriptingAccessor(ptrman.difficultyEnvironment.scriptAccessors.HelperScriptingAccessor) Vec2(spacegraph.space2d.phys.common.Vec2) JoglPanel(ptrman.difficultyEnvironment.view.JoglPanel) JavascriptDescriptor(ptrman.difficultyEnvironment.JavascriptDescriptor) Environment(ptrman.difficultyEnvironment.Environment) ArrayList(java.util.ArrayList) List(java.util.List) JoglAbstractDraw(nars.rover.physics.gl.JoglAbstractDraw)

Example 2 with PhysicsCamera

use of nars.rover.physics.PhysicsCamera in project narchy by automenta.

the class JoglDraw method getPhysicsCamera.

@Override
protected PhysicsCamera getPhysicsCamera() {
    PhysicsCamera p = null;
    PhysicsController controller = panel.controller;
    if (controller != null) {
        p = controller.getCamera();
    }
    return p;
}
Also used : PhysicsCamera(nars.rover.physics.PhysicsCamera) PhysicsController(nars.rover.physics.PhysicsController)

Example 3 with PhysicsCamera

use of nars.rover.physics.PhysicsCamera in project narchy by automenta.

the class JoglAbstractDraw method draw.

public void draw(World w, float time) {
    if (w == null)
        return;
    PhysicsCamera p = getPhysicsCamera();
    if (p != null) {
        Vec2 center = p.getTransform().getCenter();
        viewportTransform.setCenter(center);
        viewportTransform.setExtents(p.getTargetScale(), p.getTargetScale());
    }
    for (SwingDraw.LayerDraw l : layers) l.drawGround(this, w);
    int flags = getFlags();
    // if ((flags & DebugDraw.e_shapeBit) != 0) {
    for (Body b = w.getBodyList(); b != null; b = b.getNext()) {
        drawBody(b, time);
    }
    for (Joint j = w.getJointList(); j != null; j = j.getNext()) {
    // drawJoint(j);
    }
    for (SwingDraw.LayerDraw l : layers) l.drawSky(this, w);
// flush();
}
Also used : PhysicsCamera(nars.rover.physics.PhysicsCamera) SwingDraw(nars.rover.physics.j2d.SwingDraw) Joint(spacegraph.space2d.phys.dynamics.joints.Joint) Body(spacegraph.space2d.phys.dynamics.Body) Joint(spacegraph.space2d.phys.dynamics.joints.Joint)

Aggregations

PhysicsCamera (nars.rover.physics.PhysicsCamera)3 GLCapabilities (com.jogamp.opengl.GLCapabilities)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 PhysicsController (nars.rover.physics.PhysicsController)1 JoglAbstractDraw (nars.rover.physics.gl.JoglAbstractDraw)1 SwingDraw (nars.rover.physics.j2d.SwingDraw)1 ArrayRealVector (org.apache.commons.math3.linear.ArrayRealVector)1 EntityDescriptor (ptrman.difficultyEnvironment.EntityDescriptor)1 Environment (ptrman.difficultyEnvironment.Environment)1 JavascriptDescriptor (ptrman.difficultyEnvironment.JavascriptDescriptor)1 JavascriptEngine (ptrman.difficultyEnvironment.JavascriptEngine)1 ComponentManipulationScriptingAccessor (ptrman.difficultyEnvironment.scriptAccessors.ComponentManipulationScriptingAccessor)1 EnvironmentScriptingAccessor (ptrman.difficultyEnvironment.scriptAccessors.EnvironmentScriptingAccessor)1 HelperScriptingAccessor (ptrman.difficultyEnvironment.scriptAccessors.HelperScriptingAccessor)1 DrawerRunnable (ptrman.difficultyEnvironment.view.DrawerRunnable)1 JoglDraw (ptrman.difficultyEnvironment.view.JoglDraw)1 JoglPanel (ptrman.difficultyEnvironment.view.JoglPanel)1 Vec2 (spacegraph.space2d.phys.common.Vec2)1 Body (spacegraph.space2d.phys.dynamics.Body)1