First commit
This commit is contained in:
commit
58c64ab472
62 changed files with 29291 additions and 0 deletions
245
src/mrdev023/opengl/Input.java
Normal file
245
src/mrdev023/opengl/Input.java
Normal file
|
@ -0,0 +1,245 @@
|
|||
package mrdev023.opengl;
|
||||
|
||||
import static org.lwjgl.glfw.GLFW.*;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.Map.*;
|
||||
|
||||
import org.lwjgl.glfw.*;
|
||||
|
||||
import mrdev023.math.*;
|
||||
import mrdev023.opengl.*;
|
||||
import mrdev023.rendering.*;
|
||||
|
||||
public class Input{
|
||||
|
||||
public static GLFWScrollCallback scroll;
|
||||
public static GLFWCursorPosCallback mousePos;
|
||||
|
||||
private static Vector2f mousePosition = new Vector2f();
|
||||
private static Vector2f dMouse = new Vector2f();
|
||||
private static Vector2f previousDMouse = new Vector2f();
|
||||
|
||||
public static final int NONE = 0,PRESSED = 1,RELEASED = 2,REPEATED = 3,UP = 4,DOWN = 5,
|
||||
NBRE_KEY = 0x15D,NBRE_BUTTON = 10,
|
||||
MOUSE_OFFSET = NBRE_KEY + 1,MOUSE_WHEEL_OFFSET = MOUSE_OFFSET + 1;
|
||||
|
||||
private static HashMap<Integer,Integer> state = new HashMap<Integer,Integer>();
|
||||
|
||||
private static double ywheel = 0;
|
||||
|
||||
public static void init(){
|
||||
glfwSetScrollCallback(Display.getWindow(), scroll = new GLFWScrollCallback() {
|
||||
public void invoke(long window, double xoffset, double yoffset) {
|
||||
scroll(window, xoffset, yoffset);
|
||||
}
|
||||
});
|
||||
glfwSetCursorPosCallback(Display.getWindow(), mousePos = new GLFWCursorPosCallback() {
|
||||
public void invoke(long window, double xpos, double ypos) {
|
||||
mousepos(window, xpos, ypos);
|
||||
}
|
||||
});
|
||||
for(int i = 0;i < NBRE_KEY;i++){
|
||||
state.put(i, NONE);
|
||||
}
|
||||
for(int i = 0;i < NBRE_BUTTON;i++){
|
||||
state.put(i + MOUSE_OFFSET, NONE);
|
||||
}
|
||||
state.put(MOUSE_WHEEL_OFFSET, NONE);
|
||||
}
|
||||
|
||||
public static void update(){
|
||||
for(Entry<Integer, Integer> set : state.entrySet()){
|
||||
int i = set.getKey();
|
||||
int st = set.getValue();
|
||||
if(i > -1 && i < NBRE_KEY){
|
||||
if(glfwGetKey(Display.getWindow(), i) == 0 && st == NONE)continue;
|
||||
if(glfwGetKey(Display.getWindow(), i) == 1 && st == NONE){
|
||||
state.replace(i, PRESSED);
|
||||
}else if(glfwGetKey(Display.getWindow(), i) == 1 && st == PRESSED){
|
||||
state.replace(i, REPEATED);
|
||||
}else if(glfwGetKey(Display.getWindow(), i) == 0 && (st == PRESSED || st == REPEATED)){
|
||||
state.replace(i, RELEASED);
|
||||
}else if(glfwGetKey(Display.getWindow(), i) == 0 && st == RELEASED){
|
||||
state.replace(i, NONE);
|
||||
}
|
||||
}else if(i >= MOUSE_OFFSET && i < MOUSE_OFFSET + NBRE_BUTTON){
|
||||
if(glfwGetMouseButton(Display.getWindow(), i - MOUSE_OFFSET) == 0 && st == NONE)continue;
|
||||
if(glfwGetMouseButton(Display.getWindow(), i - MOUSE_OFFSET) == 1 && st == NONE){
|
||||
state.replace(i, PRESSED);
|
||||
}else if(glfwGetMouseButton(Display.getWindow(), i - MOUSE_OFFSET) == 1 && st == PRESSED){
|
||||
state.replace(i, REPEATED);
|
||||
}else if(glfwGetMouseButton(Display.getWindow(), i - MOUSE_OFFSET) == 0 && (st == PRESSED || st == REPEATED)){
|
||||
state.replace(i, RELEASED);
|
||||
}else if(glfwGetMouseButton(Display.getWindow(), i - MOUSE_OFFSET) == 0 && st == RELEASED){
|
||||
state.replace(i, NONE);
|
||||
}
|
||||
}
|
||||
}
|
||||
int st = state.get(MOUSE_WHEEL_OFFSET);
|
||||
if(ywheel > 0 && (st == NONE || st == UP)){
|
||||
state.replace(MOUSE_WHEEL_OFFSET, UP);
|
||||
}else if(ywheel < 0 && (st == NONE || st == DOWN)){
|
||||
state.replace(MOUSE_WHEEL_OFFSET, DOWN);
|
||||
}else if(ywheel == 0 && (st == DOWN || st == UP)){
|
||||
state.replace(MOUSE_WHEEL_OFFSET, NONE);
|
||||
}
|
||||
ywheel = 0;
|
||||
if(dMouse.equals(previousDMouse)){
|
||||
dMouse = new Vector2f();
|
||||
}else{
|
||||
previousDMouse = dMouse;
|
||||
}
|
||||
}
|
||||
|
||||
public static void destroy(){
|
||||
mousePos.release();
|
||||
scroll.release();
|
||||
}
|
||||
|
||||
public static void scroll(long window, double xoffset, double yoffset) {
|
||||
ywheel = yoffset;
|
||||
}
|
||||
|
||||
public static void mousepos(long window, double xpos, double ypos) {
|
||||
dMouse.x = (float) (xpos - mousePosition.x);
|
||||
dMouse.y = (float) (ypos - mousePosition.y);
|
||||
mousePosition.x = (float) xpos;
|
||||
mousePosition.y = (float) ypos;
|
||||
}
|
||||
|
||||
public static boolean isButtonDown(int button){
|
||||
return state.get(button + MOUSE_OFFSET) == PRESSED;
|
||||
}
|
||||
|
||||
public static boolean isButtonUp(int button){
|
||||
return state.get(button + MOUSE_OFFSET) == RELEASED;
|
||||
}
|
||||
|
||||
public static boolean isButton(int button){
|
||||
return state.get(button + MOUSE_OFFSET) == PRESSED || state.get(button + MOUSE_OFFSET) == REPEATED;
|
||||
}
|
||||
|
||||
public static int isButtonState(int button){
|
||||
return state.get(button + MOUSE_OFFSET);
|
||||
}
|
||||
|
||||
public static boolean isKeyDown(int key){
|
||||
return state.get(key) == PRESSED;
|
||||
}
|
||||
|
||||
public static boolean isKeyUp(int key){
|
||||
return state.get(key) == RELEASED;
|
||||
}
|
||||
|
||||
public static boolean isKey(int key){
|
||||
return state.get(key) == PRESSED || state.get(key) == REPEATED;
|
||||
}
|
||||
|
||||
public static int isKeyState(int key){
|
||||
return state.get(key);
|
||||
}
|
||||
|
||||
public static int isMouseWheelState(){
|
||||
return state.get(MOUSE_WHEEL_OFFSET);
|
||||
}
|
||||
|
||||
public static boolean isMouseWheelUp(){
|
||||
return state.get(MOUSE_WHEEL_OFFSET) == UP;
|
||||
}
|
||||
|
||||
public static boolean isMouseWheelDown(){
|
||||
return state.get(MOUSE_WHEEL_OFFSET) == DOWN;
|
||||
}
|
||||
|
||||
public static GLFWScrollCallback getScroll() {
|
||||
return scroll;
|
||||
}
|
||||
|
||||
public static void setScroll(GLFWScrollCallback scroll) {
|
||||
Input.scroll = scroll;
|
||||
}
|
||||
|
||||
public static GLFWCursorPosCallback getMousePos() {
|
||||
return mousePos;
|
||||
}
|
||||
|
||||
public static void setMousePos(GLFWCursorPosCallback mousePos) {
|
||||
Input.mousePos = mousePos;
|
||||
}
|
||||
|
||||
public static Vector2f getMousePosition() {
|
||||
return mousePosition;
|
||||
}
|
||||
|
||||
public static void setMousePosition(Vector2f mousePosition) {
|
||||
Input.mousePosition = mousePosition;
|
||||
}
|
||||
|
||||
public static Vector2f getDMouse() {
|
||||
return dMouse;
|
||||
}
|
||||
|
||||
public static void setDMouse(Vector2f dMouse) {
|
||||
Input.dMouse = dMouse;
|
||||
}
|
||||
|
||||
public static HashMap<Integer, Integer> getState() {
|
||||
return state;
|
||||
}
|
||||
|
||||
public static void setState(HashMap<Integer, Integer> state) {
|
||||
Input.state = state;
|
||||
}
|
||||
|
||||
public static double getYwheel() {
|
||||
return ywheel;
|
||||
}
|
||||
|
||||
public static void setYwheel(double ywheel) {
|
||||
Input.ywheel = ywheel;
|
||||
}
|
||||
|
||||
public static int getNone() {
|
||||
return NONE;
|
||||
}
|
||||
|
||||
public static int getPressed() {
|
||||
return PRESSED;
|
||||
}
|
||||
|
||||
public static int getReleased() {
|
||||
return RELEASED;
|
||||
}
|
||||
|
||||
public static int getRepeated() {
|
||||
return REPEATED;
|
||||
}
|
||||
|
||||
public static int getUp() {
|
||||
return UP;
|
||||
}
|
||||
|
||||
public static int getDown() {
|
||||
return DOWN;
|
||||
}
|
||||
|
||||
public static int getNbreKey() {
|
||||
return NBRE_KEY;
|
||||
}
|
||||
|
||||
public static int getNbreButton() {
|
||||
return NBRE_BUTTON;
|
||||
}
|
||||
|
||||
public static int getMouseOffset() {
|
||||
return MOUSE_OFFSET;
|
||||
}
|
||||
|
||||
public static int getMouseWheelOffset() {
|
||||
return MOUSE_WHEEL_OFFSET;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
Reference in a new issue