129 lines
3.8 KiB
Java
129 lines
3.8 KiB
Java
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);
|
|
}
|
|
|
|
}
|