Search in sources :

Example 1 with DefaultBinding

use of org.terasology.engine.input.DefaultBinding in project Terasology by MovingBlocks.

the class BindingScraper method main.

/**
 * @param args (ignored)
 * @throws Exception if the module environment cannot be loaded
 */
public static void main(String[] args) throws Exception {
    ModuleManager moduleManager = ModuleManagerFactory.create();
    // Holds normal input mappings where there is only one key
    Multimap<InputCategory, String> categories = ArrayListMultimap.create();
    Multimap<String, Input> keys = ArrayListMultimap.create();
    Map<String, String> desc = new HashMap<>();
    for (Class<?> holdingType : moduleManager.getEnvironment().getTypesAnnotatedWith(InputCategory.class)) {
        InputCategory inputCategory = holdingType.getAnnotation(InputCategory.class);
        categories.put(inputCategory, null);
        for (String button : inputCategory.ordering()) {
            categories.put(inputCategory, button);
        }
    }
    for (Class<?> buttonEvent : moduleManager.getEnvironment().getTypesAnnotatedWith(RegisterBindButton.class)) {
        DefaultBinding defBinding = buttonEvent.getAnnotation(DefaultBinding.class);
        RegisterBindButton info = buttonEvent.getAnnotation(RegisterBindButton.class);
        String cat = info.category();
        String id = "engine:" + info.id();
        desc.put(id, info.description());
        if (cat.isEmpty()) {
            InputCategory inputCategory = findEntry(categories, id);
            if (inputCategory == null) {
                System.out.println("Invalid category for: " + info.id());
            }
        } else {
            InputCategory inputCategory = findCategory(categories, cat);
            if (inputCategory != null) {
                categories.put(inputCategory, id);
            } else {
                System.out.println("Invalid category for: " + info.id());
            }
        }
        if (defBinding != null) {
            // This handles bindings with just one key
            Input input = defBinding.type().getInput(defBinding.id());
            keys.put(id, input);
        } else {
            // See if there is a multi-mapping for this button
            DefaultBindings multiBinding = buttonEvent.getAnnotation(DefaultBindings.class);
            // Annotation math magic. We're expecting a DefaultBindings containing one DefaultBinding pair
            if (multiBinding != null && multiBinding.value().length == 2) {
                DefaultBinding[] bindings = multiBinding.value();
                Input primary = bindings[0].type().getInput(bindings[0].id());
                Input secondary = bindings[1].type().getInput(bindings[1].id());
                keys.put(id, primary);
                keys.put(id, secondary);
            }
        }
    }
    for (InputCategory row : categories.keySet()) {
        System.out.println("# " + row.displayName());
        categories.get(row).stream().filter(entry -> entry != null).forEach(entry -> System.out.println(desc.get(entry) + ": " + keys.get(entry)));
    }
}
Also used : ArrayListMultimap(com.google.common.collect.ArrayListMultimap) RegisterBindButton(org.terasology.engine.input.RegisterBindButton) DefaultBindings(org.terasology.engine.input.DefaultBindings) InputCategory(org.terasology.input.InputCategory) ModuleManager(org.terasology.engine.core.module.ModuleManager) DefaultBinding(org.terasology.engine.input.DefaultBinding) Map(java.util.Map) Input(org.terasology.input.Input) HashMap(java.util.HashMap) ModuleManagerFactory(org.terasology.engine.testUtil.ModuleManagerFactory) Multimap(com.google.common.collect.Multimap) DefaultBinding(org.terasology.engine.input.DefaultBinding) HashMap(java.util.HashMap) RegisterBindButton(org.terasology.engine.input.RegisterBindButton) ModuleManager(org.terasology.engine.core.module.ModuleManager) Input(org.terasology.input.Input) InputCategory(org.terasology.input.InputCategory) DefaultBindings(org.terasology.engine.input.DefaultBindings)

Example 2 with DefaultBinding

use of org.terasology.engine.input.DefaultBinding in project Terasology by MovingBlocks.

the class BindsSubsystem method fetchDefaultBindings.

private List<Input> fetchDefaultBindings(Class<?> event, BindsConfiguration config) {
    List<Input> defaultInputs = Lists.newArrayList();
    Collection<Input> boundInputs = config.getBoundInputs();
    for (Annotation annotation : event.getAnnotationsByType(DefaultBinding.class)) {
        DefaultBinding defaultBinding = (DefaultBinding) annotation;
        Input defaultInput = defaultBinding.type().getInput(defaultBinding.id());
        if (!boundInputs.contains(defaultInput)) {
            defaultInputs.add(defaultInput);
        } else {
            logger.warn("Input {} is already registered, can not use it as default for event {}", defaultInput, event);
        }
    }
    return defaultInputs;
}
Also used : ControllerInput(org.terasology.input.ControllerInput) Input(org.terasology.input.Input) MouseInput(org.terasology.input.MouseInput) DefaultBinding(org.terasology.engine.input.DefaultBinding) Annotation(java.lang.annotation.Annotation)

Aggregations

DefaultBinding (org.terasology.engine.input.DefaultBinding)2 Input (org.terasology.input.Input)2 ArrayListMultimap (com.google.common.collect.ArrayListMultimap)1 Multimap (com.google.common.collect.Multimap)1 Annotation (java.lang.annotation.Annotation)1 HashMap (java.util.HashMap)1 Map (java.util.Map)1 ModuleManager (org.terasology.engine.core.module.ModuleManager)1 DefaultBindings (org.terasology.engine.input.DefaultBindings)1 RegisterBindButton (org.terasology.engine.input.RegisterBindButton)1 ModuleManagerFactory (org.terasology.engine.testUtil.ModuleManagerFactory)1 ControllerInput (org.terasology.input.ControllerInput)1 InputCategory (org.terasology.input.InputCategory)1 MouseInput (org.terasology.input.MouseInput)1