package com.indignado.logicbricks.systems.actuators; import com.badlogic.ashley.core.Component; 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.actuators.ActuatorComponent; import com.indignado.logicbricks.config.Settings; import com.indignado.logicbricks.core.actuators.Actuator; import com.indignado.logicbricks.core.actuators.StateActuator; import com.indignado.logicbricks.core.controllers.Controller; import com.indignado.logicbricks.core.data.LogicBrick; import com.indignado.logicbricks.systems.LogicBrickSystem; import com.indignado.logicbricks.utils.Log; /** * @author Rubentxu. */ public abstract class ActuatorSystem<A extends Actuator, AC extends ActuatorComponent> extends LogicBrickSystem { protected ComponentMapper<AC> actuatorMapper; protected ComponentMapper<StateComponent> stateMapper; public ActuatorSystem(Class<AC> clazz) { super(Family.all(clazz, StateComponent.class).get(), 3); this.actuatorMapper = ComponentMapper.getFor(clazz); stateMapper = ComponentMapper.getFor(StateComponent.class); } public ActuatorSystem(Class<AC> clazz, Class<? extends Component> clazz2) { super(Family.all(clazz, clazz2, StateComponent.class).get(), 3); this.actuatorMapper = 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(); Log.debug(tag, "A) current state %d name %s time " + stateMapper.get(entity).time + " ", state, stateMapper.get(entity).getCurrentStateName()); ObjectSet<A> actuators = (ObjectSet<A>) actuatorMapper.get(entity).actuators.get(state); if (actuators != null) { for (A actuator : actuators) { Log.debug(tag, "B) Actuator %s size controller %d", actuator.name, actuator.controllers.size); actuator.pulseState = LogicBrick.BrickMode.BM_IDLE; for (Controller controller : actuator.controllers) { if (controller.pulseState.equals(LogicBrick.BrickMode.BM_ON)) { Log.debug(tag, "C) Controller %s pulseState %s", controller.name, controller.pulseState); actuator.pulseState = LogicBrick.BrickMode.BM_ON; } else { actuator.pulseState = LogicBrick.BrickMode.BM_OFF; break; } } if (actuator.pulseState.equals(LogicBrick.BrickMode.BM_ON)) { Log.debug(tag, "D) Actuator %s pulseState %s", actuator.name, actuator.pulseState); processActuator(actuator, deltaTime); if (actuator instanceof StateActuator) break; } } } } public abstract void processActuator(A actuator, float deltaTime); }