diff --git a/src/main/java/markil3/controller/JoystickPreviewScreen.java b/src/main/java/markil3/controller/JoystickPreviewScreen.java index f79642c..a7a814a 100644 --- a/src/main/java/markil3/controller/JoystickPreviewScreen.java +++ b/src/main/java/markil3/controller/JoystickPreviewScreen.java @@ -21,6 +21,7 @@ import com.jme3.font.BitmapText; import com.jme3.input.Joystick; import com.jme3.input.JoystickAxis; import com.jme3.input.JoystickButton; +import com.jme3.input.JoystickConnectionListener; import com.jme3.input.RawInputListener; import com.jme3.input.event.JoyAxisEvent; import com.jme3.input.event.JoyButtonEvent; @@ -70,7 +71,7 @@ import static markil3.controller.Main.START; * @author Stephen Gold */ public class JoystickPreviewScreen extends BaseAppState - implements RawInputListener + implements RawInputListener, JoystickConnectionListener { private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(JoystickPreviewScreen.class); @@ -529,15 +530,32 @@ public class JoystickPreviewScreen extends BaseAppState @Override public void initialize(Application app) { - int mostButtons = 0; - Joystick joy; - int l = this.getApplication().getInputManager().getJoysticks().length; - this.guiFont = app.getAssetManager().loadFont("Interface/Fonts/Default.fnt"); this.refLabel = this.guiFont.createLabel("Axis X/Axis Y"); this.gui.attachChild(this.refLabel); + this.updateGamepad(); + + // this.initNavState(); + // this.setFocus(this.playButton); + this.setEnabled(true); + + ((SimpleApplication) this.getApplication()).getGuiNode() + .attachChild(this.gui); + this.resize(((SimpleApplication) this.getApplication()).getCamera() + .getWidth(), + ((SimpleApplication) this.getApplication()).getCamera() + .getHeight()); + this.setEnabled(true); + } + + private void updateGamepad() + { + int mostButtons = 0; + Joystick joy; + int l = this.getApplication().getInputManager().getJoysticks().length; + if (this.gamepadCont != null) { for (Node cont : this.gamepadCont) @@ -548,9 +566,22 @@ public class JoystickPreviewScreen extends BaseAppState } } } + if (this.labels != null) + { + for (BitmapText[] cont : this.labels) + { + for (BitmapText cont2 : cont) + { + if (cont2 != null) + { + cont2.removeFromParent(); + } + } + } + } for (int i = 0; i < l; i++) { - joy = app.getInputManager().getJoysticks()[i]; + joy = this.getApplication().getInputManager().getJoysticks()[i]; mostButtons = Math.max(joy.getAxisCount() + joy.getButtonCount(), mostButtons); } @@ -573,18 +604,6 @@ public class JoystickPreviewScreen extends BaseAppState } } this.addButtons(); - - // this.initNavState(); - // this.setFocus(this.playButton); - this.setEnabled(true); - - ((SimpleApplication) this.getApplication()).getGuiNode() - .attachChild(this.gui); - this.resize(((SimpleApplication) this.getApplication()).getCamera() - .getWidth(), - ((SimpleApplication) this.getApplication()).getCamera() - .getHeight()); - this.setEnabled(true); } private void addButtons() @@ -650,12 +669,16 @@ public class JoystickPreviewScreen extends BaseAppState protected void onEnable() { this.getApplication().getInputManager().addRawInputListener(this); + this.getApplication().getInputManager() + .addJoystickConnectionListener(this); } @Override protected void onDisable() { this.getApplication().getInputManager().removeRawInputListener(this); + this.getApplication().getInputManager() + .removeJoystickConnectionListener(this); } private void setLabels(Joystick joy) @@ -928,4 +951,30 @@ public class JoystickPreviewScreen extends BaseAppState public void onTouchEvent(TouchEvent evt) { } + + @Override + public void onConnected(Joystick joystick) + { + this.updateGamepad(); + this.resize(((SimpleApplication) this.getApplication()).getCamera() + .getWidth(), + ((SimpleApplication) this.getApplication()).getCamera() + .getHeight()); + } + + @Override + public void onDisconnected(Joystick joystick) + { + /** + * TODO - This callback will fire before the joystick is actually + * removed. This is helpful at times, but it does mean we will have a + * blank slot because this code still thinks we have the one that was + * removed. + */ + this.updateGamepad(); + this.resize(((SimpleApplication) this.getApplication()).getCamera() + .getWidth(), + ((SimpleApplication) this.getApplication()).getCamera() + .getHeight()); + } }