Search in sources :

Example 1 with DevicePush

use of com.b3dgs.lionengine.io.DevicePush in project lionengine by b3dgs.

the class DeviceControllerConfig method create.

/**
 * Create device controller from configuration.
 *
 * @param services The services reference (must not be <code>null</code>).
 * @param media The media configuration (must not be <code>null</code>).
 * @return The created controller.
 * @throws LionEngineException If unable to read node.
 */
public static DeviceController create(Services services, Media media) {
    final Context context = services.get(Context.class);
    final DeviceController controller = new DeviceControllerModel();
    final Collection<DeviceControllerConfig> configs = DeviceControllerConfig.imports(services, media);
    for (final DeviceControllerConfig config : configs) {
        final InputDevice device = context.getInputDevice(config.getDevice());
        if (device instanceof DevicePush) {
            final DevicePush push = (DevicePush) device;
            config.getHorizontal().forEach(h -> controller.addHorizontal(push, new DeviceActionModel(h, push)));
            config.getVertical().forEach(v -> controller.addVertical(push, new DeviceActionModel(v, push)));
            config.getFire().entrySet().forEach(e -> e.getValue().forEach(c -> controller.addFire(device, e.getKey(), new DeviceActionModel(c, push))));
        }
        if (device instanceof DevicePointer) {
            final DevicePointer pointer = (DevicePointer) device;
            controller.addHorizontal(pointer, () -> pointer.getMoveX());
            controller.addVertical(pointer, () -> -pointer.getMoveY());
        }
        if (config.isDisabled()) {
            controller.setDisabled(device.getName(), true, true);
        }
    }
    return controller;
}
Also used : Context(com.b3dgs.lionengine.Context) DevicePush(com.b3dgs.lionengine.io.DevicePush) LionEngineException(com.b3dgs.lionengine.LionEngineException) DevicePointer(com.b3dgs.lionengine.io.DevicePointer) DevicePush(com.b3dgs.lionengine.io.DevicePush) Collection(java.util.Collection) Check(com.b3dgs.lionengine.Check) Set(java.util.Set) HashMap(java.util.HashMap) DeviceControllerModel(com.b3dgs.lionengine.io.DeviceControllerModel) DeviceController(com.b3dgs.lionengine.io.DeviceController) Configurer(com.b3dgs.lionengine.game.Configurer) DeviceMapper(com.b3dgs.lionengine.io.DeviceMapper) ArrayList(java.util.ArrayList) InputDevice(com.b3dgs.lionengine.InputDevice) HashSet(java.util.HashSet) Constant(com.b3dgs.lionengine.Constant) Context(com.b3dgs.lionengine.Context) DeviceAxis(com.b3dgs.lionengine.io.DeviceAxis) List(java.util.List) XmlReader(com.b3dgs.lionengine.XmlReader) Services(com.b3dgs.lionengine.game.feature.Services) Map(java.util.Map) Media(com.b3dgs.lionengine.Media) DeviceActionModel(com.b3dgs.lionengine.io.DeviceActionModel) DeviceControllerModel(com.b3dgs.lionengine.io.DeviceControllerModel) InputDevice(com.b3dgs.lionengine.InputDevice) DeviceController(com.b3dgs.lionengine.io.DeviceController) DevicePointer(com.b3dgs.lionengine.io.DevicePointer) DeviceActionModel(com.b3dgs.lionengine.io.DeviceActionModel)

Example 2 with DevicePush

use of com.b3dgs.lionengine.io.DevicePush in project lionengine by b3dgs.

the class DeviceControllerConfig method imports.

/**
 * Import the data from configurer.
 *
 * @param services The services reference (must not be <code>null</code>).
 * @param media The media configuration (must not be <code>null</code>).
 * @return The loaded input.
 * @throws LionEngineException If unable to read node.
 */
@SuppressWarnings("unchecked")
public static Collection<DeviceControllerConfig> imports(Services services, Media media) {
    Check.notNull(services);
    Check.notNull(media);
    final Collection<DeviceControllerConfig> configs = new ArrayList<>();
    final ClassLoader loader = services.getOptional(ClassLoader.class).orElse(DeviceControllerConfig.class.getClassLoader());
    final Configurer configurer = new Configurer(media);
    try {
        final Class<Enum<? extends DeviceMapper>> mapping;
        mapping = (Class<Enum<? extends DeviceMapper>>) loader.loadClass(configurer.getString(ATT_MAPPING));
        for (final XmlReader deviceNode : configurer.getChildren(NODE_DEVICE)) {
            final Class<DevicePush> device = (Class<DevicePush>) loader.loadClass(deviceNode.getString(ATT_CLASS));
            final boolean disabled = deviceNode.getBoolean(false, ATT_DISABLED);
            final List<DeviceAxis> horizontal = readAxis(deviceNode, NODE_HORIZONTAL);
            final List<DeviceAxis> vertical = readAxis(deviceNode, NODE_VERTICAL);
            final Map<Integer, Set<Integer>> fire = readFire(mapping, deviceNode);
            configs.add(new DeviceControllerConfig(device, disabled, horizontal, vertical, fire));
        }
    } catch (final ReflectiveOperationException exception) {
        throw new LionEngineException(exception);
    }
    return configs;
}
Also used : Set(java.util.Set) HashSet(java.util.HashSet) DeviceMapper(com.b3dgs.lionengine.io.DeviceMapper) ArrayList(java.util.ArrayList) XmlReader(com.b3dgs.lionengine.XmlReader) DeviceAxis(com.b3dgs.lionengine.io.DeviceAxis) DevicePush(com.b3dgs.lionengine.io.DevicePush) LionEngineException(com.b3dgs.lionengine.LionEngineException) Configurer(com.b3dgs.lionengine.game.Configurer)

Aggregations

LionEngineException (com.b3dgs.lionengine.LionEngineException)2 XmlReader (com.b3dgs.lionengine.XmlReader)2 Configurer (com.b3dgs.lionengine.game.Configurer)2 DeviceAxis (com.b3dgs.lionengine.io.DeviceAxis)2 DeviceMapper (com.b3dgs.lionengine.io.DeviceMapper)2 DevicePush (com.b3dgs.lionengine.io.DevicePush)2 ArrayList (java.util.ArrayList)2 HashSet (java.util.HashSet)2 Set (java.util.Set)2 Check (com.b3dgs.lionengine.Check)1 Constant (com.b3dgs.lionengine.Constant)1 Context (com.b3dgs.lionengine.Context)1 InputDevice (com.b3dgs.lionengine.InputDevice)1 Media (com.b3dgs.lionengine.Media)1 Services (com.b3dgs.lionengine.game.feature.Services)1 DeviceActionModel (com.b3dgs.lionengine.io.DeviceActionModel)1 DeviceController (com.b3dgs.lionengine.io.DeviceController)1 DeviceControllerModel (com.b3dgs.lionengine.io.DeviceControllerModel)1 DevicePointer (com.b3dgs.lionengine.io.DevicePointer)1 Collection (java.util.Collection)1