diff options
author | Scott Barta <sbarta@google.com> | 2012-03-01 12:35:35 -0800 |
---|---|---|
committer | Scott Barta <sbarta@google.com> | 2012-03-01 12:40:08 -0800 |
commit | 59b2e6871c65f58fdad78cd7229c292f6a177578 (patch) | |
tree | 2d4e7bfc05b93f40b34675d77e403dd1c25efafd /engine/src/niftygui/com/jme3/niftygui/InputSystemJme.java | |
parent | f9b30489e75ac1eabc365064959804e99534f7ab (diff) | |
download | jmonkeyengine-59b2e6871c65f58fdad78cd7229c292f6a177578.tar.gz |
Adds the jMonkeyEngine library to the build.
Adds the jMonkeyEngine open source 3D game engine to the build. This
is built as a static library and is only used by the Finsky client.
Change-Id: I06a3f054df7b8a67757267d884854f70c5a16ca0
Diffstat (limited to 'engine/src/niftygui/com/jme3/niftygui/InputSystemJme.java')
-rw-r--r-- | engine/src/niftygui/com/jme3/niftygui/InputSystemJme.java | 233 |
1 files changed, 233 insertions, 0 deletions
diff --git a/engine/src/niftygui/com/jme3/niftygui/InputSystemJme.java b/engine/src/niftygui/com/jme3/niftygui/InputSystemJme.java new file mode 100644 index 0000000..0b80131 --- /dev/null +++ b/engine/src/niftygui/com/jme3/niftygui/InputSystemJme.java @@ -0,0 +1,233 @@ +/* + * Copyright (c) 2009-2010 jMonkeyEngine + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * * Neither the name of 'jMonkeyEngine' nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package com.jme3.niftygui; + +import com.jme3.input.InputManager; +import com.jme3.input.KeyInput; +import com.jme3.input.RawInputListener; +import com.jme3.input.event.*; +import de.lessvoid.nifty.Nifty; +import de.lessvoid.nifty.NiftyInputConsumer; +import de.lessvoid.nifty.tools.resourceloader.NiftyResourceLoader; +import de.lessvoid.nifty.input.keyboard.KeyboardInputEvent; +import de.lessvoid.nifty.spi.input.InputSystem; +import java.util.ArrayList; + +public class InputSystemJme implements InputSystem, RawInputListener { + + private final ArrayList<InputEvent> inputQueue = new ArrayList<InputEvent>(); + + private InputManager inputManager; + + private boolean isDragging = false, niftyOwnsDragging = false; + private boolean pressed = false; + private int buttonIndex; + private int x, y; + private int height; + + private boolean shiftDown = false; + private boolean ctrlDown = false; + + private Nifty nifty; + + public InputSystemJme(InputManager inputManager){ + this.inputManager = inputManager; + } + + public void setResourceLoader(NiftyResourceLoader niftyResourceLoader) { + } + + public void setNifty(Nifty nifty) { + this.nifty = nifty; + } + + /** + * @param height The height of the viewport. Used to convert + * buttom-left origin to upper-left origin. + */ + public void setHeight(int height){ + this.height = height; + } + + public void setMousePosition(int x, int y){ + } + + public void beginInput(){ + } + + public void endInput(){ + boolean result = nifty.update(); + } + + private void onTouchEventQueued(TouchEvent evt, NiftyInputConsumer nic) { + boolean consumed = false; + + x = (int) evt.getX(); + y = (int) (height - evt.getY()); + + switch (evt.getType()) { + case DOWN: + consumed = nic.processMouseEvent(x, y, 0, 0, false); + isDragging = true; + niftyOwnsDragging = consumed; + if (consumed){ + evt.setConsumed(); + } + + break; + + case UP: + if (niftyOwnsDragging){ + consumed = nic.processMouseEvent(x, y, 0, buttonIndex, pressed); + if (consumed){ + evt.setConsumed(); + } + } + + isDragging = false; + niftyOwnsDragging = false; + break; + } + } + + private void onMouseMotionEventQueued(MouseMotionEvent evt, NiftyInputConsumer nic) { + x = evt.getX(); + y = height - evt.getY(); + nic.processMouseEvent(x, y, evt.getDeltaWheel(), buttonIndex, pressed); +// if (nic.processMouseEvent(niftyEvt) /*|| nifty.getCurrentScreen().isMouseOverElement()*/){ + // Do not consume motion events + //evt.setConsumed(); +// } + } + + private void onMouseButtonEventQueued(MouseButtonEvent evt, NiftyInputConsumer nic) { + boolean wasPressed = pressed; + boolean forwardToNifty = true; + + buttonIndex = evt.getButtonIndex(); + pressed = evt.isPressed(); + + // Mouse button raised. End dragging + if (wasPressed && !pressed){ + if (!niftyOwnsDragging){ + forwardToNifty = false; + } + isDragging = false; + niftyOwnsDragging = false; + } + + boolean consumed = false; + if (forwardToNifty){ + consumed = nic.processMouseEvent(x, y, 0, buttonIndex, pressed); + if (consumed){ + evt.setConsumed(); + } + } + + // Mouse button pressed. Begin dragging + if (!wasPressed && pressed){ + isDragging = true; + niftyOwnsDragging = consumed; + } + } + + private void onKeyEventQueued(KeyInputEvent evt, NiftyInputConsumer nic) { + int code = evt.getKeyCode(); + + if (code == KeyInput.KEY_LSHIFT || code == KeyInput.KEY_RSHIFT) { + shiftDown = evt.isPressed(); + } else if (code == KeyInput.KEY_LCONTROL || code == KeyInput.KEY_RCONTROL) { + ctrlDown = evt.isPressed(); + } + + KeyboardInputEvent keyEvt = new KeyboardInputEvent(code, + evt.getKeyChar(), + evt.isPressed(), + shiftDown, + ctrlDown); + + if (nic.processKeyboardEvent(keyEvt)){ + evt.setConsumed(); + } + } + + public void onMouseMotionEvent(MouseMotionEvent evt) { + // Only forward the event if there's actual motion involved. + if (inputManager.isCursorVisible() && (evt.getDX() != 0 || + evt.getDY() != 0 || + evt.getDeltaWheel() != 0)){ + inputQueue.add(evt); + } + } + + public void onMouseButtonEvent(MouseButtonEvent evt) { + if (inputManager.isCursorVisible() && evt.getButtonIndex() >= 0 && evt.getButtonIndex() <= 2){ + inputQueue.add(evt); + } + } + + public void onJoyAxisEvent(JoyAxisEvent evt) { + } + + public void onJoyButtonEvent(JoyButtonEvent evt) { + } + + public void onKeyEvent(KeyInputEvent evt) { + inputQueue.add(evt); + } + + public void onTouchEvent(TouchEvent evt) { + inputQueue.add(evt); + } + + public void forwardEvents(NiftyInputConsumer nic) { + int queueSize = inputQueue.size(); + + for (int i = 0; i < queueSize; i++){ + InputEvent evt = inputQueue.get(i); + if (evt instanceof MouseMotionEvent){ + onMouseMotionEventQueued( (MouseMotionEvent)evt, nic); + }else if (evt instanceof MouseButtonEvent){ + onMouseButtonEventQueued( (MouseButtonEvent)evt, nic); + }else if (evt instanceof KeyInputEvent){ + onKeyEventQueued( (KeyInputEvent)evt, nic); + }else if (evt instanceof TouchEvent){ + onTouchEventQueued( (TouchEvent)evt, nic); + } + } + + inputQueue.clear(); + } + + +} |