package org.codecranachan.asteroidpush.base.input.slick2d; import java.util.HashMap; import java.util.Map; import org.codecranachan.asteroidpush.base.input.ControlItem; class ControllerMapping { private Map<Integer, ControlItem> buttonMapping; private Map<Integer, ControlItem> directionMapping; public static int RIGHT = 0; public static int UP = 1; public static int LEFT = 2; public static int DOWN = 3; public ControllerMapping() { buttonMapping = new HashMap<Integer, ControlItem>(); directionMapping = new HashMap<Integer, ControlItem>(); } public ControlItem mapButton(int button) { return Slick2dInputMapper.getBinding(button, buttonMapping); } public void bindButton(int button, ControlItem event) { buttonMapping.put(button, event); } public ControlItem mapDirection(int direction) { return Slick2dInputMapper.getBinding(direction, directionMapping); } public void bindDirection(int direction, ControlItem event) { directionMapping.put(direction, event); } } public class Slick2dInputMapper { private Map<Integer, ControlItem> keyMapping; private Map<Integer, ControlItem> mouseButtonMapping; private Map<Integer, ControlItem> mouseWheelMapping; private Map<Integer, ControllerMapping> controllerMapping; public static int MOUSE_WHEEL_UP = 0; public static int MOUSE_WHEEL_DOWN = 1; static public ControlItem getBinding(Integer key, Map<Integer, ControlItem> map) { // This function is used instead of Map.getOrDefault(), which is not // available in JAVA 1.7 if (map.containsKey(key)) { return map.get(key); } else { return ControlItem.NOT_BOUND; } } public Slick2dInputMapper() { keyMapping = new HashMap<Integer, ControlItem>(); mouseButtonMapping = new HashMap<Integer, ControlItem>(); mouseWheelMapping = new HashMap<Integer, ControlItem>(); controllerMapping = new HashMap<Integer, ControllerMapping>(); } public ControlItem mapMouseButton(int button) { return getBinding(button, mouseButtonMapping); } public void bindMouseButton(int button, ControlItem event) { mouseButtonMapping.put(button, event); } public ControlItem mapMouseWheel(int direction) { return getBinding(direction, mouseWheelMapping); } public void bindMouseWheel(int direction, ControlItem event) { mouseWheelMapping.put(direction, event); } public ControlItem mapKey(int key) { return getBinding(key, keyMapping); } public void bindKey(int key, ControlItem event) { keyMapping.put(key, event); } public ControlItem mapControllerButton(int controller, int button) { if (controllerMapping.containsKey(controller)) { ControllerMapping mapping = controllerMapping.get(controller); return mapping.mapButton(button); } else { return ControlItem.NOT_BOUND; } } public void bindControllerButton(int controller, int button, ControlItem event) { ControllerMapping mapping; if (controllerMapping.containsKey(controller)) { mapping = controllerMapping.get(controller); } else { mapping = new ControllerMapping(); controllerMapping.put(controller, mapping); } mapping.bindButton(button, event); } public ControlItem mapControllerDirection(int controller, int direction) { if (controllerMapping.containsKey(controller)) { ControllerMapping mapping = controllerMapping.get(controller); return mapping.mapDirection(direction); } else { return ControlItem.NOT_BOUND; } } public void bindControllerDirection(int controller, int direction, ControlItem event) { ControllerMapping mapping; if (controllerMapping.containsKey(controller)) { mapping = controllerMapping.get(controller); } else { mapping = new ControllerMapping(); controllerMapping.put(controller, mapping); } mapping.bindDirection(direction, event); } }