package com.siondream.core.entity.systems;
import com.badlogic.gdx.utils.Array;
import com.siondream.core.Env;
import com.siondream.core.ParticleEffectPools;
import com.siondream.core.entity.components.ParticleComponent;
import ashley.core.Engine;
import ashley.core.Entity;
import ashley.core.EntitySystem;
import ashley.core.Family;
import ashley.utils.IntMap;
import ashley.utils.IntMap.Values;
public class ParticleEffectSystem extends EntitySystem {
private IntMap<Entity> entities;
private Array<Entity> finishedEntities;
public ParticleEffectSystem() {
super();
finishedEntities = new Array<Entity>();
}
@Override
public void addedToEngine(Engine engine) {
super.addedToEngine(engine);
entities = Env.game.getEngine().getEntitiesFor(Family.getFamilyFor(ParticleComponent.class));
}
@Override
public void update(float deltaTime) {
ParticleEffectPools pools = Env.game.getParticlePools();
Values<Entity> values = entities.values();
while (values.hasNext()) {
Entity entity = values.next();
ParticleComponent particleComponent = entity.getComponent(ParticleComponent.class);
particleComponent.effect.update(deltaTime);
if (particleComponent.effect.isComplete()) {
pools.free(particleComponent.effect);
finishedEntities.add(entity);
}
}
Engine engine = Env.game.getEngine();
for (Entity entity : finishedEntities) {
engine.removeEntity(entity);
}
finishedEntities.clear();
}
}