Added states to the game and Empty input handlers :)
This commit is contained in:
parent
5514b96257
commit
e3cc55162f
8 changed files with 311 additions and 2 deletions
|
|
@ -9,7 +9,7 @@
|
||||||
<classpathentry kind="lib" path="lib/jme-editors.jar"/>
|
<classpathentry kind="lib" path="lib/jme-editors.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/jme-effects.jar"/>
|
<classpathentry kind="lib" path="lib/jme-effects.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/jme-font.jar"/>
|
<classpathentry kind="lib" path="lib/jme-font.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/jme-gamestates.jar"/>
|
<classpathentry kind="lib" path="lib/jme-gamestates.jar" sourcepath="C:/Users/Ziver/Documents/Programmering/Java/libs/jme/jme/src"/>
|
||||||
<classpathentry kind="lib" path="lib/jme-model.jar"/>
|
<classpathentry kind="lib" path="lib/jme-model.jar"/>
|
||||||
<classpathentry kind="lib" path="lib/jme-physics.jar" sourcepath="C:/Users/Ziver/Documents/Programmering/Java/libs/jme/jME Physics 2/src"/>
|
<classpathentry kind="lib" path="lib/jme-physics.jar" sourcepath="C:/Users/Ziver/Documents/Programmering/Java/libs/jme/jME Physics 2/src"/>
|
||||||
<classpathentry kind="lib" path="lib/jme-scene.jar"/>
|
<classpathentry kind="lib" path="lib/jme-scene.jar"/>
|
||||||
|
|
|
||||||
181
src/sg/SpaceGame2.java
Normal file
181
src/sg/SpaceGame2.java
Normal file
|
|
@ -0,0 +1,181 @@
|
||||||
|
package sg;
|
||||||
|
|
||||||
|
import java.util.logging.Level;
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import sg.states.InGameState;
|
||||||
|
import sg.states.MenuState;
|
||||||
|
|
||||||
|
import com.jme.app.AbstractGame;
|
||||||
|
import com.jme.app.BaseGame;
|
||||||
|
import com.jme.input.KeyBindingManager;
|
||||||
|
import com.jme.input.KeyInput;
|
||||||
|
import com.jme.input.MouseInput;
|
||||||
|
import com.jme.input.joystick.JoystickInput;
|
||||||
|
import com.jme.renderer.ColorRGBA;
|
||||||
|
import com.jme.renderer.Renderer;
|
||||||
|
import com.jme.system.DisplaySystem;
|
||||||
|
import com.jme.system.JmeException;
|
||||||
|
import com.jme.util.GameTaskQueue;
|
||||||
|
import com.jme.util.GameTaskQueueManager;
|
||||||
|
import com.jme.util.TextureManager;
|
||||||
|
import com.jme.util.Timer;
|
||||||
|
import com.jmex.game.state.GameStateManager;
|
||||||
|
|
||||||
|
public class SpaceGame2 extends BaseGame {
|
||||||
|
private static final Logger logger = Logger.getLogger(SpaceGame2.class.getName());
|
||||||
|
|
||||||
|
public static final String TITLE = "SpaceGame";
|
||||||
|
|
||||||
|
/** Time per frame */
|
||||||
|
protected float tpf;
|
||||||
|
/** High resolution timer for jME. */
|
||||||
|
protected Timer timer;
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SpaceGame2 game = new SpaceGame2();
|
||||||
|
game.setConfigShowMode(ConfigShowMode.AlwaysShow);
|
||||||
|
game.start();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates display, sets up camera, and binds keys. Called in
|
||||||
|
* BaseGame.start() directly after the dialog box.
|
||||||
|
*
|
||||||
|
* @see AbstractGame#initSystem()
|
||||||
|
*/
|
||||||
|
protected void initSystem() throws JmeException {
|
||||||
|
logger.info(getVersion());
|
||||||
|
try {
|
||||||
|
/**
|
||||||
|
* Get a DisplaySystem acording to the renderer selected in the
|
||||||
|
* startup box.
|
||||||
|
*/
|
||||||
|
display = DisplaySystem.getDisplaySystem(settings.getRenderer() );
|
||||||
|
|
||||||
|
// Alpha bits to use for the renderer. Any changes must be made prior to call of start().
|
||||||
|
display.setMinAlphaBits( 0 );
|
||||||
|
// Depth bits to use for the renderer. Any changes must be made prior to call of start().
|
||||||
|
display.setMinDepthBits( 8 );
|
||||||
|
// Stencil bits to use for the renderer. Any changes must be made prior to call of start().
|
||||||
|
display.setMinStencilBits( 0 );
|
||||||
|
// Number of samples to use for the multisample buffer. Any changes must be made prior to call of start().
|
||||||
|
display.setMinSamples( 0 );
|
||||||
|
|
||||||
|
/** Create a window with the startup box's information. */
|
||||||
|
display.createWindow(settings.getWidth(), settings.getHeight(),
|
||||||
|
settings.getDepth(), settings.getFrequency(),
|
||||||
|
settings.isFullscreen() );
|
||||||
|
logger.info("Running on: " + display.getAdapter()
|
||||||
|
+ "\nDriver version: " + display.getDriverVersion() + "\n"
|
||||||
|
+ display.getDisplayVendor() + " - "
|
||||||
|
+ display.getDisplayRenderer() + " - "
|
||||||
|
+ display.getDisplayAPIVersion());
|
||||||
|
|
||||||
|
|
||||||
|
} catch ( JmeException e ) {
|
||||||
|
/**
|
||||||
|
* If the displaysystem can't be initialized correctly, exit
|
||||||
|
* instantly.
|
||||||
|
*/
|
||||||
|
logger.log(Level.SEVERE, "Could not create displaySystem", e);
|
||||||
|
System.exit( 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Set a black background. */
|
||||||
|
display.getRenderer().setBackgroundColor( ColorRGBA.black.clone() );
|
||||||
|
|
||||||
|
/** Get a high resolution timer for FPS updates. */
|
||||||
|
timer = Timer.getTimer();
|
||||||
|
|
||||||
|
/** Sets the title of our display. */
|
||||||
|
display.setTitle( TITLE );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void initGame() {
|
||||||
|
GameStateManager.getInstance().attachChild(new MenuState("menu"));
|
||||||
|
GameStateManager.getInstance().attachChild(new InGameState("ingame"));
|
||||||
|
|
||||||
|
timer.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void update(float interpolation) {
|
||||||
|
/** Recalculate the framerate. */
|
||||||
|
timer.update();
|
||||||
|
/** Update tpf to time per frame according to the Timer. */
|
||||||
|
tpf = timer.getTimePerFrame();
|
||||||
|
|
||||||
|
// Execute updateQueue item
|
||||||
|
GameTaskQueueManager.getManager().getQueue(GameTaskQueue.UPDATE).execute();
|
||||||
|
|
||||||
|
GameStateManager.getInstance().update(tpf);
|
||||||
|
|
||||||
|
|
||||||
|
if ( KeyBindingManager.getKeyBindingManager().isValidCommand(
|
||||||
|
"mem_report", false ) ) {
|
||||||
|
long totMem = Runtime.getRuntime().totalMemory();
|
||||||
|
long freeMem = Runtime.getRuntime().freeMemory();
|
||||||
|
long maxMem = Runtime.getRuntime().maxMemory();
|
||||||
|
|
||||||
|
logger.info("|*|*| Memory Stats |*|*|");
|
||||||
|
logger.info("Total memory: "+(totMem>>10)+" kb");
|
||||||
|
logger.info("Free memory: "+(freeMem>>10)+" kb");
|
||||||
|
logger.info("Max memory: "+(maxMem>>10)+" kb");
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( KeyBindingManager.getKeyBindingManager().isValidCommand( "exit",
|
||||||
|
false ) ) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Clears stats, the buffers and renders bounds and normals if on.
|
||||||
|
*
|
||||||
|
* @param interpolation unused in this implementation
|
||||||
|
* @see AbstractGame#render(float interpolation)
|
||||||
|
*/
|
||||||
|
protected void render( float interpolation ) {
|
||||||
|
Renderer r = display.getRenderer();
|
||||||
|
/** Clears the previously rendered information. */
|
||||||
|
r.clearBuffers();
|
||||||
|
|
||||||
|
// Execute renderQueue item
|
||||||
|
GameTaskQueueManager.getManager().getQueue(GameTaskQueue.RENDER).execute();
|
||||||
|
|
||||||
|
GameStateManager.getInstance().render(tpf);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void reinit() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleans up the keyboard.
|
||||||
|
*
|
||||||
|
* @see AbstractGame#cleanup()
|
||||||
|
*/
|
||||||
|
protected void cleanup() {
|
||||||
|
logger.info( "Cleaning up resources." );
|
||||||
|
|
||||||
|
TextureManager.doTextureCleanup();
|
||||||
|
if (display != null && display.getRenderer() != null)
|
||||||
|
display.getRenderer().cleanup();
|
||||||
|
KeyInput.destroyIfInitalized();
|
||||||
|
MouseInput.destroyIfInitalized();
|
||||||
|
JoystickInput.destroyIfInitalized();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Calls the quit of BaseGame to clean up the display and then closes the JVM.
|
||||||
|
*/
|
||||||
|
protected void quit() {
|
||||||
|
super.quit();
|
||||||
|
System.exit( 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
6
src/sg/input/FirstPersonHandler.java
Normal file
6
src/sg/input/FirstPersonHandler.java
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
package sg.input;
|
||||||
|
|
||||||
|
|
||||||
|
public class FirstPersonHandler extends GlobalInputHandler{
|
||||||
|
|
||||||
|
}
|
||||||
14
src/sg/input/GlobalInputHandler.java
Normal file
14
src/sg/input/GlobalInputHandler.java
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
package sg.input;
|
||||||
|
|
||||||
|
import com.jme.input.InputHandler;
|
||||||
|
|
||||||
|
public abstract class GlobalInputHandler extends InputHandler {
|
||||||
|
|
||||||
|
public GlobalInputHandler(){
|
||||||
|
/*
|
||||||
|
if ( KeyBindingManager.getKeyBindingManager().isValidCommand( "exit", false ) ) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
}
|
||||||
14
src/sg/input/ThirdPersonHandler.java
Normal file
14
src/sg/input/ThirdPersonHandler.java
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
package sg.input;
|
||||||
|
|
||||||
|
import com.jme.input.ChaseCamera;
|
||||||
|
import com.jme.renderer.Camera;
|
||||||
|
import com.jme.scene.Spatial;
|
||||||
|
|
||||||
|
|
||||||
|
public class ThirdPersonHandler extends GlobalInputHandler{
|
||||||
|
|
||||||
|
public ThirdPersonHandler(Camera cam, Spatial ship){
|
||||||
|
ChaseCamera ccam = new ChaseCamera(cam, ship);
|
||||||
|
this.addToAttachedHandlers(ccam);
|
||||||
|
}
|
||||||
|
}
|
||||||
84
src/sg/states/InGameState.java
Normal file
84
src/sg/states/InGameState.java
Normal file
|
|
@ -0,0 +1,84 @@
|
||||||
|
package sg.states;
|
||||||
|
|
||||||
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import sg.env.Environment;
|
||||||
|
import sg.util.SGUtil;
|
||||||
|
|
||||||
|
import com.jme.input.InputHandler;
|
||||||
|
import com.jme.input.ThirdPersonHandler;
|
||||||
|
import com.jme.math.Vector3f;
|
||||||
|
import com.jme.renderer.Renderer;
|
||||||
|
import com.jme.scene.Node;
|
||||||
|
import com.jme.system.DisplaySystem;
|
||||||
|
import com.jmex.game.state.CameraGameState;
|
||||||
|
import com.jmex.game.state.load.LoadingGameState;
|
||||||
|
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/ mous 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;
|
||||||
|
|
||||||
|
public InGameState(String name) {
|
||||||
|
super(name);
|
||||||
|
|
||||||
|
LoadingGameState loader = new LoadingGameState(2);
|
||||||
|
loader.setActive(true);
|
||||||
|
// ***************** Load the Game **********************************
|
||||||
|
|
||||||
|
//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.attachChild(environment);
|
||||||
|
loader.increment();
|
||||||
|
|
||||||
|
// ship
|
||||||
|
Node ship = SGUtil.loadModel("sg/data/models/ships/G6.3ds");
|
||||||
|
ship.setLocalTranslation(new Vector3f(0,0,-40));
|
||||||
|
//ship.setLocalScale(0.01f);
|
||||||
|
rootNode.attachChild(ship);
|
||||||
|
loader.increment();
|
||||||
|
|
||||||
|
// inputs
|
||||||
|
input = new ThirdPersonHandler(ship, cam);
|
||||||
|
loader.increment();
|
||||||
|
|
||||||
|
// ***************** Done loading **********************************
|
||||||
|
loader.setActive(false);
|
||||||
|
this.setActive(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
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 );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void stateRender(float tpf){
|
||||||
|
Renderer r = DisplaySystem.getDisplaySystem().getRenderer();
|
||||||
|
PhysicsDebugger.drawPhysics( physicsSpace, r );
|
||||||
|
}
|
||||||
|
}
|
||||||
11
src/sg/states/MenuState.java
Normal file
11
src/sg/states/MenuState.java
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
package sg.states;
|
||||||
|
|
||||||
|
import com.jmex.game.state.BasicGameState;
|
||||||
|
|
||||||
|
public class MenuState extends BasicGameState {
|
||||||
|
|
||||||
|
public MenuState(String name) {
|
||||||
|
super(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -5,7 +5,6 @@ import java.io.ByteArrayInputStream;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.net.URL;
|
|
||||||
|
|
||||||
import com.jme.bounding.BoundingBox;
|
import com.jme.bounding.BoundingBox;
|
||||||
import com.jme.image.Texture;
|
import com.jme.image.Texture;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue