Search in sources :

Example 6 with Input

use of org.terasology.input.Input 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) InputCategory(org.terasology.input.InputCategory) ModuleManagerFactory(org.terasology.testUtil.ModuleManagerFactory) DefaultBinding(org.terasology.input.DefaultBinding) RegisterBindButton(org.terasology.input.RegisterBindButton) DefaultBindings(org.terasology.input.DefaultBindings) Map(java.util.Map) Input(org.terasology.input.Input) HashMap(java.util.HashMap) Multimap(com.google.common.collect.Multimap) ModuleManager(org.terasology.engine.module.ModuleManager) DefaultBinding(org.terasology.input.DefaultBinding) HashMap(java.util.HashMap) RegisterBindButton(org.terasology.input.RegisterBindButton) ModuleManager(org.terasology.engine.module.ModuleManager) Input(org.terasology.input.Input) InputCategory(org.terasology.input.InputCategory) DefaultBindings(org.terasology.input.DefaultBindings)

Example 7 with Input

use of org.terasology.input.Input in project Terasology by MovingBlocks.

the class ChangeBindingPopup method setBindingData.

public void setBindingData(SimpleUri uri, RegisterBindButton bind, int index) {
    find("title", UILabel.class).setText(translationSystem.translate(bind.description()));
    BindsConfig bindConfig = bindsManager.getBindsConfig();
    bindButton.bindInput(new InputConfigBinding(bindConfig, uri, index));
    List<Input> defaults = defaultBinds.getBinds(uri);
    find("default-binding", UILabel.class).setText(defaults.size() > index ? defaults.get(index).getDisplayName() : "<" + translationSystem.translate("${engine:menu#none}" + ">"));
    find("default", UIButton.class).subscribe(e -> bindButton.setNewInput(defaults.size() > index ? defaults.get(index) : null));
}
Also used : UILabel(org.terasology.rendering.nui.widgets.UILabel) Input(org.terasology.input.Input) UIButton(org.terasology.rendering.nui.widgets.UIButton) BindsConfig(org.terasology.config.BindsConfig)

Example 8 with Input

use of org.terasology.input.Input in project Terasology by MovingBlocks.

the class InputSettingsScreen method addInputBindRow.

private void addInputBindRow(SimpleUri uri, RegisterBindButton bind, ColumnLayout layout) {
    BindsConfig bindConfig = bindsManager.getBindsConfig();
    List<Input> binds = bindConfig.getBinds(uri);
    UIButton primaryInputBind = new UIButton();
    primaryInputBind.bindText(new BindingText(binds, 0));
    primaryInputBind.subscribe(event -> {
        ChangeBindingPopup popup = getManager().pushScreen(ChangeBindingPopup.ASSET_URI, ChangeBindingPopup.class);
        popup.setBindingData(uri, bind, 0);
    });
    UIButton secondaryInputBind = new UIButton();
    secondaryInputBind.bindText(new BindingText(binds, 1));
    secondaryInputBind.subscribe(event -> {
        ChangeBindingPopup popup = getManager().pushScreen(ChangeBindingPopup.ASSET_URI, ChangeBindingPopup.class);
        popup.setBindingData(uri, bind, 1);
    });
    layout.addWidget(new RowLayout(new UILabel(translationSystem.translate(bind.description())), primaryInputBind, secondaryInputBind).setColumnRatios(0.4f).setHorizontalSpacing(horizontalSpacing));
}
Also used : UILabel(org.terasology.rendering.nui.widgets.UILabel) Input(org.terasology.input.Input) UIButton(org.terasology.rendering.nui.widgets.UIButton) RowLayout(org.terasology.rendering.nui.layouts.RowLayout) BindsConfig(org.terasology.config.BindsConfig)

Example 9 with Input

use of org.terasology.input.Input 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.input.DefaultBinding) Annotation(java.lang.annotation.Annotation)

Example 10 with Input

use of org.terasology.input.Input 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);
        }
    }
}
Also used : BindsConfiguration(org.terasology.config.facade.BindsConfiguration) EngineSubsystem(org.terasology.engine.subsystem.EngineSubsystem) DependencyResolver(org.terasology.module.DependencyResolver) ControllerInput(org.terasology.input.ControllerInput) LoggerFactory(org.slf4j.LoggerFactory) Config(org.terasology.config.Config) RegisterBindAxis(org.terasology.input.RegisterBindAxis) FromModule(org.terasology.module.predicates.FromModule) Collections.unmodifiableCollection(java.util.Collections.unmodifiableCollection) Lists(com.google.common.collect.Lists) ButtonEvent(org.terasology.input.events.ButtonEvent) ResolutionResult(org.terasology.module.ResolutionResult) Map(java.util.Map) Input(org.terasology.input.Input) BindableRealAxis(org.terasology.input.internal.BindableRealAxis) SimpleUri(org.terasology.engine.SimpleUri) MouseInput(org.terasology.input.MouseInput) BindAxisEvent(org.terasology.input.BindAxisEvent) BindableButton(org.terasology.input.BindableButton) AxisEvent(org.terasology.input.events.AxisEvent) AbstractBindableAxis(org.terasology.input.internal.AbstractBindableAxis) Name(org.terasology.naming.Name) ModuleManager(org.terasology.engine.module.ModuleManager) InputType(org.terasology.input.InputType) Context(org.terasology.context.Context) Logger(org.slf4j.Logger) BindableAxis(org.terasology.input.BindableAxis) Collection(java.util.Collection) ModuleEnvironment(org.terasology.module.ModuleEnvironment) BindableAxisImpl(org.terasology.input.internal.BindableAxisImpl) Maps(com.google.common.collect.Maps) List(java.util.List) BindsConfig(org.terasology.config.BindsConfig) DefaultBinding(org.terasology.input.DefaultBinding) RegisterBindButton(org.terasology.input.RegisterBindButton) BindButtonEvent(org.terasology.input.BindButtonEvent) Annotation(java.lang.annotation.Annotation) RegisterRealBindAxis(org.terasology.input.RegisterRealBindAxis) BindableButtonImpl(org.terasology.input.internal.BindableButtonImpl) BindableButton(org.terasology.input.BindableButton) RegisterBindButton(org.terasology.input.RegisterBindButton) SimpleUri(org.terasology.engine.SimpleUri)

Aggregations

Input (org.terasology.input.Input)14 SimpleUri (org.terasology.engine.SimpleUri)6 BindsConfig (org.terasology.config.BindsConfig)3 ControllerInput (org.terasology.input.ControllerInput)3 DefaultBinding (org.terasology.input.DefaultBinding)3 MouseInput (org.terasology.input.MouseInput)3 Annotation (java.lang.annotation.Annotation)2 Map (java.util.Map)2 ModuleManager (org.terasology.engine.module.ModuleManager)2 BindAxisEvent (org.terasology.input.BindAxisEvent)2 BindableAxis (org.terasology.input.BindableAxis)2 ButtonState (org.terasology.input.ButtonState)2 RegisterBindButton (org.terasology.input.RegisterBindButton)2 RegisterRealBindAxis (org.terasology.input.RegisterRealBindAxis)2 AbstractBindableAxis (org.terasology.input.internal.AbstractBindableAxis)2 Name (org.terasology.naming.Name)2 UIButton (org.terasology.rendering.nui.widgets.UIButton)2 UILabel (org.terasology.rendering.nui.widgets.UILabel)2 ArrayListMultimap (com.google.common.collect.ArrayListMultimap)1 Lists (com.google.common.collect.Lists)1