@Override public BindsConfig getDefaultBindsConfig() { BindsConfig copy = new BindsConfig(); //SimpleUri and Input are immutable, no need for a deep copy copy.setBinds(defaultBindsConfig.getBindsConfig()); return copy; }
@Override public List<Input> getBinds(SimpleUri uri) { return bindsConfig.getBinds(uri); }
@Override public Collection<Input> getBoundInputs() { return unmodifiableCollection(bindsConfig.getBoundInputs()); }
@Override public void set(Input value) { List<Input> binds = Lists.newArrayList(config.getBinds(bindUri)); if (value == null) { if (position < binds.size()) { binds.set(position, null); } } else { while (binds.size() <= position) { binds.add(null); } binds.set(position, value); } config.setBinds(bindUri, binds); }
@Override public void updateConfigWithDefaultBinds() { //default bindings are overridden defaultBindsConfig = new BindsConfigAdapter(new BindsConfig()); updateDefaultBinds(context, defaultBindsConfig); //actual bindings may be actualized updateDefaultBinds(context, bindsConfiguration); }
@Override public void setBinds(BindsConfig other) { bindsConfig.setBinds(other); }
@Override public boolean isBound(Input newInput) { return bindsConfig.isBound(newInput); }
@Override public boolean hasBinds(SimpleUri uri) { return bindsConfig.hasBinds(uri); }
@Override public BindsConfig deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { BindsConfig result = new BindsConfig(); JsonObject inputObj = json.getAsJsonObject(); for (Map.Entry<String, JsonElement> entry : inputObj.entrySet()) { SetMultimap<String, Input> map = context.deserialize(entry.getValue(), SetMultimap.class); for (String id : map.keySet()) { SimpleUri uri = new SimpleUri(new Name(entry.getKey()), id); result.uriBoundInputs.putAll(uri, map.get(id)); } } return result; }
@Override public void setBinds(SimpleUri bindUri, Input... inputs) { bindsConfig.setBinds(bindUri, inputs); }
@Override public boolean isBound(Input newInput) { return config.getBinds().isBound(newInput); }
@Override public boolean hasBinds(SimpleUri uri) { return config.getBinds().hasBinds(uri); }
@Override public List<Input> getBinds(SimpleUri uri) { return config.getBinds().getBinds(uri); }
@Before public void setUp() { bindsSubsystem = new BindsSubsystem(); bindsConfiguration = new BindsConfigAdapter(new BindsConfig()); context = new ContextImpl(); context.put(BindsConfiguration.class, bindsConfiguration); bindsSubsystem.preInitialise(context); setUpMockModuleEnvironment(); }
@Override public void setBinds(SimpleUri bindUri, Iterable<Input> inputs) { bindsConfig.setBinds(bindUri, inputs); }
@Override public void initialise() { defaultBinds = bindsManager.getDefaultBindsConfig(); bindButton = find("new-binding", UIInputBind.class); WidgetUtil.trySubscribe(this, "remove", button -> bindButton.setNewInput(null)); WidgetUtil.trySubscribe(this, "ok", button -> { Input newInput = bindButton.getNewInput(); currBinds = bindsManager.getBindsConfig(); if (currBinds.isBound(newInput) && !newInput.equals(bindButton.getInput())) { ConfirmChangePopup popup = getManager().pushScreen(ConfirmChangePopup.ASSET_URI, ConfirmChangePopup.class); popup.setButtonData(bindButton); } else { bindButton.saveInput(); getManager().popScreen(); } }); WidgetUtil.trySubscribe(this, "cancel", button -> getManager().popScreen()); }
@Override public Collection<Input> getBoundInputs() { return unmodifiableCollection(config.getBinds().getBoundInputs()); }
@Override public Input get() { return Iterators.get(config.getBinds(bindUri).iterator(), position, null); }
/** * Sets the inputs for a given bind, replacing any previous inputs * */ public void setBinds(SimpleUri bindUri, Input ... inputs) { setBinds(bindUri, Arrays.asList(inputs)); }
/** * Auto move is disabled when the associated key is pressed again. * This cancels the simulated repeated key stroke for the forward input button. */ private void stopAutoMove() { List<Input> inputs = bindsManager.getBindsConfig().getBinds(new SimpleUri("engine:forwards")); Input forwardKey = getValidKey(inputs); if (forwardKey != null) { inputSystem.cancelSimulatedKeyStroke(forwardKey); isAutoMove = false; } }