package wow.doge.mygame.game.subsystems.level import com.jme3.bullet.BulletAppState import com.jme3.bullet.collision.shapes.CapsuleCollisionShape import com.jme3.bullet.control.CharacterControl import com.jme3.bullet.control.RigidBodyControl import com.jme3.bullet.util.CollisionShapeFactory import com.jme3.scene.Spatial import wow.doge.mygame.implicits._ import wow.doge.mygame.game.GameApp import com.jme3.syntax._ import com.jme3.math.ColorRGBA import com.jme3.light.DirectionalLight import com.jme3.math.Vector3f import com.jme3.light.AmbientLight object DefaultGameLevel { // lazy valbulletAppState: BulletAppState // bulletAppState.setThreadingType(ThreadingType.SEQUENTIAL) // We set up collision detection for the scene by creating a // compound collision shape and a static RigidBodyControl with mass zero. // We set up collision detection for the player by creating // a capsule collision shape and a CharacterControl. // The CharacterControl offers extra settings for // size, stepheight, jumping, falling, and gravity. // We also put the player in its starting position. lazy val capsuleShape = new CapsuleCollisionShape(1.5f, 6f, 1) lazy val player: CharacterControl = new CharacterControl(capsuleShape, 0.05f) def apply(app: GameApp, bulletAppState: BulletAppState) = { lazy val sceneModel: Spatial = app.assetManager.loadModel("main.scene") lazy val sceneShape = CollisionShapeFactory.createMeshShape( sceneModel.toNode match { case util.Right(node) => node case util.Left(ex) => throw new NotImplementedError("No fallback sceneshape") } ) lazy val landscape: RigidBodyControl = new RigidBodyControl(sceneShape, 0) // // discard { app.stateManager.attach(bulletAppState) } app.viewPort.setBackgroundColor(new ColorRGBA(0.7f, 0.8f, 1f, 1f)) sceneModel.setLocalScale(2f) sceneModel.addControl(landscape) discard { app.rootNode.attachChild(sceneModel) } bulletAppState.getPhysicsSpace.add(landscape) bulletAppState.getPhysicsSpace.add(player) val al = new AmbientLight(); al.setColor(ColorRGBA.White.mult(1.3f)); app.rootNode.addLight(al); val dl = new DirectionalLight(); dl.setColor(ColorRGBA.White); dl.setDirection(new Vector3f(2.8f, -2.8f, -2.8f).normalizeLocal()); app.rootNode.addLight(dl); } }