package minizoo.c.action; import minizoo.c.Entity; public class Forever extends Action { public static Forever c(Finite targetAction) { return new Forever(targetAction); } public Forever(Finite targetAction) { setTargetAction(targetAction); } @Override public void clear() { super.clear(); getTargetAction().clear(); } @Override public float getDuration() { return Float.POSITIVE_INFINITY; } @Override public void update(float elapsed) { super.update(elapsed); if (targetAction.getDuration() == 0) { return; } if (targetAction.getDuration() <= targetAction.time) { float remainder = targetAction.time % targetAction.getDuration(); targetAction.update(targetAction.getDuration() - remainder); targetAction.clear(); targetAction.update(remainder); } targetAction.update(elapsed); } @Override public void setTarget(Entity target) { getTargetAction().setTarget(target); } @Override public Entity getTarget() { return getTargetAction().getTarget(); } public void setTargetAction(Finite targetAction) { this.targetAction = targetAction; } public Finite getTargetAction() { return targetAction; } Finite targetAction; }