2009-03-08 17:25:15 +00:00
|
|
|
package sg;
|
|
|
|
|
|
2009-03-10 13:04:15 +00:00
|
|
|
import java.util.logging.Level;
|
|
|
|
|
import java.util.logging.Logger;
|
|
|
|
|
|
2009-03-10 13:41:26 +00:00
|
|
|
import sg.env.Environment;
|
2009-03-10 17:35:12 +00:00
|
|
|
import sg.util.SGUtil;
|
2009-03-10 13:41:26 +00:00
|
|
|
|
2009-03-10 13:04:15 +00:00
|
|
|
import com.jme.bounding.BoundingBox;
|
2009-03-10 17:35:12 +00:00
|
|
|
import com.jme.scene.Node;
|
2009-03-10 13:04:15 +00:00
|
|
|
import com.jme.scene.shape.Sphere;
|
|
|
|
|
import com.jme.scene.state.TextureState;
|
2009-03-10 17:35:12 +00:00
|
|
|
import com.jme.system.DisplaySystem;
|
2009-03-09 09:59:22 +00:00
|
|
|
import com.jme.image.Texture;
|
2009-03-10 17:35:12 +00:00
|
|
|
import com.jme.input.ChaseCamera;
|
2009-03-10 17:18:05 +00:00
|
|
|
import com.jme.input.InputHandler;
|
|
|
|
|
import com.jme.input.KeyInput;
|
|
|
|
|
import com.jme.input.action.InputAction;
|
|
|
|
|
import com.jme.input.action.InputActionEvent;
|
2009-03-11 11:39:34 +00:00
|
|
|
import com.jme.math.Quaternion;
|
2009-03-09 10:32:07 +00:00
|
|
|
import com.jme.math.Vector3f;
|
2009-03-09 09:59:22 +00:00
|
|
|
import com.jme.util.TextureManager;
|
2009-03-10 15:27:00 +00:00
|
|
|
import com.jmex.physics.DynamicPhysicsNode;
|
2009-03-10 17:18:05 +00:00
|
|
|
import com.jmex.physics.PhysicsSpace;
|
|
|
|
|
import com.jmex.physics.PhysicsUpdateCallback;
|
2009-03-10 15:27:00 +00:00
|
|
|
import com.jmex.physics.StaticPhysicsNode;
|
|
|
|
|
import com.jmex.physics.util.SimplePhysicsGame;
|
2009-03-09 09:59:22 +00:00
|
|
|
|
2009-03-10 15:27:00 +00:00
|
|
|
public class SpaceGame extends SimplePhysicsGame {
|
|
|
|
|
private StaticPhysicsNode staticNode;
|
|
|
|
|
private DynamicPhysicsNode dynamicNode;
|
2009-03-10 13:41:26 +00:00
|
|
|
private Environment environment;
|
2009-03-10 17:18:05 +00:00
|
|
|
private InputHandler physicsStepInputHandler;
|
2009-03-08 17:25:15 +00:00
|
|
|
|
|
|
|
|
public static void main(String[] args) {
|
2009-03-10 17:35:12 +00:00
|
|
|
//Logger.getLogger("").setLevel( Level.WARNING );
|
2009-03-10 13:04:15 +00:00
|
|
|
SpaceGame game = new SpaceGame();
|
2009-03-10 15:27:00 +00:00
|
|
|
game.setConfigShowMode(ConfigShowMode.AlwaysShow);
|
2009-03-10 15:47:13 +00:00
|
|
|
game.start();
|
2009-03-09 09:59:22 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected void simpleInitGame() {
|
|
|
|
|
display.setTitle("SpaceGame");
|
2009-03-10 13:41:26 +00:00
|
|
|
|
|
|
|
|
//physics
|
2009-03-10 15:27:00 +00:00
|
|
|
getPhysicsSpace().setDirectionalGravity(new Vector3f(0f, 0f, 0f));
|
|
|
|
|
staticNode = getPhysicsSpace().createStaticNode();
|
|
|
|
|
rootNode.attachChild(staticNode);
|
|
|
|
|
dynamicNode = getPhysicsSpace().createDynamicNode();
|
|
|
|
|
rootNode.attachChild(dynamicNode);
|
2009-03-10 13:41:26 +00:00
|
|
|
|
|
|
|
|
//environment
|
|
|
|
|
environment = new Environment();
|
|
|
|
|
rootNode.attachChild(environment);
|
2009-03-10 15:27:00 +00:00
|
|
|
|
2009-03-10 13:58:05 +00:00
|
|
|
//light
|
|
|
|
|
//TODO
|
2009-03-11 11:39:34 +00:00
|
|
|
|
2009-03-10 17:18:05 +00:00
|
|
|
//controll
|
|
|
|
|
physicsStepInputHandler = new InputHandler();
|
2009-03-11 11:39:34 +00:00
|
|
|
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 );
|
2009-03-10 15:27:00 +00:00
|
|
|
|
2009-03-10 13:41:26 +00:00
|
|
|
//sphere
|
2009-03-10 17:35:12 +00:00
|
|
|
/*
|
2009-03-10 16:34:11 +00:00
|
|
|
Sphere s = new Sphere("Sphere", 10, 10, 25);
|
2009-03-10 13:04:15 +00:00
|
|
|
s.setLocalTranslation(new Vector3f(0,0,-40));
|
|
|
|
|
s.setModelBound(new BoundingBox());
|
|
|
|
|
s.updateModelBound();
|
|
|
|
|
Texture texture = TextureManager.loadTexture(
|
|
|
|
|
SpaceGame.class.getClassLoader().getResource(
|
2009-03-10 15:27:00 +00:00
|
|
|
"jmetest/data/images/Monkey.jpg"),
|
|
|
|
|
Texture.MinificationFilter.BilinearNearestMipMap,
|
|
|
|
|
Texture.MagnificationFilter.Bilinear);
|
2009-03-10 13:04:15 +00:00
|
|
|
TextureState ts = display.getRenderer().createTextureState();
|
|
|
|
|
ts.setEnabled(true);
|
|
|
|
|
ts.setTexture(texture);
|
|
|
|
|
s.setRenderState(ts);
|
2009-03-10 15:27:00 +00:00
|
|
|
dynamicNode.attachChild(s);
|
2009-03-11 11:39:34 +00:00
|
|
|
*/
|
|
|
|
|
|
2009-03-10 17:35:12 +00:00
|
|
|
Node ship = SGUtil.loadModel("sg/data/models/ships/G6.3ds");
|
|
|
|
|
ship.setLocalTranslation(new Vector3f(0,0,-40));
|
|
|
|
|
dynamicNode.attachChild(ship);
|
2009-03-11 11:39:34 +00:00
|
|
|
|
2009-03-10 17:35:12 +00:00
|
|
|
//ChaseCamera ccam = new ChaseCamera( cam, ship);
|
|
|
|
|
//input = ccam;
|
2009-03-09 09:59:22 +00:00
|
|
|
}
|
2009-03-09 10:32:07 +00:00
|
|
|
|
2009-03-09 09:59:22 +00:00
|
|
|
public void simpleUpdate(){
|
2009-03-10 16:32:33 +00:00
|
|
|
environment.update();
|
2009-03-09 10:32:07 +00:00
|
|
|
}
|
2009-03-11 11:39:34 +00:00
|
|
|
|
2009-03-10 17:18:05 +00:00
|
|
|
private class MyInputAction extends InputAction {
|
2009-03-11 11:39:34 +00:00
|
|
|
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);
|
2009-03-11 11:41:46 +00:00
|
|
|
switch(direction){
|
|
|
|
|
case 1:
|
|
|
|
|
case 2:
|
|
|
|
|
appliedForce.set(rotation.mult(force)).multLocal( evt.getTime() );
|
|
|
|
|
dynamicNode.addForce(appliedForce);
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
break;
|
|
|
|
|
}
|
2009-03-11 11:39:34 +00:00
|
|
|
}
|
|
|
|
|
}
|
2009-03-09 09:59:22 +00:00
|
|
|
}
|