@ -1,11 +1,15 @@
package jme3test.input ;
import com.jme3.app.SimpleApplication ;
import com.jme3.collision.CollisionResult ;
import com.jme3.collision.CollisionResults ;
import com.jme3.font.BitmapText ;
import com.jme3.input.Joystick ;
import com.jme3.input.JoystickAxis ;
import com.jme3.input.JoystickButton ;
import com.jme3.input.RawInputListener ;
import com.jme3.input.controls.ActionListener ;
import com.jme3.input.controls.MouseButtonTrigger ;
import com.jme3.input.event.JoyAxisEvent ;
import com.jme3.input.event.JoyButtonEvent ;
import com.jme3.input.event.KeyInputEvent ;
@ -16,7 +20,10 @@ import com.jme3.material.Material;
import com.jme3.material.RenderState.BlendMode ;
import com.jme3.math.ColorRGBA ;
import com.jme3.math.FastMath ;
import com.jme3.math.Ray ;
import com.jme3.math.Vector2f ;
import com.jme3.math.Vector3f ;
import com.jme3.renderer.Camera ;
import com.jme3.scene.Geometry ;
import com.jme3.scene.Node ;
import com.jme3.scene.shape.Quad ;
@ -33,6 +40,7 @@ public class TestJoystick extends SimpleApplication {
private GamepadView gamepad ;
private Node joystickInfo ;
private float yInfo = 0 ;
private JoystickButton lastButton ;
public static void main ( String [ ] args ) {
TestJoystick app = new TestJoystick ( ) ;
@ -44,6 +52,8 @@ public class TestJoystick extends SimpleApplication {
@Override
public void simpleInitApp ( ) {
getFlyByCamera ( ) . setEnabled ( false ) ;
Joystick [ ] joysticks = inputManager . getJoysticks ( ) ;
if ( joysticks = = null )
throw new IllegalStateException ( "Cannot find any joysticks!" ) ;
@ -54,9 +64,9 @@ public class TestJoystick extends SimpleApplication {
out . close ( ) ;
} catch ( IOException e ) {
throw new RuntimeException ( "Error writing joystick dump" , e ) ;
}
}
int gamepadSize = cam . getHeight ( ) / 2 ;
float scale = gamepadSize / 512 . 0f ;
gamepad = new GamepadView ( ) ;
@ -71,6 +81,18 @@ public class TestJoystick extends SimpleApplication {
// Add a raw listener because it's eisier to get all joystick events
// this way.
inputManager . addRawInputListener ( new JoystickEventListener ( ) ) ;
// add action listener for mouse click
// to all easier custom mapping
inputManager . addMapping ( "mouseClick" , new MouseButtonTrigger ( mouseInput . BUTTON_LEFT ) ) ;
inputManager . addListener ( new ActionListener ( ) {
@Override
public void onAction ( String name , boolean isPressed , float tpf ) {
if ( isPressed ) {
pickGamePad ( getInputManager ( ) . getCursorPosition ( ) ) ;
}
}
} , "mouseClick" ) ;
}
protected void dumpJoysticks ( Joystick [ ] joysticks , PrintWriter out ) {
@ -199,7 +221,7 @@ public class TestJoystick extends SimpleApplication {
leftStick = new Geometry ( "leftStick" , new Quad ( 64 , 64 ) ) ;
leftStick . setMaterial ( m ) ;
attachChild ( leftStick ) ;
rightStick = new Geometry ( "lef tStick" , new Quad ( 64 , 64 ) ) ;
rightStick = new Geometry ( "righ tStick" , new Quad ( 64 , 64 ) ) ;
rightStick . setMaterial ( m ) ;
attachChild ( rightStick ) ;
@ -244,7 +266,7 @@ public class TestJoystick extends SimpleApplication {
}
public void setAxisValue ( JoystickAxis axis , float value ) {
System . out . println ( "Axis:" + axis . getName ( ) + "=" + value ) ;
//System.out.println( "Axis:" + axis.getName() + "=" + value );
if ( axis = = axis . getJoystick ( ) . getXAxis ( ) ) {
setXAxis ( value ) ;
} else if ( axis = = axis . getJoystick ( ) . getYAxis ( ) ) {
@ -288,6 +310,7 @@ public class TestJoystick extends SimpleApplication {
public void setButtonValue ( JoystickButton button , boolean isPressed ) {
System . out . println ( "Button:" + button . getName ( ) + "=" + ( isPressed ? "Down" : "Up" ) ) ;
setButtonValue ( button . getLogicalId ( ) , isPressed ) ;
lastButton = button ;
}
protected void setButtonValue ( String name , boolean isPressed ) {
@ -389,4 +412,32 @@ public class TestJoystick extends SimpleApplication {
resetState ( ) ;
}
}
private void pickGamePad ( Vector2f mouseLoc ) {
if ( lastButton ! = null ) {
CollisionResults cresults = pick ( cam , mouseLoc , gamepad ) ;
for ( CollisionResult cr : cresults ) {
Node n = cr . getGeometry ( ) . getParent ( ) ;
if ( n ! = null & & ( n instanceof ButtonView ) ) {
String b = ( ( ButtonView ) n ) . getName ( ) . substring ( "Button:" . length ( ) ) ;
String name = lastButton . getJoystick ( ) . getName ( ) . replaceAll ( " " , "\\\\ " ) ;
String id = lastButton . getLogicalId ( ) . replaceAll ( " " , "\\\\ " ) ;
System . out . println ( name + "." + id + "=" + b ) ;
return ;
}
}
}
}
private static CollisionResults pick ( Camera cam , Vector2f mouseLoc , Node node ) {
CollisionResults results = new CollisionResults ( ) ;
Ray ray = new Ray ( ) ;
Vector3f pos = new Vector3f ( mouseLoc . x , mouseLoc . y , - 1 ) ;
Vector3f dir = new Vector3f ( mouseLoc . x , mouseLoc . y , 1 ) ;
dir . subtractLocal ( pos ) . normalizeLocal ( ) ;
ray . setOrigin ( pos ) ;
ray . setDirection ( dir ) ;
node . collideWith ( ray , results ) ;
return results ;
}
}