package net.mostlyoriginal.ns2d.component;
import com.artemis.Component;
import com.badlogic.gdx.utils.Array;
import com.badlogic.gdx.utils.Pool;
import com.badlogic.gdx.utils.Pools;
import net.mostlyoriginal.ns2d.step.AddStep;
import net.mostlyoriginal.ns2d.step.DeleteFromWorldStep;
import net.mostlyoriginal.ns2d.step.RemoveStep;
import net.mostlyoriginal.ns2d.step.Step;
/**
* @author Daan van Yperen
*/
public class Script extends Component {
public Array<Step> steps = new Array<Step>(1);
public float age;
private float atAge;
public Script() {
}
/**
* Returns a new or pooled action of the specified type.
*/
static public <T extends Step> T prepare(Class<T> type, float atAge) {
Pool<T> pool = Pools.get(type);
T node = pool.obtain();
node.setPool(pool);
node.atAge = atAge;
return node;
}
public Script wait(float delaySeconds)
{
this.atAge += delaySeconds;
return this;
}
public Script deleteFromWorld() {
steps.add(prepare(DeleteFromWorldStep.class, atAge));
return this;
}
public Script add( final Component component ) {
AddStep step = prepare(AddStep.class, atAge);
step.component = component;
steps.add(step);
return this;
}
public Script remove( final Class<? extends Component> component ) {
RemoveStep step = prepare(RemoveStep.class, atAge);
step.componentClass = component;
steps.add(step);
return this;
}
}