package minizoo.c.action; import minizoo.c.Entity; public class Repeat extends Finite { public static Repeat c(int count, Finite targetAction) { return new Repeat(count, targetAction); } public Repeat(int count, Finite targetAction) { this.now = 0; this.count = count; setTargetAction(targetAction); } @Override public void clear() { super.clear(); now = 0; getTargetAction().clear(); } @Override public float getDuration() { return count * getTargetAction().getDuration(); } @Override public void update(float elapsed) { super.update(elapsed); if (targetAction.getDuration() == 0) { return; } if (targetAction.getDuration() <= targetAction.time) { if (++now < count) { float remainder = targetAction.time % targetAction.getDuration(); targetAction.update(targetAction.getDuration() - remainder); targetAction.clear(); targetAction.update(remainder); } } targetAction.update(elapsed); } @Override public void sample(float t) { getTargetAction().sample(t); } @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; int now; int count; }