You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.3 KiB
71 lines
1.3 KiB
10 years ago
|
package mightypork.gamecore.input;
|
||
10 years ago
|
|
||
10 years ago
|
|
||
10 years ago
|
import java.util.HashSet;
|
||
|
import java.util.Iterator;
|
||
|
import java.util.Set;
|
||
|
|
||
10 years ago
|
import mightypork.gamecore.control.bus.events.KeyboardEvent;
|
||
10 years ago
|
import mightypork.utils.logging.Log;
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Key binding pool
|
||
|
*
|
||
|
* @author MightyPork
|
||
|
*/
|
||
|
public class KeyBindingPool implements KeyBinder, KeyboardEvent.Listener {
|
||
10 years ago
|
|
||
10 years ago
|
private final Set<KeyBinding> bindings = new HashSet<KeyBinding>();
|
||
10 years ago
|
|
||
|
|
||
10 years ago
|
/**
|
||
|
* Bind handler to a keystroke, replace current handler if any
|
||
|
*
|
||
10 years ago
|
* @param stroke trigger keystroke
|
||
|
* @param task handler
|
||
10 years ago
|
*/
|
||
|
@Override
|
||
|
public void bindKeyStroke(KeyStroke stroke, Runnable task)
|
||
|
{
|
||
10 years ago
|
for (final KeyBinding kb : bindings) {
|
||
10 years ago
|
if (kb.matches(stroke)) {
|
||
10 years ago
|
Log.w("Duplicate KeyBinding (" + stroke + "), using newest handler.");
|
||
10 years ago
|
kb.setHandler(task);
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
10 years ago
|
|
||
10 years ago
|
bindings.add(new KeyBinding(stroke, task));
|
||
|
}
|
||
10 years ago
|
|
||
|
|
||
10 years ago
|
/**
|
||
|
* Remove handler from keystroke (id any)
|
||
10 years ago
|
*
|
||
10 years ago
|
* @param stroke stroke
|
||
10 years ago
|
*/
|
||
|
@Override
|
||
|
public void unbindKeyStroke(KeyStroke stroke)
|
||
|
{
|
||
10 years ago
|
final Iterator<KeyBinding> iter = bindings.iterator();
|
||
10 years ago
|
|
||
10 years ago
|
while (iter.hasNext()) {
|
||
10 years ago
|
final KeyBinding kb = iter.next();
|
||
10 years ago
|
if (kb.matches(stroke)) {
|
||
|
iter.remove();
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
10 years ago
|
|
||
|
|
||
10 years ago
|
@Override
|
||
|
public void receive(KeyboardEvent event)
|
||
|
{
|
||
10 years ago
|
for (final KeyBinding kb : bindings) {
|
||
10 years ago
|
kb.receive(event);
|
||
10 years ago
|
}
|
||
|
}
|
||
|
}
|