now we can steer the ship

This commit is contained in:
Daniel Collin 2009-03-11 14:56:11 +00:00
parent 0935259b6c
commit 47c43078f0
3 changed files with 182 additions and 219 deletions

View file

@ -1,28 +1,12 @@
package sg;
import java.util.logging.Level;
import java.util.logging.Logger;
import sg.env.Environment;
import sg.input.FirstPersonHandler;
import sg.util.SGUtil;
import com.jme.bounding.BoundingBox;
import com.jme.scene.Node;
import com.jme.scene.shape.Sphere;
import com.jme.scene.state.TextureState;
import com.jme.system.DisplaySystem;
import com.jme.image.Texture;
import com.jme.input.ChaseCamera;
import com.jme.input.InputHandler;
import com.jme.input.KeyInput;
import com.jme.input.action.InputAction;
import com.jme.input.action.InputActionEvent;
import com.jme.math.Quaternion;
import com.jme.math.Vector3f;
import com.jme.util.TextureManager;
import com.jmex.physics.DynamicPhysicsNode;
import com.jmex.physics.PhysicsSpace;
import com.jmex.physics.PhysicsUpdateCallback;
import com.jmex.physics.StaticPhysicsNode;
import com.jmex.physics.util.SimplePhysicsGame;
@ -30,7 +14,9 @@ public class SpaceGame extends SimplePhysicsGame {
private StaticPhysicsNode staticNode;
private DynamicPhysicsNode dynamicNode;
private Environment environment;
private InputHandler physicsStepInputHandler;
private Node ship;
private DynamicPhysicsNode shipNode;
private FirstPersonHandler firstPersonHandler;
public static void main(String[] args) {
//Logger.getLogger("").setLevel( Level.WARNING );
@ -48,91 +34,27 @@ public class SpaceGame extends SimplePhysicsGame {
rootNode.attachChild(staticNode);
dynamicNode = getPhysicsSpace().createDynamicNode();
rootNode.attachChild(dynamicNode);
shipNode = getPhysicsSpace().createDynamicNode();
rootNode.attachChild(shipNode);
//environment
environment = new Environment();
environment = new Environment(rootNode);
rootNode.attachChild(environment);
//light
//TODO
//controll
physicsStepInputHandler = new InputHandler();
getPhysicsSpace().addToUpdateCallbacks( new PhysicsUpdateCallback() {
public void beforeStep( PhysicsSpace space, float time ) {
physicsStepInputHandler.update( time );
}
public void afterStep( PhysicsSpace space, float time ) {
}
} );
physicsStepInputHandler.addAction( new MyInputAction(700, MyInputAction.FORWARD),
InputHandler.DEVICE_KEYBOARD, KeyInput.KEY_HOME, InputHandler.AXIS_NONE, true );
physicsStepInputHandler.addAction( new MyInputAction(700, MyInputAction.BACK),
InputHandler.DEVICE_KEYBOARD, KeyInput.KEY_END, InputHandler.AXIS_NONE, true );
physicsStepInputHandler.addAction( new MyInputAction(700, MyInputAction.LEFT),
InputHandler.DEVICE_KEYBOARD, KeyInput.KEY_PGUP, InputHandler.AXIS_NONE, true );
physicsStepInputHandler.addAction( new MyInputAction(700, MyInputAction.RIGHT),
InputHandler.DEVICE_KEYBOARD, KeyInput.KEY_PGDN, InputHandler.AXIS_NONE, true );
//sphere
/*
Sphere s = new Sphere("Sphere", 10, 10, 25);
s.setLocalTranslation(new Vector3f(0,0,-40));
s.setModelBound(new BoundingBox());
s.updateModelBound();
Texture texture = TextureManager.loadTexture(
SpaceGame.class.getClassLoader().getResource(
"jmetest/data/images/Monkey.jpg"),
Texture.MinificationFilter.BilinearNearestMipMap,
Texture.MagnificationFilter.Bilinear);
TextureState ts = display.getRenderer().createTextureState();
ts.setEnabled(true);
ts.setTexture(texture);
s.setRenderState(ts);
dynamicNode.attachChild(s);
*/
Node ship = SGUtil.loadModel("sg/data/models/ships/G6.3ds");
//ship
ship = SGUtil.loadModel("sg/data/models/ships/G6.3ds");
ship.setLocalTranslation(new Vector3f(0,0,-40));
dynamicNode.attachChild(ship);
//ChaseCamera ccam = new ChaseCamera( cam, ship);
//input = ccam;
shipNode.attachChild(ship);
//controll
firstPersonHandler = new FirstPersonHandler(ship, shipNode, cam);
}
public void simpleUpdate(){
environment.update();
}
private class MyInputAction extends InputAction {
public static final int FORWARD = 1;
public static final int BACK = 2;
public static final int LEFT = 3;
public static final int RIGHT = 4;
private final float force;
private final Vector3f appliedForce = new Vector3f();
private Vector3f rotation;
private final int direction;
public MyInputAction(float force, int direction) {
this.force = force;
this.direction = direction;
}
public void performAction( InputActionEvent evt ) {
rotation = dynamicNode.getLocalRotation().getRotationColumn(2);
switch(direction){
case 1:
case 2:
appliedForce.set(rotation.mult(force)).multLocal( evt.getTime() );
dynamicNode.addForce(appliedForce);
break;
case 3:
break;
case 4:
break;
}
}
firstPersonHandler.update(0.1f);
}
}