/* * Strongback * Copyright 2015, Strongback and individual contributors by the @authors tag. * See the COPYRIGHT.txt in the distribution for a full listing of individual * contributors. * * Licensed under the MIT License; you may not use this file except in * compliance with the License. You may obtain a copy of the License at * http://opensource.org/licenses/MIT * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.strongback.components.ui; import java.util.function.IntToDoubleFunction; import org.strongback.components.Switch; import org.strongback.function.IntToBooleanFunction; import org.strongback.function.IntToIntFunction; /** * A simple collection of axes and buttons. */ public interface InputDevice { /** * Get the analog axis for the given number. * @param axis the axis number * @return the analog axis, or null if there is no such axis */ public ContinuousRange getAxis(int axis); /** * Get the button for the given number. * @param button the button number * @return the button, or null if there is no such button */ public Switch getButton(int button); /** * Get the directional axis for the given D-pad number. * @param pad the pad number * @return the directional axis, or null if there is no such axis for the given D-pad number */ public DirectionalAxis getDPad(int pad); /** * Create an input device from the supplied mapping functions. * @param axisToValue the function that maps an integer to a double value for the axis * @param buttonNumberToSwitch the function that maps an integer to whether the button is pressed * @param padToValue the function that maps an integer to the directional axis output * @return the resulting input device; never null */ public static InputDevice create( IntToDoubleFunction axisToValue, IntToBooleanFunction buttonNumberToSwitch, IntToIntFunction padToValue ) { return new InputDevice() { @Override public ContinuousRange getAxis(int axis) { return ()->axisToValue.applyAsDouble(axis); } @Override public Switch getButton(int button) { return ()->buttonNumberToSwitch.applyAsBoolean(button); } @Override public DirectionalAxis getDPad(int pad) { return ()->padToValue.applyAsInt(pad); } }; } }