package com.arretadogames.pilot.entities.effects;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
/**
* EffectManager class is a manager to Effects inside the GameWorld
*/
public class EffectManager {
private static EffectManager instance;
private List<Effect> activeEffects;
private Queue<Effect> inactiveEffects;
private EffectManager() {
activeEffects = new ArrayList<Effect>();
inactiveEffects = new LinkedList<Effect>();
}
public void removeInactiveEffects() {
Iterator<Effect> it = activeEffects.iterator();
while (it.hasNext()) {
Effect e = it.next();
if (e.isFinished()) {
if (e.getCallback() != null) {
e.getCallback().finished();
}
it.remove();
inactiveEffects.add(e);
e.resetProperties();
}
}
}
public List<Effect> getEffects() {
return this.activeEffects;
}
public static EffectManager getInstance() {
if (instance == null)
instance = new EffectManager();
return instance;
}
public void addEffect(final EffectDescriptor effectDescriptor) {
Effect effect;
if (!inactiveEffects.isEmpty()) {
// Recycle
effect = inactiveEffects.poll();
} else {
// Adds a new one
effect = new Effect();
}
effect.setDescriptor(effectDescriptor);
activeEffects.add(effect);
}
public void reset() {
Iterator<Effect> it = activeEffects.iterator();
while (it.hasNext()) {
Effect e = it.next();
it.remove();
inactiveEffects.add(e);
}
}
}