package com.indignado.logicbricks.systems; import com.badlogic.ashley.core.ComponentMapper; import com.badlogic.ashley.core.Engine; import com.badlogic.ashley.core.Entity; import com.badlogic.ashley.core.Family; import com.badlogic.gdx.physics.box2d.Body; import com.badlogic.gdx.physics.box2d.World; import com.badlogic.gdx.utils.Array; import com.indignado.logicbricks.components.RigidBodiesComponents; import com.indignado.logicbricks.components.StateComponent; import com.indignado.logicbricks.config.Settings; import com.indignado.logicbricks.utils.Log; /** * @author Rubentxu */ public class StateSystem extends LogicBrickSystem { Array<Entity> toRemove; private ComponentMapper<StateComponent> sm; private World physics; public StateSystem() { super(Family.all(StateComponent.class).get(), 0); sm = ComponentMapper.getFor(StateComponent.class); toRemove = new Array<Entity>(); } @Override public void addedToEngine(Engine engine) { super.addedToEngine(engine); physics = context.get(World.class); } @Override public void update(float deltaTime) { super.update(deltaTime); for (Entity entity : toRemove) { engine.removeEntity(entity); RigidBodiesComponents rigidBodies = entity.getComponent(RigidBodiesComponents.class); if (rigidBodies != null) { for (Body body : rigidBodies.rigidBodies) { rigidBodies.rigidBodies.removeValue(body, true); physics.destroyBody(body); } } } toRemove.clear(); } @Override public void processEntity(Entity entity, float deltaTime) { if (Settings.DEBUG_ENTITY != null) tag = Log.tagEntity(this.getClass().getSimpleName(), entity); StateComponent state = sm.get(entity); state.time += deltaTime; if (state.getCurrentState() == StateComponent.eraseID) { toRemove.add(entity); } if (sm.get(entity).oldState != state.getCurrentState()) { sm.get(entity).oldState = state.getCurrentState(); sm.get(entity).isChanged = true; } else { sm.get(entity).isChanged = false; } } }