use of org.terasology.engine.input.BindableButton in project Terasology by MovingBlocks.
the class InputSystemTests method testKeyBinding.
@Test
public void testKeyBinding() {
Map<Integer, BindableButton> keyBinds = new HashMap<>();
// mock binding to the TestEventButton, this is done by the BindsManager over the annotations by default
keyBinds.put(KeyId.T, new BindableButtonImpl(new SimpleUri("engine-tests", "testEvent"), "theTestEvent", new TestEventButton()));
when(bindsManager.getKeyBinds()).thenReturn(keyBinds);
pressKey(Key.T);
inputSystem.update(1f);
verify(clientEntity).send(Mockito.any(TestEventButton.class));
}
use of org.terasology.engine.input.BindableButton in project Terasology by MovingBlocks.
the class BindsSubsystem method registerButtonBinds.
private void registerButtonBinds(ModuleEnvironment environment) {
Iterable<Class<?>> classes = environment.getTypesAnnotatedWith(RegisterBindButton.class);
for (Class<?> registerBindClass : classes) {
RegisterBindButton info = registerBindClass.getAnnotation(RegisterBindButton.class);
SimpleUri bindUri = new SimpleUri(environment.getModuleProviding(registerBindClass), info.id());
if (BindButtonEvent.class.isAssignableFrom(registerBindClass)) {
try {
BindableButton bindButton = registerBindButton(bindUri, info.description(), (BindButtonEvent) registerBindClass.newInstance());
bindButton.setMode(info.mode());
bindButton.setRepeating(info.repeating());
bindsConfiguration.getBinds(bindUri).stream().filter(input -> input != null).forEach(input -> linkBindButtonToInput(input, bindUri));
logger.debug("Registered button bind: {}", bindUri);
} catch (InstantiationException | IllegalAccessException e) {
logger.error("Failed to register button bind \"{}\"", e);
}
} else {
logger.error("Failed to register button bind \"{}\", does not extend BindButtonEvent", bindUri);
}
}
}
use of org.terasology.engine.input.BindableButton in project Terasology by MovingBlocks.
the class BindsSubsystem method registerAxisBinds.
private void registerAxisBinds(ModuleEnvironment environment) {
Iterable<Class<?>> classes = environment.getTypesAnnotatedWith(RegisterBindAxis.class);
for (Class<?> registerBindClass : classes) {
RegisterBindAxis info = registerBindClass.getAnnotation(RegisterBindAxis.class);
Name moduleId = environment.getModuleProviding(registerBindClass);
SimpleUri id = new SimpleUri(moduleId, info.id());
if (BindAxisEvent.class.isAssignableFrom(registerBindClass)) {
BindableButton positiveButton = getBindButton(new SimpleUri(info.positiveButton()));
BindableButton negativeButton = getBindButton(new SimpleUri(info.negativeButton()));
if (positiveButton == null) {
logger.warn("Failed to register axis \"{}\", missing positive button \"{}\"", id, info.positiveButton());
continue;
}
if (negativeButton == null) {
logger.warn("Failed to register axis \"{}\", missing negative button \"{}\"", id, info.negativeButton());
continue;
}
try {
BindableAxis bindAxis = registerBindAxis(id.toString(), (BindAxisEvent) registerBindClass.newInstance(), positiveButton, negativeButton);
bindAxis.setSendEventMode(info.eventMode());
logger.debug("Registered axis bind: {}", id);
} catch (InstantiationException | IllegalAccessException e) {
logger.error("Failed to register axis bind \"{}\"", id, e);
}
} else {
logger.error("Failed to register axis bind \"{}\", does not extend BindAxisEvent", id);
}
}
}
use of org.terasology.engine.input.BindableButton in project Terasology by MovingBlocks.
the class BindsSubsystem method linkBindButtonToKey.
@Override
public void linkBindButtonToKey(int key, SimpleUri bindId) {
BindableButton bindInfo = buttonLookup.get(bindId);
keyBinds.put(key, bindInfo);
}
use of org.terasology.engine.input.BindableButton in project Terasology by MovingBlocks.
the class BindsSubsystem method linkBindButtonToController.
private void linkBindButtonToController(ControllerInput button, SimpleUri bindId) {
BindableButton bindInfo = buttonLookup.get(bindId);
controllerBinds.put(button, bindInfo);
}
Aggregations