1 /* 2 * Copyright (c) 2009-2012 jMonkeyEngine 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: 8 * 9 * * Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 12 * * Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * * Neither the name of 'jMonkeyEngine' nor the names of its contributors 17 * may be used to endorse or promote products derived from this software 18 * without specific prior written permission. 19 * 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 21 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 24 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 25 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 26 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 27 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 28 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 29 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 31 */ 32 package com.jme3.app; 33 34 import com.jme3.app.state.AbstractAppState; 35 import com.jme3.app.state.AppStateManager; 36 import com.jme3.input.InputManager; 37 import com.jme3.input.KeyInput; 38 import com.jme3.input.controls.ActionListener; 39 import com.jme3.input.controls.KeyTrigger; 40 import com.jme3.math.Quaternion; 41 import com.jme3.math.Vector3f; 42 import com.jme3.renderer.Camera; 43 import com.jme3.util.BufferUtils; 44 45 46 /** 47 * Registers a few keys that will dump debug information 48 * to the console. 49 * 50 * @author Paul Speed 51 */ 52 public class DebugKeysAppState extends AbstractAppState { 53 54 public static final String INPUT_MAPPING_CAMERA_POS = "SIMPLEAPP_CameraPos"; 55 public static final String INPUT_MAPPING_MEMORY = "SIMPLEAPP_Memory"; 56 57 private Application app; 58 private DebugKeyListener keyListener = new DebugKeyListener(); 59 private InputManager inputManager; 60 61 public DebugKeysAppState() { 62 } 63 64 @Override 65 public void initialize(AppStateManager stateManager, Application app) { 66 super.initialize(stateManager, app); 67 68 this.app = app; 69 this.inputManager = app.getInputManager(); 70 71 if (app.getInputManager() != null) { 72 73 inputManager.addMapping(INPUT_MAPPING_CAMERA_POS, new KeyTrigger(KeyInput.KEY_C)); 74 inputManager.addMapping(INPUT_MAPPING_MEMORY, new KeyTrigger(KeyInput.KEY_M)); 75 76 inputManager.addListener(keyListener, 77 INPUT_MAPPING_CAMERA_POS, 78 INPUT_MAPPING_MEMORY); 79 } 80 } 81 82 @Override 83 public void cleanup() { 84 super.cleanup(); 85 86 if (inputManager.hasMapping(INPUT_MAPPING_CAMERA_POS)) 87 inputManager.deleteMapping(INPUT_MAPPING_CAMERA_POS); 88 if (inputManager.hasMapping(INPUT_MAPPING_MEMORY)) 89 inputManager.deleteMapping(INPUT_MAPPING_MEMORY); 90 91 inputManager.removeListener(keyListener); 92 } 93 94 95 private class DebugKeyListener implements ActionListener { 96 97 public void onAction(String name, boolean value, float tpf) { 98 if (!value) { 99 return; 100 } 101 102 if (name.equals(INPUT_MAPPING_CAMERA_POS)) { 103 Camera cam = app.getCamera(); 104 if (cam != null) { 105 Vector3f loc = cam.getLocation(); 106 Quaternion rot = cam.getRotation(); 107 System.out.println("Camera Position: (" 108 + loc.x + ", " + loc.y + ", " + loc.z + ")"); 109 System.out.println("Camera Rotation: " + rot); 110 System.out.println("Camera Direction: " + cam.getDirection()); 111 } 112 } else if (name.equals(INPUT_MAPPING_MEMORY)) { 113 BufferUtils.printCurrentDirectMemory(null); 114 } 115 } 116 } 117 } 118