package tk.amberide.engine.input;
import tk.amberide.engine.input.awt.AWTMouse;
import java.awt.Component;
import org.lwjgl.LWJGLException;
import org.lwjgl.input.Mouse;
/**
*
* @author Tudor
*/
public class AbstractMouse {
public static final int NATIVE = 0;
public static final int AWT = 1;
private static int type = -1;
public static void create(int type) throws LWJGLException {
switch (type) {
case NATIVE:
Mouse.create();
break;
case AWT:
AWTMouse.create();
break;
}
AbstractMouse.type = type;
}
public static void destroy() {
switch (type) {
case NATIVE:
Mouse.destroy();
break;
case AWT:
AWTMouse.destroy();
break;
}
type = -1;
}
protected static void ensureCreated() {
if (!isCreated()) {
throw new IllegalStateException("AbstractMouse is not created");
}
}
public static boolean isCreated() {
return type != -1;
}
public static boolean isButtonDown(int button) {
ensureCreated();
switch (type) {
case NATIVE:
return Mouse.isButtonDown(button);
case AWT:
return AWTMouse.isButtonDown(button);
}
return false;
}
public static boolean next() {
ensureCreated();
switch (type) {
case NATIVE:
return Mouse.next();
case AWT:
return AWTMouse.next();
}
return false;
}
public static int getEventX() {
ensureCreated();
switch (type) {
case NATIVE:
return Mouse.getEventX();
case AWT:
return AWTMouse.getEventX();
}
return -1;
}
public static int getEventY() {
ensureCreated();
switch (type) {
case NATIVE:
return Mouse.getEventY();
case AWT:
return AWTMouse.getEventY();
}
return -1;
}
public static int getEventButton() {
ensureCreated();
switch (type) {
case NATIVE:
return Mouse.getEventButton();
case AWT:
return AWTMouse.getEventButton();
}
return -1;
}
public static int getDWheel() {
ensureCreated();
switch (type) {
case NATIVE:
return Mouse.getDWheel();
case AWT:
return AWTMouse.getDWheel();
}
return 0;
}
public static boolean getEventButtonState() {
ensureCreated();
switch (type) {
case NATIVE:
return Mouse.getEventButtonState();
case AWT:
return AWTMouse.getEventButtonState();
}
return false;
}
public static int getX() {
ensureCreated();
switch (type) {
case NATIVE:
return Mouse.getX();
case AWT:
return AWTMouse.getX();
}
return -1;
}
public static int getY() {
ensureCreated();
switch (type) {
case NATIVE:
return Mouse.getY();
case AWT:
return AWTMouse.getY();
}
return -1;
}
public static int getDX() {
ensureCreated();
switch (type) {
case NATIVE:
return Mouse.getDX();
case AWT:
return AWTMouse.getDX();
}
return -1;
}
public static int getDY() {
ensureCreated();
switch (type) {
case NATIVE:
return Mouse.getDY();
case AWT:
return AWTMouse.getDY();
}
return -1;
}
public static int getY(Component relative) {
ensureCreated();
switch (type) {
case NATIVE:
return Mouse.getY() - relative.getLocationOnScreen().y;
case AWT:
return AWTMouse.getY(relative);
}
return -1;
}
public static int getX(Component relative) {
ensureCreated();
switch (type) {
case NATIVE:
return Mouse.getX() - relative.getLocationOnScreen().x;
case AWT:
return AWTMouse.getX(relative);
}
return -1;
}
public static void poll() {
ensureCreated();
switch (type) {
case NATIVE:
Mouse.poll();
break;
case AWT:
AWTMouse.poll();
break;
}
}
public static int getButtonCount() {
ensureCreated();
switch (type) {
case NATIVE:
return Mouse.getButtonCount();
case AWT:
return AWTMouse.getButtonCount();
}
return -1;
}
public static void setGrabbed(boolean grab) {
ensureCreated();
switch (type) {
case NATIVE:
Mouse.setGrabbed(grab);
break;
case AWT:
AWTMouse.setGrabbed(grab);
break;
}
}
public static boolean isGrabbed() {
ensureCreated();
switch (type) {
case NATIVE:
return Mouse.isGrabbed();
case AWT:
return AWTMouse.isGrabbed();
}
return false;
}
}