171 lines
4.5 KiB
Java
171 lines
4.5 KiB
Java
package speiger.src.coreengine.rendering.input.bindings;
|
|
|
|
import java.util.List;
|
|
import java.util.Objects;
|
|
import java.util.function.Consumer;
|
|
|
|
import speiger.src.collections.objects.lists.ObjectArrayList;
|
|
import speiger.src.coreengine.rendering.input.bindings.utils.BindingRegistry;
|
|
import speiger.src.coreengine.rendering.input.bindings.utils.BindingType;
|
|
import speiger.src.coreengine.rendering.input.bindings.utils.ModType;
|
|
|
|
public class InputBinding
|
|
{
|
|
public static final BindingRegistry BINDINGS = new BindingRegistry();
|
|
// public static final InputBinding SCREEN_SHOT = new InputBinding("misc", "Screenshot", GLFW.GLFW_KEY_F12, ModType.NONE);
|
|
// public static final InputBinding GIF_RECORDING = new InputBinding("misc", "GifRecording", GLFW.GLFW_KEY_F12, ModType.SHIFT);
|
|
// public static final InputBinding RELOAD_RENDERING = new InputBinding("misc", "Reload Rendering", GLFW.GLFW_KEY_F8);
|
|
// public static final InputBinding TOGGLE_UI = new InputBinding("UI", "ToggleUI", GLFW.GLFW_KEY_F11);
|
|
// public static final InputBinding TOGGLE_DEBUG = new InputBinding("UI", "ToggleDebug", GLFW.GLFW_KEY_F10, ModType.NONE);
|
|
// public static final InputBinding TOGGLE_RELOAD = new InputBinding("UI", "ToggleUIReload", GLFW.GLFW_KEY_F10, ModType.SHIFT);
|
|
// public static final InputBinding LAST_UI = new InputBinding("UI", "OpenLastUI", GLFW.GLFW_KEY_F9);
|
|
public static final InputBinding MOUSE_ROTATION = new InputBinding("Camera", "Mouse Rotation", 2, BindingType.MOUSE, ModType.IGNORE);
|
|
public static final InputBinding MOUSE_MOVEMENT = new InputBinding("Camera", "Mouse Movement", 1, BindingType.MOUSE, ModType.IGNORE);
|
|
// public static final InputBinding TOGGLE_GRID = new InputBinding("misc", "Toggle Terrain Grid", GLFW.GLFW_KEY_F2, ModType.NONE);
|
|
// public static final InputBinding TOGGLE_LOG_RAYCAST = new InputBinding("misc", "Toggle Log Raycast", GLFW.GLFW_KEY_SCROLL_LOCK);
|
|
// public static final InputBinding TOGGLE_FRUSTUM = new InputBinding("debug", "Toggle Frustum", GLFW.GLFW_KEY_PAUSE);
|
|
|
|
String category;
|
|
String bindingName;
|
|
BindingType binding;
|
|
int mod;
|
|
int currentKey;
|
|
|
|
BindingType defaultBinding;
|
|
int defaultMod;
|
|
int defaultKey;
|
|
|
|
boolean pressed;
|
|
int timePressed;
|
|
List<Consumer<InputBinding>> listeners = new ObjectArrayList<>();
|
|
|
|
public InputBinding(String category, String name, int key)
|
|
{
|
|
this(category, name, key, BindingType.KEYBOARD, ModType.IGNORE);
|
|
}
|
|
|
|
public InputBinding(String category, String name, int key, BindingType type)
|
|
{
|
|
this(category, name, key, type, ModType.IGNORE);
|
|
}
|
|
|
|
public InputBinding(String category, String name, int key, int mod)
|
|
{
|
|
this(category, name, key, BindingType.KEYBOARD, mod);
|
|
}
|
|
|
|
public InputBinding(String theCategory, String name, int key, BindingType type, int modType)
|
|
{
|
|
category = theCategory;
|
|
bindingName = name;
|
|
defaultKey = key;
|
|
currentKey = key;
|
|
defaultBinding = type;
|
|
binding = type;
|
|
defaultMod = modType;
|
|
mod = modType;
|
|
BINDINGS.registerBinding(this);
|
|
}
|
|
|
|
public String getBindingName()
|
|
{
|
|
return bindingName;
|
|
}
|
|
|
|
public int getKey()
|
|
{
|
|
return currentKey;
|
|
}
|
|
|
|
public BindingType getInputType()
|
|
{
|
|
return binding;
|
|
}
|
|
|
|
public int getMod()
|
|
{
|
|
return mod;
|
|
}
|
|
|
|
public void setKey(int id)
|
|
{
|
|
BINDINGS.removeBinding(this);
|
|
currentKey = id;
|
|
BINDINGS.registerBinding(this);
|
|
}
|
|
|
|
public void setMod(int type)
|
|
{
|
|
mod = type;
|
|
}
|
|
|
|
public void setBinding(BindingType type)
|
|
{
|
|
BINDINGS.removeBinding(this);
|
|
binding = type;
|
|
BINDINGS.registerBinding(this);
|
|
}
|
|
|
|
public void addListener(Consumer<InputBinding> listener)
|
|
{
|
|
listeners.add(listener);
|
|
}
|
|
|
|
public void reset()
|
|
{
|
|
BINDINGS.removeBinding(this);
|
|
currentKey = defaultKey;
|
|
mod = defaultMod;
|
|
binding = defaultBinding;
|
|
BINDINGS.registerBinding(this);
|
|
}
|
|
|
|
public void setPressed(boolean newPressed)
|
|
{
|
|
pressed = newPressed && ModType.isActive(mod);
|
|
timePressed = pressed ? timePressed + 1 : 0;
|
|
if(pressed && listeners.size() > 0)
|
|
{
|
|
for(int i = 0,m=listeners.size();i<m;i++)
|
|
{
|
|
listeners.get(i).accept(this);
|
|
}
|
|
}
|
|
}
|
|
|
|
public boolean isPressed()
|
|
{
|
|
return pressed;
|
|
}
|
|
|
|
public boolean isStillPressed()
|
|
{
|
|
if(timePressed == 0) return false;
|
|
timePressed--;
|
|
return true;
|
|
}
|
|
|
|
public void unPressBinding()
|
|
{
|
|
timePressed = 0;
|
|
pressed = false;
|
|
}
|
|
|
|
@Override
|
|
public int hashCode()
|
|
{
|
|
return Objects.hash(bindingName, defaultKey);
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object obj)
|
|
{
|
|
if(obj instanceof InputBinding)
|
|
{
|
|
InputBinding bind = (InputBinding)obj;
|
|
return bind.bindingName.equals(bindingName) && bind.defaultKey == defaultKey;
|
|
}
|
|
return false;
|
|
}
|
|
}
|