/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package automenta.spacenet.space; import com.ardor3d.scenegraph.Spatial; import com.ardor3d.scenegraph.controller.ComplexSpatialController; import javolution.context.ConcurrentContext; /** * * @author seh */ abstract public class Repeat<S extends Spatial> extends ComplexSpatialController<S> { double t = 0; double period = 0; double timeRemaining = 0; double accumDT = 0; boolean par = false; public Repeat() { super(); } public Repeat(double updatePeriod) { this(); setPeriod(updatePeriod); } public Repeat(double updatePeriod, boolean parallel) { this(updatePeriod); this.par = parallel; } protected void setPeriod(double newPeriod) { this.period = newPeriod; } @Override public void update(final double dt, final S parent) { accumDT += dt; if (timeRemaining <= 0) { if (isParallel()) { ConcurrentContext.execute(new Runnable() { @Override public void run() { update(t, accumDT, parent); timeRemaining = period; accumDT = 0; } }); } else { update(t, accumDT, parent); timeRemaining = period; accumDT = 0; } } else { timeRemaining -= dt; } t += dt; } abstract protected void update(double t, double dt, S parent); public boolean isParallel() { return par; } }