package TaiGameCore;
/**
* Chain relativetimenodes to get relative times "from time of birth" for many objects.
*
* These optimize their chains, so the middlemen are removed (?)
*/
public interface RelativelyTimed {
public static class RelativeTimeNode implements RelativelyTimed{
private double delta;
private TimeSource source;
public RelativeTimeNode(TimeSource source){
this.source = source;
delta = source.time();
}
public RelativeTimeNode(RelativeTimeNode rtn){
delta = rtn.time();
delta += rtn.delta;
source = rtn.source;
}
public double time(){
return source.time()-delta;
}
public void reset(){
delta = source.time();
}
public float timef(){
return (float)time();
}
}
/**
* Unofficially, I advise timesources should return seconds-amounts.
* @author Benjamin
*
*/
public static abstract class TimeSource implements RelativelyTimed{
public float timef(){
return (float)time();
}
}
public double time();
/**
* Sometimes, the double-to-float conversion just really makes client code look messy.
*/
public float timef();
}