package wow.doge.mygame.game.subsystems.level import com.jme3.asset.AssetManager import com.jme3.bullet.control.RigidBodyControl import com.jme3.bullet.util.CollisionShapeFactory import com.jme3.light.AmbientLight import com.jme3.light.DirectionalLight import com.jme3.math.ColorRGBA import com.jme3.math.Vector3f import com.jme3.renderer.ViewPort import com.jme3.scene.Spatial import monix.bio.IO import monix.bio.UIO import wow.doge.mygame.AppError object DefaultGameLevel { def apply( assetManager: AssetManager, viewPort: ViewPort ) = { val sceneModel: Spatial = assetManager.loadModel("main.scene") val sceneShape = CollisionShapeFactory.createMeshShape( sceneModel.toNode match { case Right(node) => node case Left(ex) => throw new NotImplementedError("No fallback sceneshape") } ) val landscape: RigidBodyControl = new RigidBodyControl(sceneShape, 0) viewPort.setBackgroundColor(new ColorRGBA(0.7f, 0.8f, 1f, 1f)) sceneModel.setLocalScale(2f) sceneModel.addControl(landscape) // discard { 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); new GameLevel( model = sceneModel, physicsControl = landscape, ambientLight = al, directionalLight = dl ) } def apply( assetManager: wow.doge.mygame.utils.wrappers.jme.AssetManager, viewPort: ViewPort ): IO[AppError, GameLevel] = // for { // sceneModel <- assetManager.loadModelAs[Node](os.rel / "main.scene") // sceneShape <- UIO(CollisionShapeFactory.createMeshShape(sceneModel)) // landscape <- UIO(new RigidBodyControl(sceneShape, 0)) // _ <- UIO { // viewPort.setBackgroundColor(new ColorRGBA(0.7f, 0.8f, 1f, 1f)) // sceneModel.setLocalScale(2f) // sceneModel.addControl(landscape) // } // al = { // val al = new AmbientLight() // al.setColor(ColorRGBA.White.mult(1.3f)) // al // } // dl = { // val dl = new DirectionalLight() // dl.setColor(ColorRGBA.White) // dl.setDirection(new Vector3f(2.8f, -2.8f, -2.8f).normalizeLocal()) // dl // } // } yield new GameLevel( // model = sceneModel, // physicsControl = landscape, // ambientLight = al, // directionalLight = dl // ) GameLevel( os.rel / "main.scene", { val al = new AmbientLight() al.setColor(ColorRGBA.White.mult(1.3f)) al }, { val dl = new DirectionalLight() dl.setColor(ColorRGBA.White) dl.setDirection(new Vector3f(2.8f, -2.8f, -2.8f).normalizeLocal()) dl } )(assetManager).flatMap(gameLevel => UIO { viewPort.setBackgroundColor(new ColorRGBA(0.7f, 0.8f, 1f, 1f)) gameLevel.model.setLocalScale(2f) gameLevel.model.addControl(gameLevel.physicsControl) gameLevel } ) }