Search in sources :

Example 1 with GhostControl

use of com.jme3.bullet.control.GhostControl in project jmonkeyengine by jMonkeyEngine.

the class RollingTheMonkey method collision.

@Override
public void collision(PhysicsCollisionEvent event) {
    Spatial nodeA = event.getNodeA();
    Spatial nodeB = event.getNodeB();
    String nameA = nodeA == null ? "" : nodeA.getName();
    String nameB = nodeB == null ? "" : nodeB.getName();
    if (nameA.equals("player") && nameB.startsWith("pickUp")) {
        GhostControl pickUpControl = nodeB.getControl(GhostControl.class);
        if (pickUpControl != null && pickUpControl.isEnabled()) {
            pickUpControl.setEnabled(false);
            nodeB.removeFromParent();
            nodeB.setLocalScale(0.0f);
            score += 1;
            if (score >= PICKUP_COUNT) {
                messageText.setLocalScale(1.0f);
            }
        }
    } else if (nameA.startsWith("pickUp") && nameB.equals("player")) {
        GhostControl pickUpControl = nodeA.getControl(GhostControl.class);
        if (pickUpControl != null && pickUpControl.isEnabled()) {
            pickUpControl.setEnabled(false);
            nodeA.setLocalScale(0.0f);
            score += 1;
            if (score >= PICKUP_COUNT) {
                messageText.setLocalScale(1.0f);
            }
        }
    }
}
Also used : Spatial(com.jme3.scene.Spatial) GhostControl(com.jme3.bullet.control.GhostControl)

Example 2 with GhostControl

use of com.jme3.bullet.control.GhostControl in project jmonkeyengine by jMonkeyEngine.

the class RollingTheMonkey method simpleInitApp.

@Override
public void simpleInitApp() {
    flyCam.setEnabled(false);
    cam.setLocation(new Vector3f(0.0f, 12.0f, 21.0f));
    viewPort.setBackgroundColor(new ColorRGBA(0.2118f, 0.0824f, 0.6549f, 1.0f));
    // init physics
    BulletAppState bulletState = new BulletAppState();
    stateManager.attach(bulletState);
    space = bulletState.getPhysicsSpace();
    space.addCollisionListener(this);
    // create light
    DirectionalLight sun = new DirectionalLight();
    sun.setDirection((new Vector3f(-0.7f, -0.3f, -0.5f)).normalizeLocal());
    System.out.println("Here We Go: " + sun.getDirection());
    sun.setColor(ColorRGBA.White);
    rootNode.addLight(sun);
    // create materials
    Material materialRed = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
    materialRed.setBoolean("UseMaterialColors", true);
    materialRed.setBoolean("HardwareShadows", true);
    materialRed.setColor("Diffuse", new ColorRGBA(0.9451f, 0.0078f, 0.0314f, 1.0f));
    materialRed.setColor("Specular", ColorRGBA.White);
    materialRed.setFloat("Shininess", 64.0f);
    Material materialGreen = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
    materialGreen.setBoolean("UseMaterialColors", true);
    materialGreen.setBoolean("HardwareShadows", true);
    materialGreen.setColor("Diffuse", new ColorRGBA(0.0431f, 0.7725f, 0.0078f, 1.0f));
    materialGreen.setColor("Specular", ColorRGBA.White);
    materialGreen.setFloat("Shininess", 64.0f);
    Material logoMaterial = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
    logoMaterial.setBoolean("UseMaterialColors", true);
    logoMaterial.setBoolean("HardwareShadows", true);
    logoMaterial.setTexture("DiffuseMap", assetManager.loadTexture("com/jme3/app/Monkey.png"));
    logoMaterial.setColor("Diffuse", ColorRGBA.White);
    logoMaterial.setColor("Specular", ColorRGBA.White);
    logoMaterial.setFloat("Shininess", 32.0f);
    Material materialYellow = new Material(assetManager, "Common/MatDefs/Light/Lighting.j3md");
    materialYellow.setBoolean("UseMaterialColors", true);
    materialYellow.setBoolean("HardwareShadows", true);
    materialYellow.setColor("Diffuse", new ColorRGBA(0.9529f, 0.7843f, 0.0078f, 1.0f));
    materialYellow.setColor("Specular", ColorRGBA.White);
    materialYellow.setFloat("Shininess", 64.0f);
    // create level spatial
    // TODO: create your own level mesh
    Node level = new Node("level");
    level.setShadowMode(ShadowMode.CastAndReceive);
    Geometry floor = new Geometry("floor", new Box(22.0f, 0.5f, 22.0f));
    floor.setShadowMode(ShadowMode.Receive);
    floor.setLocalTranslation(0.0f, -0.5f, 0.0f);
    floor.setMaterial(materialGreen);
    Geometry wallNorth = new Geometry("wallNorth", new Box(22.0f, 2.0f, 0.5f));
    wallNorth.setLocalTranslation(0.0f, 2.0f, 21.5f);
    wallNorth.setMaterial(materialRed);
    Geometry wallSouth = new Geometry("wallSouth", new Box(22.0f, 2.0f, 0.5f));
    wallSouth.setLocalTranslation(0.0f, 2.0f, -21.5f);
    wallSouth.setMaterial(materialRed);
    Geometry wallEast = new Geometry("wallEast", new Box(0.5f, 2.0f, 21.0f));
    wallEast.setLocalTranslation(-21.5f, 2.0f, 0.0f);
    wallEast.setMaterial(materialRed);
    Geometry wallWest = new Geometry("wallWest", new Box(0.5f, 2.0f, 21.0f));
    wallWest.setLocalTranslation(21.5f, 2.0f, 0.0f);
    wallWest.setMaterial(materialRed);
    level.attachChild(floor);
    level.attachChild(wallNorth);
    level.attachChild(wallSouth);
    level.attachChild(wallEast);
    level.attachChild(wallWest);
    // The easy way: level.addControl(new RigidBodyControl(0));
    // create level Shape
    CompoundCollisionShape levelShape = new CompoundCollisionShape();
    BoxCollisionShape floorShape = new BoxCollisionShape(new Vector3f(22.0f, 0.5f, 22.0f));
    BoxCollisionShape wallNorthShape = new BoxCollisionShape(new Vector3f(22.0f, 2.0f, 0.5f));
    BoxCollisionShape wallSouthShape = new BoxCollisionShape(new Vector3f(22.0f, 2.0f, 0.5f));
    BoxCollisionShape wallEastShape = new BoxCollisionShape(new Vector3f(0.5f, 2.0f, 21.0f));
    BoxCollisionShape wallWestShape = new BoxCollisionShape(new Vector3f(0.5f, 2.0f, 21.0f));
    levelShape.addChildShape(floorShape, new Vector3f(0.0f, -0.5f, 0.0f));
    levelShape.addChildShape(wallNorthShape, new Vector3f(0.0f, 2.0f, -21.5f));
    levelShape.addChildShape(wallSouthShape, new Vector3f(0.0f, 2.0f, 21.5f));
    levelShape.addChildShape(wallEastShape, new Vector3f(-21.5f, 2.0f, 0.0f));
    levelShape.addChildShape(wallEastShape, new Vector3f(21.5f, 2.0f, 0.0f));
    level.addControl(new RigidBodyControl(levelShape, 0));
    rootNode.attachChild(level);
    space.addAll(level);
    // create Pickups
    // TODO: create your own pickUp mesh
    //       create single mesh for all pickups
    // HINT: think particles.
    pickUps = new Node("pickups");
    Quaternion rotation = new Quaternion();
    Vector3f translation = new Vector3f(0.0f, PICKUP_SIZE * 1.5f, -PICKUP_RADIUS);
    int index = 0;
    float ammount = FastMath.TWO_PI / PICKUP_COUNT;
    for (float angle = 0; angle < FastMath.TWO_PI; angle += ammount) {
        Geometry pickUp = new Geometry("pickUp" + (index++), new Box(PICKUP_SIZE, PICKUP_SIZE, PICKUP_SIZE));
        pickUp.setShadowMode(ShadowMode.CastAndReceive);
        pickUp.setMaterial(materialYellow);
        pickUp.setLocalRotation(rotation.fromAngles(FastMath.rand.nextFloat() * FastMath.TWO_PI, FastMath.rand.nextFloat() * FastMath.TWO_PI, FastMath.rand.nextFloat() * FastMath.TWO_PI));
        rotation.fromAngles(0.0f, angle, 0.0f);
        rotation.mult(translation, pickUp.getLocalTranslation());
        pickUps.attachChild(pickUp);
        pickUp.addControl(new GhostControl(new SphereCollisionShape(PICKUP_SIZE)));
        space.addAll(pickUp);
    //space.addCollisionListener(pickUpControl);
    }
    rootNode.attachChild(pickUps);
    // Create player
    // TODO: create your own player mesh
    Geometry playerGeometry = new Geometry("player", new Sphere(16, 32, PLAYER_RADIUS));
    playerGeometry.setShadowMode(ShadowMode.CastAndReceive);
    playerGeometry.setLocalTranslation(PLAYER_START.clone());
    playerGeometry.setMaterial(logoMaterial);
    // Store control for applying forces
    // TODO: create your own player control
    player = new RigidBodyControl(new SphereCollisionShape(PLAYER_RADIUS), PLAYER_MASS);
    player.setRestitution(PLAYER_REST);
    playerGeometry.addControl(player);
    rootNode.attachChild(playerGeometry);
    space.addAll(playerGeometry);
    inputManager.addMapping(INPUT_MAPPING_FORWARD, new KeyTrigger(KeyInput.KEY_UP), new KeyTrigger(KeyInput.KEY_W));
    inputManager.addMapping(INPUT_MAPPING_BACKWARD, new KeyTrigger(KeyInput.KEY_DOWN), new KeyTrigger(KeyInput.KEY_S));
    inputManager.addMapping(INPUT_MAPPING_LEFT, new KeyTrigger(KeyInput.KEY_LEFT), new KeyTrigger(KeyInput.KEY_A));
    inputManager.addMapping(INPUT_MAPPING_RIGHT, new KeyTrigger(KeyInput.KEY_RIGHT), new KeyTrigger(KeyInput.KEY_D));
    inputManager.addMapping(INPUT_MAPPING_RESET, new KeyTrigger(KeyInput.KEY_R));
    inputManager.addListener(this, INPUT_MAPPING_FORWARD, INPUT_MAPPING_BACKWARD, INPUT_MAPPING_LEFT, INPUT_MAPPING_RIGHT, INPUT_MAPPING_RESET);
    // init UI
    infoText = new BitmapText(guiFont, false);
    infoText.setText(INFO_MESSAGE);
    guiNode.attachChild(infoText);
    scoreText = new BitmapText(guiFont, false);
    scoreText.setText("Score: 0");
    guiNode.attachChild(scoreText);
    messageText = new BitmapText(guiFont, false);
    messageText.setText(MESSAGE);
    messageText.setLocalScale(0.0f);
    guiNode.attachChild(messageText);
    infoText.setLocalTranslation(0.0f, cam.getHeight(), 0.0f);
    scoreText.setLocalTranslation((cam.getWidth() - scoreText.getLineWidth()) / 2.0f, scoreText.getLineHeight(), 0.0f);
    messageText.setLocalTranslation((cam.getWidth() - messageText.getLineWidth()) / 2.0f, (cam.getHeight() - messageText.getLineHeight()) / 2, 0.0f);
    // init shadows
    FilterPostProcessor processor = new FilterPostProcessor(assetManager);
    DirectionalLightShadowFilter filter = new DirectionalLightShadowFilter(assetManager, 2048, 1);
    filter.setLight(sun);
    processor.addFilter(filter);
    viewPort.addProcessor(processor);
}
Also used : CompoundCollisionShape(com.jme3.bullet.collision.shapes.CompoundCollisionShape) SphereCollisionShape(com.jme3.bullet.collision.shapes.SphereCollisionShape) Quaternion(com.jme3.math.Quaternion) Node(com.jme3.scene.Node) KeyTrigger(com.jme3.input.controls.KeyTrigger) Material(com.jme3.material.Material) Box(com.jme3.scene.shape.Box) BoxCollisionShape(com.jme3.bullet.collision.shapes.BoxCollisionShape) FilterPostProcessor(com.jme3.post.FilterPostProcessor) DirectionalLightShadowFilter(com.jme3.shadow.DirectionalLightShadowFilter) RigidBodyControl(com.jme3.bullet.control.RigidBodyControl) Geometry(com.jme3.scene.Geometry) Sphere(com.jme3.scene.shape.Sphere) ColorRGBA(com.jme3.math.ColorRGBA) BitmapText(com.jme3.font.BitmapText) GhostControl(com.jme3.bullet.control.GhostControl) Vector3f(com.jme3.math.Vector3f) BulletAppState(com.jme3.bullet.BulletAppState) DirectionalLight(com.jme3.light.DirectionalLight)

Example 3 with GhostControl

use of com.jme3.bullet.control.GhostControl in project jmonkeyengine by jMonkeyEngine.

the class TestAttachGhostObject method setupJoint.

public void setupJoint() {
    Node holderNode = PhysicsTestHelper.createPhysicsTestNode(assetManager, new BoxCollisionShape(new Vector3f(.1f, .1f, .1f)), 0);
    holderNode.getControl(RigidBodyControl.class).setPhysicsLocation(new Vector3f(0f, 0, 0f));
    rootNode.attachChild(holderNode);
    getPhysicsSpace().add(holderNode);
    Node hammerNode = PhysicsTestHelper.createPhysicsTestNode(assetManager, new BoxCollisionShape(new Vector3f(.3f, .3f, .3f)), 1);
    hammerNode.getControl(RigidBodyControl.class).setPhysicsLocation(new Vector3f(0f, -1, 0f));
    rootNode.attachChild(hammerNode);
    getPhysicsSpace().add(hammerNode);
    //immovable
    collisionNode = PhysicsTestHelper.createPhysicsTestNode(assetManager, new BoxCollisionShape(new Vector3f(.3f, .3f, .3f)), 0);
    collisionNode.getControl(RigidBodyControl.class).setPhysicsLocation(new Vector3f(1.8f, 0, 0f));
    rootNode.attachChild(collisionNode);
    getPhysicsSpace().add(collisionNode);
    //ghost node
    ghostControl = new GhostControl(new SphereCollisionShape(0.7f));
    hammerNode.addControl(ghostControl);
    getPhysicsSpace().add(ghostControl);
    joint = new HingeJoint(holderNode.getControl(RigidBodyControl.class), hammerNode.getControl(RigidBodyControl.class), Vector3f.ZERO, new Vector3f(0f, -1, 0f), Vector3f.UNIT_Z, Vector3f.UNIT_Z);
    getPhysicsSpace().add(joint);
}
Also used : SphereCollisionShape(com.jme3.bullet.collision.shapes.SphereCollisionShape) HingeJoint(com.jme3.bullet.joints.HingeJoint) GhostControl(com.jme3.bullet.control.GhostControl) Node(com.jme3.scene.Node) Vector3f(com.jme3.math.Vector3f) BoxCollisionShape(com.jme3.bullet.collision.shapes.BoxCollisionShape) RigidBodyControl(com.jme3.bullet.control.RigidBodyControl)

Example 4 with GhostControl

use of com.jme3.bullet.control.GhostControl in project jmonkeyengine by jMonkeyEngine.

the class TestGhostObject method initGhostObject.

private void initGhostObject() {
    Vector3f halfExtents = new Vector3f(3, 4.2f, 1);
    ghostControl = new GhostControl(new BoxCollisionShape(halfExtents));
    Node node = new Node("Ghost Object");
    node.addControl(ghostControl);
    rootNode.attachChild(node);
    getPhysicsSpace().add(ghostControl);
}
Also used : GhostControl(com.jme3.bullet.control.GhostControl) Vector3f(com.jme3.math.Vector3f) Node(com.jme3.scene.Node) BoxCollisionShape(com.jme3.bullet.collision.shapes.BoxCollisionShape)

Example 5 with GhostControl

use of com.jme3.bullet.control.GhostControl in project jmonkeyengine by jMonkeyEngine.

the class RollingTheMonkey method reset.

private void reset() {
    // Reset the pickups
    for (Spatial pickUp : pickUps.getChildren()) {
        GhostControl pickUpControl = pickUp.getControl(GhostControl.class);
        if (pickUpControl != null) {
            pickUpControl.setEnabled(true);
        }
        pickUp.setLocalScale(1.0f);
    }
    // Reset the player
    player.setPhysicsLocation(PLAYER_START.clone());
    player.setAngularVelocity(Vector3f.ZERO.clone());
    player.setLinearVelocity(Vector3f.ZERO.clone());
    // Reset the score
    score = 0;
    // Reset the message
    messageText.setLocalScale(0.0f);
}
Also used : Spatial(com.jme3.scene.Spatial) GhostControl(com.jme3.bullet.control.GhostControl)

Aggregations

GhostControl (com.jme3.bullet.control.GhostControl)5 BoxCollisionShape (com.jme3.bullet.collision.shapes.BoxCollisionShape)3 Vector3f (com.jme3.math.Vector3f)3 Node (com.jme3.scene.Node)3 SphereCollisionShape (com.jme3.bullet.collision.shapes.SphereCollisionShape)2 RigidBodyControl (com.jme3.bullet.control.RigidBodyControl)2 Spatial (com.jme3.scene.Spatial)2 BulletAppState (com.jme3.bullet.BulletAppState)1 CompoundCollisionShape (com.jme3.bullet.collision.shapes.CompoundCollisionShape)1 HingeJoint (com.jme3.bullet.joints.HingeJoint)1 BitmapText (com.jme3.font.BitmapText)1 KeyTrigger (com.jme3.input.controls.KeyTrigger)1 DirectionalLight (com.jme3.light.DirectionalLight)1 Material (com.jme3.material.Material)1 ColorRGBA (com.jme3.math.ColorRGBA)1 Quaternion (com.jme3.math.Quaternion)1 FilterPostProcessor (com.jme3.post.FilterPostProcessor)1 Geometry (com.jme3.scene.Geometry)1 Box (com.jme3.scene.shape.Box)1 Sphere (com.jme3.scene.shape.Sphere)1