package org.jrenner.fps.input;
import com.badlogic.gdx.*;
import com.badlogic.gdx.Input;
import org.jrenner.fps.Main;
import static com.badlogic.gdx.Input.Buttons;
import static com.badlogic.gdx.Input.Keys.*;
/** Can bind two keyboards keys and one mouse button to an action */
public enum InputBind {
MoveForward,
MoveBack,
MoveRight,
MoveLeft,
MoveUp,
MoveDown,
YawLeft,
YawRight,
PitchUp,
PitchDown,
Shoot,
Jump
;
private static final int NO_KEY = -1;
public int keycode0 = NO_KEY;
public int keycode1 = NO_KEY;
public int mouseButton = NO_KEY;
public boolean isKeyMatch(int code) {
if (keycode0 != NO_KEY && keycode0 == code) {
return true;
} else if (keycode1 != NO_KEY && keycode1 == code) {
return true;
}
return false;
}
public boolean isMouseMatch(int button) {
if (mouseButton != NO_KEY) {
return mouseButton == button;
}
return false;
}
public boolean isPressed() {
if (keycode0 != NO_KEY && Main.inst.input.isPressed(keycode0)) {
return true;
} else if (keycode1 != NO_KEY && Main.inst.input.isPressed(keycode1)) {
return true;
} else if (mouseButton != NO_KEY && Gdx.input.isButtonPressed(mouseButton)) {
return true;
}
return false;
}
public static void setDefaultBindings() {
setBindings(MoveForward, W);
setBindings(MoveBack, S);
setBindings(MoveLeft, A);
setBindings(MoveRight, D);
setBindings(MoveUp, PAGE_UP);
setBindings(MoveDown, PAGE_DOWN);
setBindings(YawLeft, LEFT);
setBindings(YawRight, RIGHT);
setBindings(PitchUp, UP);
setBindings(PitchDown, DOWN);
setBindings(Shoot, NO_KEY, NO_KEY, Buttons.LEFT);
setBindings(Jump, SPACE, NO_KEY, Buttons.RIGHT);
}
private static void setBindings(InputBind ib, int key1) {
setBindings(ib, key1, NO_KEY, NO_KEY);
}
private static void setBindings(InputBind ib, int key1, int key2) {
setBindings(ib, key1, key2, NO_KEY);
}
private static void setBindings(InputBind ib, int key1, int key2, int mouse) {
ib.keycode0 = key1;
ib.keycode1 = key2;
ib.mouseButton = mouse;
}
public static InputBind matchByKey(int key0) {
for (InputBind ib : values()) {
if (ib.isKeyMatch(key0)) {
return ib;
}
}
return null;
}
public static InputBind matchByMouse(int mouse) {
for (InputBind ib : values()) {
if (ib.isMouseMatch(mouse)) {
return ib;
}
}
return null;
}
}