public CCRepeatState(CCRepeat action, CCNode target) : base(action, target) { InnerAction = action.InnerAction; Times = action.Times; Total = action.Total; ActionInstant = action.ActionInstant; NextDt = InnerAction.Duration / Duration; InnerActionState = (CCFiniteTimeActionState)InnerAction.StartAction(target); }
protected internal override void Step(float dt) { InnerActionState.Step(dt); if (InnerActionState.IsDone) { float diff = InnerActionState.Elapsed - InnerActionState.Duration; InnerActionState = (MTFiniteTimeActionState)InnerAction.StartAction(Target); InnerActionState.Step(0f); InnerActionState.Step(diff); } }
public JRepeatState(JRepeat action, GameObject target) : base(action, target) { InnerAction = action.InnerAction; Times = action.Times; Total = action.Total; ActionInstant = action.ActionInstant; NextDt = InnerAction.Duration / Duration; InnerActionState = (JFiniteTimeActionState)InnerAction.StartAction(target); }
// issue #80. Instead of hooking step:, hook update: since it can be called by any // container action like Repeat, Sequence, AccelDeccel, etc.. public override void Update(float time) { if (time >= NextDt) { while (time > NextDt && Total < Times) { InnerActionState.Update(1.0f); Total++; InnerActionState.Stop(); InnerActionState = (CCFiniteTimeActionState)InnerAction.StartAction(Target); NextDt += InnerAction.Duration / Duration; } // fix for issue #1288, incorrect end value of repeat if (time >= 1.0f && Total < Times) { Total++; } // don't set an instant action back or update it, it has no use because it has no duration if (!ActionInstant) { if (Total == Times) { InnerActionState.Update(1f); InnerActionState.Stop(); } else { // issue #390 prevent jerk, use right update InnerActionState.Update(time - (NextDt - InnerAction.Duration / Duration)); } } } else { InnerActionState.Update((time * Times) % 1.0f); } }
public MTRepeatForeverState(MTRepeatForever action, GameObject target) : base(action, target) { InnerAction = action.InnerAction; InnerActionState = (MTFiniteTimeActionState)InnerAction.StartAction(target); }
public CCRepeatForeverState(CCRepeatForever action, CCNode target) : base(action, target) { InnerAction = action.InnerAction; InnerActionState = (CCFiniteTimeActionState)InnerAction.StartAction(target); }