package com.indignado.logicbricks.systems.controllers; import com.badlogic.ashley.core.ComponentMapper; import com.badlogic.ashley.core.Entity; import com.badlogic.ashley.core.Family; import com.badlogic.gdx.utils.ObjectSet; import com.indignado.logicbricks.components.StateComponent; import com.indignado.logicbricks.components.controllers.ControllerComponent; import com.indignado.logicbricks.config.Settings; import com.indignado.logicbricks.core.controllers.Controller; import com.indignado.logicbricks.core.data.LogicBrick; import com.indignado.logicbricks.core.data.LogicBrick.BrickMode; import com.indignado.logicbricks.core.sensors.Sensor; import com.indignado.logicbricks.systems.LogicBrickSystem; import com.indignado.logicbricks.utils.Log; /** * @author Rubentxu. */ public abstract class ControllerSystem<C extends Controller, CC extends ControllerComponent> extends LogicBrickSystem { protected ComponentMapper<CC> controllerMapper; protected ComponentMapper<StateComponent> stateMapper; public ControllerSystem(Class<CC> clazz) { super(Family.all(clazz, StateComponent.class).get(), 2); this.controllerMapper = ComponentMapper.getFor(clazz); stateMapper = ComponentMapper.getFor(StateComponent.class); } @Override public void processEntity(Entity entity, float deltaTime) { if (Settings.DEBUG_ENTITY != null) tag = Log.tagEntity(this.getClass().getSimpleName(), entity); Integer state = stateMapper.get(entity).getCurrentState(); ObjectSet<C> controllers = (ObjectSet<C>) controllerMapper.get(entity).controllers.get(state); if (controllers != null) { for (C controller : controllers) { controller.pulseState = LogicBrick.BrickMode.BM_OFF; for (Sensor sensor : controller.sensors.values()) { if (sensor.pulseState.equals(LogicBrick.BrickMode.BM_ON)) { //Log.debug(tag, "Sensor %s pulseState %s isPositive %b",sensor.name, sensor.pulseState, sensor.positive); controller.pulseState = BrickMode.BM_IDLE; } else { controller.pulseState = LogicBrick.BrickMode.BM_OFF; break; } } if (controller.pulseState.equals(BrickMode.BM_IDLE)) { processController(controller); if (controller.pulseState.equals(BrickMode.BM_ON)) Log.debug(tag, "Controller %s pulseState %s", controller.name, controller.pulseState); } } } } public abstract void processController(C controller); }