• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
DebugKeysAppState()61     public DebugKeysAppState() {
62     }
63 
64     @Override
initialize(AppStateManager stateManager, Application app)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
cleanup()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 
onAction(String name, boolean value, float tpf)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