forked from nova/jmonkey-test
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
63 lines
2.3 KiB
63 lines
2.3 KiB
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);
|
|
|
|
}
|
|
}
|