Testing out JmonkeyEngine to make a game in Scala with Akka Actors within a pure FP layer
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.

104 lines
3.1 KiB

4 years ago
4 years ago
4 years ago
4 years ago
3 years ago
4 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
3 years ago
  1. package wow.doge.mygame.game.subsystems.level
  2. import com.jme3.asset.AssetManager
  3. import com.jme3.bullet.control.RigidBodyControl
  4. import com.jme3.bullet.util.CollisionShapeFactory
  5. import com.jme3.light.AmbientLight
  6. import com.jme3.light.DirectionalLight
  7. import com.jme3.math.ColorRGBA
  8. import com.jme3.math.Vector3f
  9. import com.jme3.renderer.ViewPort
  10. import com.jme3.scene.Spatial
  11. import monix.bio.UIO
  12. object DefaultGameLevel {
  13. def apply(
  14. assetManager: AssetManager,
  15. viewPort: ViewPort
  16. ) = {
  17. val sceneModel: Spatial = assetManager.loadModel("main.scene")
  18. val sceneShape = CollisionShapeFactory.createMeshShape(
  19. sceneModel.toNode match {
  20. case Right(node) => node
  21. case Left(ex) =>
  22. throw new NotImplementedError("No fallback sceneshape")
  23. }
  24. )
  25. val landscape: RigidBodyControl = new RigidBodyControl(sceneShape, 0)
  26. viewPort.setBackgroundColor(new ColorRGBA(0.7f, 0.8f, 1f, 1f))
  27. sceneModel.setLocalScale(2f)
  28. sceneModel.addControl(landscape)
  29. // discard { rootNode.attachChild(sceneModel) }
  30. // bulletAppState.getPhysicsSpace.add(landscape)
  31. // bulletAppState.getPhysicsSpace.add(player)
  32. val al = new AmbientLight();
  33. al.setColor(ColorRGBA.White.mult(1.3f));
  34. // app.rootNode.addLight(al);
  35. val dl = new DirectionalLight();
  36. dl.setColor(ColorRGBA.White);
  37. dl.setDirection(new Vector3f(2.8f, -2.8f, -2.8f).normalizeLocal());
  38. // app.rootNode.addLight(dl);
  39. new GameLevel(
  40. model = sceneModel,
  41. physicsControl = landscape,
  42. ambientLight = al,
  43. directionalLight = dl
  44. )
  45. }
  46. def apply(
  47. assetManager: wow.doge.mygame.utils.wrappers.jme.AssetManager,
  48. viewPort: ViewPort
  49. ) =
  50. // for {
  51. // sceneModel <- assetManager.loadModelAs[Node](os.rel / "main.scene")
  52. // sceneShape <- UIO(CollisionShapeFactory.createMeshShape(sceneModel))
  53. // landscape <- UIO(new RigidBodyControl(sceneShape, 0))
  54. // _ <- UIO {
  55. // viewPort.setBackgroundColor(new ColorRGBA(0.7f, 0.8f, 1f, 1f))
  56. // sceneModel.setLocalScale(2f)
  57. // sceneModel.addControl(landscape)
  58. // }
  59. // al = {
  60. // val al = new AmbientLight()
  61. // al.setColor(ColorRGBA.White.mult(1.3f))
  62. // al
  63. // }
  64. // dl = {
  65. // val dl = new DirectionalLight()
  66. // dl.setColor(ColorRGBA.White)
  67. // dl.setDirection(new Vector3f(2.8f, -2.8f, -2.8f).normalizeLocal())
  68. // dl
  69. // }
  70. // } yield new GameLevel(
  71. // model = sceneModel,
  72. // physicsControl = landscape,
  73. // ambientLight = al,
  74. // directionalLight = dl
  75. // )
  76. GameLevel(
  77. os.rel / "main.scene", {
  78. val al = new AmbientLight()
  79. al.setColor(ColorRGBA.White.mult(1.3f))
  80. al
  81. }, {
  82. val dl = new DirectionalLight()
  83. dl.setColor(ColorRGBA.White)
  84. dl.setDirection(new Vector3f(2.8f, -2.8f, -2.8f).normalizeLocal())
  85. dl
  86. }
  87. )(assetManager).flatMap(gameLevel =>
  88. UIO {
  89. viewPort.setBackgroundColor(new ColorRGBA(0.7f, 0.8f, 1f, 1f))
  90. gameLevel.model.setLocalScale(2f)
  91. gameLevel.model.addControl(gameLevel.physicsControl)
  92. gameLevel
  93. }
  94. )
  95. }