/** * Copyright 2008 - 2015 The Loon Game Engine Authors * * Licensed under the Apache License, Version 2.0 (the "License"); you may not * use this file except in compliance with the License. You may obtain a copy of * the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations under * the License. * * @project loon * @author cping * @email:javachenpeng@yahoo.com * @version 0.5 */ package loon.javase; import loon.event.SysKey; import loon.event.SysTouch; import loon.geom.Vector2f; import org.lwjgl.LWJGLException; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; import org.lwjgl.opengl.Display; public class JavaSELwjglInputMake extends JavaSEInputMake { public JavaSELwjglInputMake(JavaSEGame game) { super(game); } @Override public boolean hasMouseLock() { return true; } @Override public boolean isMouseLocked() { return Mouse.isGrabbed(); } @Override public void setMouseLocked(boolean locked) { Mouse.setGrabbed(locked); } @Override void init() { try { Keyboard.create(); Mouse.create(); } catch (LWJGLException e) { throw new RuntimeException(e); } } @Override void update() { super.update(); Keyboard.poll(); int flags = modifierFlags( Keyboard.isKeyDown(Keyboard.KEY_LMENU) || Keyboard.isKeyDown(Keyboard.KEY_RMENU), Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL), Keyboard.isKeyDown(Keyboard.KEY_LMETA) || Keyboard.isKeyDown(Keyboard.KEY_RMETA), Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)); while (Keyboard.next()) { double time = (double) (Keyboard.getEventNanoseconds() / 1000000); int keyCode = Keyboard.getEventKey(); char keyChar = Keyboard.getEventCharacter(); if (Keyboard.getEventKeyState()) { emitKeyPress(time, keyForCode(keyCode), keyChar, true, flags); } else { emitKeyPress(time, keyForCode(keyCode), keyChar, false, flags); } } while (Mouse.next()) { double time = (double) (Mouse.getEventNanoseconds() / 1000000); Vector2f m = new Vector2f(Mouse.getEventX(), Display.getHeight() - Mouse.getEventY() - 1); int btnIdx = Mouse.getEventButton(); int id = getButton(btnIdx); emitMouseButton(time, m.x, m.y, id, Mouse.getEventButtonState(), flags); } } private static int getButton(int lwjglButton) { switch (lwjglButton) { case 0: return SysTouch.LEFT; case 2: return SysTouch.MIDDLE; case 1: return SysTouch.RIGHT; default: return -1; } } private int keyForCode(int keyCode) { switch (keyCode) { case Keyboard.KEY_ESCAPE: return SysKey.ESCAPE; case Keyboard.KEY_1: return SysKey.NUM_1; case Keyboard.KEY_2: return SysKey.NUM_2; case Keyboard.KEY_3: return SysKey.NUM_3; case Keyboard.KEY_4: return SysKey.NUM_4; case Keyboard.KEY_5: return SysKey.NUM_5; case Keyboard.KEY_6: return SysKey.NUM_6; case Keyboard.KEY_7: return SysKey.NUM_7; case Keyboard.KEY_8: return SysKey.NUM_8; case Keyboard.KEY_9: return SysKey.NUM_9; case Keyboard.KEY_0: return SysKey.NUM_0; case Keyboard.KEY_MINUS: return SysKey.MINUS; case Keyboard.KEY_EQUALS: return SysKey.EQUALS; case Keyboard.KEY_BACK: return SysKey.BACK; case Keyboard.KEY_TAB: return SysKey.TAB; case Keyboard.KEY_Q: return SysKey.Q; case Keyboard.KEY_W: return SysKey.W; case Keyboard.KEY_E: return SysKey.E; case Keyboard.KEY_R: return SysKey.R; case Keyboard.KEY_T: return SysKey.T; case Keyboard.KEY_Y: return SysKey.Y; case Keyboard.KEY_U: return SysKey.U; case Keyboard.KEY_I: return SysKey.I; case Keyboard.KEY_O: return SysKey.O; case Keyboard.KEY_P: return SysKey.P; case Keyboard.KEY_LBRACKET: return SysKey.LEFT_BRACKET; case Keyboard.KEY_RBRACKET: return SysKey.RIGHT_BRACKET; case Keyboard.KEY_RETURN: return SysKey.ENTER; case Keyboard.KEY_LCONTROL: return SysKey.CONTROL_LEFT; case Keyboard.KEY_RCONTROL: return SysKey.CONTROL_RIGHT; case Keyboard.KEY_A: return SysKey.A; case Keyboard.KEY_S: return SysKey.S; case Keyboard.KEY_D: return SysKey.D; case Keyboard.KEY_F: return SysKey.F; case Keyboard.KEY_G: return SysKey.G; case Keyboard.KEY_H: return SysKey.H; case Keyboard.KEY_J: return SysKey.J; case Keyboard.KEY_K: return SysKey.K; case Keyboard.KEY_L: return SysKey.L; case Keyboard.KEY_SEMICOLON: return SysKey.SEMICOLON; case Keyboard.KEY_APOSTROPHE: return SysKey.APOSTROPHE; case Keyboard.KEY_GRAVE: return SysKey.GRAVE; case Keyboard.KEY_LSHIFT: return SysKey.SHIFT_LEFT; case Keyboard.KEY_BACKSLASH: return SysKey.BACKSLASH; case Keyboard.KEY_Z: return SysKey.Z; case Keyboard.KEY_X: return SysKey.X; case Keyboard.KEY_C: return SysKey.C; case Keyboard.KEY_V: return SysKey.V; case Keyboard.KEY_B: return SysKey.B; case Keyboard.KEY_N: return SysKey.N; case Keyboard.KEY_M: return SysKey.M; case Keyboard.KEY_COMMA: return SysKey.COMMA; case Keyboard.KEY_PERIOD: return SysKey.PERIOD; case Keyboard.KEY_SLASH: return SysKey.SLASH; case Keyboard.KEY_RSHIFT: return SysKey.SHIFT_RIGHT; case Keyboard.KEY_LMENU: return SysKey.MENU; case Keyboard.KEY_SPACE: return SysKey.SPACE; case Keyboard.KEY_AT: return SysKey.AT; case Keyboard.KEY_HOME: return SysKey.HOME; case Keyboard.KEY_UP: return SysKey.UP; case Keyboard.KEY_PRIOR: return SysKey.PAGE_UP; case Keyboard.KEY_LEFT: return SysKey.LEFT; case Keyboard.KEY_RIGHT: return SysKey.RIGHT; case Keyboard.KEY_END: return SysKey.END; case Keyboard.KEY_DOWN: return SysKey.DOWN; case Keyboard.KEY_NEXT: return SysKey.PAGE_DOWN; case Keyboard.KEY_INSERT: return SysKey.INSERT; case Keyboard.KEY_DELETE: return SysKey.DEL; case Keyboard.KEY_CLEAR: return SysKey.CLEAR; case Keyboard.KEY_POWER: return SysKey.POWER; } return keyCode; } }