Mekanism-tilera-Edition/src/main/java/mekanism/client/MekKeyHandler.java

101 lines
2.4 KiB
Java
Raw Normal View History

package mekanism.client;
import net.minecraft.client.settings.KeyBinding;
import cpw.mods.fml.common.gameevent.TickEvent.Type;
public abstract class MekKeyHandler
{
public KeyBinding[] keyBindings;
public boolean[] keyDown;
public boolean[] repeatings;
public boolean isDummy;
/**
* Pass an array of keybindings and a repeat flag for each one
*
* @param bindings
* @param rep
*/
2014-06-02 20:04:10 +02:00
public MekKeyHandler(KeyBinding[] bindings, boolean[] rep)
{
assert keyBindings.length == repeatings.length : "You need to pass two arrays of identical length";
2014-06-02 20:04:10 +02:00
keyBindings = bindings;
repeatings = rep;
keyDown = new boolean[keyBindings.length];
}
/**
* Register the keys into the system. You will do your own keyboard
* management elsewhere. No events will fire if you use this method
*
* @param bindings
*/
2014-06-02 20:04:10 +02:00
public MekKeyHandler(KeyBinding[] bindings)
{
2014-06-02 20:04:10 +02:00
keyBindings = bindings;
isDummy = true;
}
public static boolean getIsKeyPressed(KeyBinding keyBinding)
{
int keyCode = keyBinding.getKeyCode();
return keyCode < 0 ? Mouse.isButtonDown(keyCode + 100) : Keyboard.isKeyDown(keyCode);
}
public KeyBinding[] getKeyBindings ()
{
2014-06-02 20:04:10 +02:00
return keyBindings;
}
2014-05-29 20:01:43 +02:00
public void keyTick(Type type, boolean tickEnd)
{
2014-06-02 20:04:10 +02:00
for(int i = 0; i < keyBindings.length; i++)
{
KeyBinding keyBinding = keyBindings[i];
boolean state = keyBinding.getIsKeyPressed();
2014-06-02 20:04:10 +02:00
if(state != keyDown[i] || (state && repeatings[i]))
{
2014-06-02 20:04:10 +02:00
if(state)
{
keyDown(type, keyBinding, tickEnd, state == keyDown[i]);
}
2014-06-02 20:04:10 +02:00
else {
keyUp(type, keyBinding, tickEnd);
}
2014-06-02 20:04:10 +02:00
if(tickEnd)
{
keyDown[i] = state;
}
}
}
}
/**
* Called when the key is first in the down position. Will be called
* subsequently with isRepeat set to true
*
* @see #keyUp(Type, KeyBinding, boolean)
*
* @param types
* the type(s) of tick that fired when this key was first down
* @param tickEnd
* was it an end or start tick which fired the key
* @param isRepeat
* is it a repeat key event
*/
2014-06-02 20:04:10 +02:00
public abstract void keyDown(Type types, KeyBinding kb, boolean tickEnd, boolean isRepeat);
/**
* Fired once when the key changes state from down to up
*
* @see #keyDown(Type, KeyBinding, boolean, boolean)
*
* @param types
* the type(s) of tick that fired when this key was first down
* @param tickEnd
* was it an end or start tick which fired the key
*/
2014-06-02 20:04:10 +02:00
public abstract void keyUp(Type types, KeyBinding kb, boolean tickEnd);
}