Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        // 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);
            }
        }
Beispiel #5
0
 public MTRepeatForeverState(MTRepeatForever action, GameObject target)
     : base(action, target)
 {
     InnerAction      = action.InnerAction;
     InnerActionState = (MTFiniteTimeActionState)InnerAction.StartAction(target);
 }
Beispiel #6
0
 public CCRepeatForeverState(CCRepeatForever action, CCNode target)
     : base(action, target)
 {
     InnerAction      = action.InnerAction;
     InnerActionState = (CCFiniteTimeActionState)InnerAction.StartAction(target);
 }