package it.marteEngine.tween;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Tweener is a utility container for variuos tweens that can change Entity in
* many ways
*
* @author Gornova
*/
public class Tweener {
private List<Tween> tweens = new ArrayList<Tween>();
private List<Tween> removeable = new ArrayList<Tween>();
private boolean active = true;
public Tweener(Tween... tweens) {
if (tweens != null) {
List<Tween> allTweens = Arrays.asList(tweens);
this.tweens.addAll(allTweens);
for (Tween tween : allTweens) {
tween.setParent(this);
}
}
}
public boolean add(Tween tween) {
return add(tween, true);
}
public boolean add(Tween tween, boolean start) {
if (tween != null && tween.getParent() == null) {
boolean result = tweens.add(tween);
tween.setActive(true);
return result;
}
return false;
}
public boolean remove(Tween tween) {
if (tween == null || tween.getParent() != this)
return false;
removeable.add(tween);
tween.setActive(false);
tween.setParent(null);
return true;
}
public void clearTweens() {
for (Tween tween : tweens) {
tween.setActive(false);
tween.setParent(null);
}
tweens = new ArrayList<Tween>();
}
public Tween getTween(String name) {
if (name == null || name.isEmpty())
return null;
for (Tween tween : tweens) {
if (tween.getName() != null && tween.getName().equals(name))
return tween;
}
return null;
}
public Tween getTween(int index) {
if (index < 0 || index >= tweens.size())
return null;
return tweens.get(index);
}
public void update(int delta) {
if (!tweens.isEmpty()) {
for (Tween tween : tweens) {
if (tween.isActive())
tween.update(delta);
if (tween.isFinished())
tween.finish();
}
tweens.removeAll(removeable);
removeable.clear();
}
}
public void start() {
for (Tween tween : tweens) {
tween.reset();
tween.setActive(true);
}
}
public void pause() {
for (Tween tween : tweens) {
tween.setActive(false);
}
}
public void reset() {
this.start();
}
}