package sg.states; import java.util.logging.Logger; import sg.env.Environment; import sg.input.SGThirdPersonHandler; import sg.util.SGUtil; import com.jme.input.InputHandler; import com.jme.light.PointLight; import com.jme.math.FastMath; import com.jme.math.Vector3f; import com.jme.renderer.ColorRGBA; import com.jme.renderer.Renderer; import com.jme.scene.Node; import com.jme.scene.state.LightState; import com.jme.system.DisplaySystem; import com.jmex.game.state.CameraGameState; import com.jmex.game.state.GameStateManager; import com.jmex.physics.DynamicPhysicsNode; import com.jmex.physics.PhysicsDebugger; import com.jmex.physics.PhysicsSpace; import com.jmex.physics.StaticPhysicsNode; public class InGameState extends CameraGameState { /** The Keyboard/ mouse input handler */ protected InputHandler input; /** The environment of the game */ protected Environment environment; /** The physics space */ private PhysicsSpace physicsSpace; /** The Speed of the physics */ private float physicsSpeed = 1; /** Render pass manager */ //protected BasicPassManager passManager; public InGameState(String name) { super(name); // Pass (render thingies) //passManager = new BasicPassManager(); //physics physicsSpace = PhysicsSpace.create(); physicsSpace.setDirectionalGravity(new Vector3f(0f, 0f, 0f)); StaticPhysicsNode staticNode = physicsSpace.createStaticNode(); DynamicPhysicsNode dynamicNode = physicsSpace.createDynamicNode(); rootNode.attachChild(dynamicNode); rootNode.attachChild(staticNode); // environment environment = new Environment(rootNode, physicsSpace); rootNode.attachChild(environment); // ship DynamicPhysicsNode ship = physicsSpace.createDynamicNode(); Node shipModel = SGUtil.loadModel("sg/data/models/ships/G6.3ds"); shipModel.getLocalRotation().fromAngleAxis(-90*FastMath.DEG_TO_RAD, Vector3f.UNIT_Y); ship.attachChild(shipModel); ship.setLocalTranslation(new Vector3f( 0, 0, 40)); rootNode.attachChild(ship); // inputs input = new SGThirdPersonHandler( ship, ship ,cam ); // lights /** Set up a basic, default light. */ PointLight light = new PointLight(); light.setDiffuse( new ColorRGBA( 0.75f, 0.75f, 0.75f, 0.75f ) ); light.setAmbient( new ColorRGBA( 0.5f, 0.5f, 0.5f, 1.0f ) ); light.setLocation( new Vector3f( 100, 100, 100 ) ); light.setEnabled( true ); /** Attach the light to a lightState and the lightState to rootNode. */ LightState lightState = DisplaySystem.getDisplaySystem().getRenderer().createLightState(); lightState.setEnabled( true ); lightState.attach( light ); rootNode.setRenderState( lightState ); rootNode.updateRenderState(); HudState hud = new HudState("hud"); GameStateManager.getInstance().attachChild(hud); cam.setFrustumFar(5000); // ***************** Done loading ********************************** setActive(true); } public void setActive(boolean b){ if(b){ this.active = true; super.setActive(b); GameStateManager.getInstance().activateChildNamed("hud"); } else{ this.active = false; super.setActive(b); GameStateManager.getInstance().deactivateChildNamed("hud"); } } public void stateUpdate(float tpf) { input.update(tpf); environment.update(); if ( tpf > 0.2 || Float.isNaN( tpf ) ) { Logger.getLogger( PhysicsSpace.LOGGER_NAME ).warning( "Maximum physics update interval is 0.2 seconds - capped." ); physicsSpace.update( 0.2f * physicsSpeed ); } else physicsSpace.update( tpf * physicsSpeed ); //passManager.updatePasses(tpf); } public void stateRender(float tpf){ Renderer r = DisplaySystem.getDisplaySystem().getRenderer(); // debug PhysicsDebugger.drawPhysics( physicsSpace, r ); /** Have the PassManager render. */ //passManager.renderPasses(r); } }