diff --git a/README.md b/README.md index 513cd3f..ab418b6 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,9 @@ A game about a journey involving vehicles and obstacles. ## Status ### DONE * Physics-based vehicle +* Camera following the player * Hilly ground +* Collidable objects (testing) ### TODO * Orbit camera diff --git a/screenshot.png b/screenshot.png index 9b3f0d1..5bc57fd 100644 Binary files a/screenshot.png and b/screenshot.png differ diff --git a/src/roadtrip/PhysicsTestHelper.java b/src/roadtrip/PhysicsTestHelper.java index 16d8488..b6f6564 100644 --- a/src/roadtrip/PhysicsTestHelper.java +++ b/src/roadtrip/PhysicsTestHelper.java @@ -72,38 +72,18 @@ public class PhysicsTestHelper { Material material = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md"); material.setTexture("ColorMap", assetManager.loadTexture("Interface/Logo/Monkey.jpg")); - Box floorBox = new Box(140, 0.25f, 140); - Geometry floorGeometry = new Geometry("Floor", floorBox); - floorGeometry.setMaterial(material); - floorGeometry.setLocalTranslation(0, -5, 0); -// Plane plane = new Plane(); -// plane.setOriginNormal(new Vector3f(0, 0.25f, 0), Vector3f.UNIT_Y); -// floorGeometry.addControl(new RigidBodyControl(new PlaneCollisionShape(plane), 0)); - floorGeometry.addControl(new RigidBodyControl(0)); - rootNode.attachChild(floorGeometry); - space.add(floorGeometry); - //movable boxes - for (int i = 0; i < 12; i++) { - Box box = new Box(0.25f, 0.25f, 0.25f); + for (int i = 0; i < 20; i++) { + float s = i % 3 == 0 ? 1f : 0.4f; + Box box = new Box(s, s, s); Geometry boxGeometry = new Geometry("Box", box); boxGeometry.setMaterial(material); - boxGeometry.setLocalTranslation(i, 5, -3); + boxGeometry.setLocalTranslation(i * 1.2f, 35, -3); //RigidBodyControl automatically uses box collision shapes when attached to single geometry with box mesh boxGeometry.addControl(new RigidBodyControl(2)); rootNode.attachChild(boxGeometry); space.add(boxGeometry); } - - //immovable sphere with mesh collision shape - Sphere sphere = new Sphere(8, 8, 1); - Geometry sphereGeometry = new Geometry("Sphere", sphere); - sphereGeometry.setMaterial(material); - sphereGeometry.setLocalTranslation(4, -4, 2); - sphereGeometry.addControl(new RigidBodyControl(new MeshCollisionShape(sphere), 0)); - rootNode.attachChild(sphereGeometry); - space.add(sphereGeometry); - } public static void createPhysicsTestWorldSoccer(Node rootNode, AssetManager assetManager, PhysicsSpace space) { diff --git a/src/roadtrip/RoadTrip.java b/src/roadtrip/RoadTrip.java index 94ea63f..4107cbb 100644 --- a/src/roadtrip/RoadTrip.java +++ b/src/roadtrip/RoadTrip.java @@ -209,8 +209,10 @@ public class RoadTrip extends SimpleApplication implements ActionListener { @Override public void simpleUpdate(float tpf) { - cam.setLocation(new Vector3f(-10f, 35f, -10f)); - cam.lookAt(vehicle.getPhysicsLocation(), Vector3f.UNIT_Y); + Vector3f vehicleLocation = vehicle.getPhysicsLocation(); + Vector3f newLocation = new Vector3f(vehicleLocation).add(new Vector3f(-1f, 1.5f, 2.4f).mult(20f)); + cam.setLocation(new Vector3f(cam.getLocation()).interpolate(newLocation, Math.min(tpf, 1f))); + cam.lookAt(vehicleLocation, Vector3f.UNIT_Y); } public void onAction(String binding, boolean value, float tpf) {