package Platform;
import com.jme3.app.SimpleApplication;
import com.jme3.bullet.BulletAppState;
import com.jme3.bullet.collision.shapes.CapsuleCollisionShape;
import com.jme3.bullet.collision.shapes.CollisionShape;
import com.jme3.bullet.control.CharacterControl;
import com.jme3.bullet.control.RigidBodyControl;
import com.jme3.bullet.util.CollisionShapeFactory;
import com.jme3.input.ChaseCamera;
import com.jme3.input.KeyInput;
import com.jme3.input.controls.ActionListener;
import com.jme3.input.controls.KeyTrigger;
import com.jme3.light.AmbientLight;
import com.jme3.light.DirectionalLight;
import com.jme3.material.Material;
import com.jme3.math.ColorRGBA;
import com.jme3.math.FastMath;
import com.jme3.math.Vector3f;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Box;
public class Main extends SimpleApplication
implements ActionListener {
private Geometry green;
private BulletAppState bulletAppState;
private RigidBodyControl f;
private CharacterControl player;
private Vector3f walkDirection = new Vector3f();
private boolean left = false, right = false, up = false, down = false;
public static void main(String[] args) {
Main app = new Main();
app.start();
}
//private SpotLight playerLight = new SpotLight();
public void simpleInitApp(){
bulletAppState = new BulletAppState();
stateManager.attach(bulletAppState);
flyCam.setEnabled(false);
setUpKeys();
CapsuleCollisionShape capsuleShape = new CapsuleCollisionShape(1f, 0f, 1);
player = new CharacterControl(capsuleShape, 0.05f);
player.setJumpSpeed(20);
player.setFallSpeed(30);
player.setGravity(30);
player.setPhysicsLocation(new Vector3f(0, 10, 0));
Box box2 = new Box( new Vector3f(0,0,0), 1,1,1);
green = new Geometry("Box", box2);
Material mat2 = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat2.setColor("Color", ColorRGBA.Green);
green.setMaterial(mat2);
rootNode.attachChild(green);
bulletAppState.getPhysicsSpace().add(player);
SimpleLevel l = new SimpleLevel();
int block;
block = l.blocknumber;
for (int i = 1; i < block; i++){
l.geom[i].setMaterial(assetManager.loadMaterial( "Materials/Ground.j3m"));
CollisionShape sceneShape2 = CollisionShapeFactory.createMeshShape(l.geom[i]);
f = new RigidBodyControl(sceneShape2, 0);
l.geom[i].addControl(f);
rootNode.attachChild(l.geom[i]);
bulletAppState.getPhysicsSpace().add(f);
}
DirectionalLight light = new DirectionalLight();
light.setDirection( new Vector3f( 1, 1, -2 ).normalize() );
light.setColor( ColorRGBA.White.mult(2) );
rootNode.addLight( light );
AmbientLight amb = new AmbientLight();
amb.setColor( ColorRGBA.Red );
rootNode.addLight( amb );
}
private void setUpKeys() {
inputManager.addMapping("Lefts", new KeyTrigger(KeyInput.KEY_A));
inputManager.addMapping("Rights", new KeyTrigger(KeyInput.KEY_D));
inputManager.addMapping("Jumps", new KeyTrigger(KeyInput.KEY_SPACE));
inputManager.addListener(this, "Lefts");
inputManager.addListener(this, "Rights");
inputManager.addListener(this, "Jumps");
}
public void onAction(String binding, boolean value, float tpf) {
if (binding.equals("Lefts")) {
left = value;
} else if (binding.equals("Rights")) {
right = value;
} else if (binding.equals("Jumps")) {
player.jump();
}
}
@Override
public void simpleUpdate(float tpf) {
ChaseCamera bluechase = new ChaseCamera(cam, green);
bluechase.setDefaultHorizontalRotation(1.5f);
bluechase.setLookAtOffset(new Vector3f(3, 0, 0));
bluechase.setChasingSensitivity(0f);
green.addControl(bluechase);
green.setLocalTranslation(player.getPhysicsLocation());
Vector3f camDir = cam.getDirection().clone().multLocal(0.6f);
Vector3f camLeft = cam.getLeft().clone().multLocal(0.4f);
walkDirection.set(0, 0, 0);
if (left) { walkDirection.addLocal(camLeft); }
if (right) { walkDirection.addLocal(camLeft.negate()); }
player.setWalkDirection(walkDirection);
cam.setLocation(player.getPhysicsLocation());
}
}
This is the whole program, maybe you can see something I can’t.