示例#1
0
        /// <summary>
        /// 获取下一个动画Key
        /// 0 - 100 <= AnimTime
        /// 101-199 <= TotalTime (这个是算上pose时间)
        /// 200 pose时间也结束了
        /// </summary>
        /// <param name="deltaTime"></param>
        /// <returns></returns>
        int GetNextKey(int deltaTime)
        {
            if (_activeActionData == null)
            {
                return(-1);
            }

            int currentTime = _actionTime + deltaTime;

            // [0-100]
            if (currentTime <= _activeActionData.AnimTime)
            {
                return(currentTime * 100 / _activeActionData.AnimTime);
            }

            // [200-...]
            if (currentTime >= ActionHelp.GetActionTotalTime(_activeActionData))
            {
                return(200);
            }

            // [101 - TotalTime(animTime + poseTime)]
            //int leftTime = currentTime - _activeActionData.AnimTime;
            return(100 + (currentTime - _activeActionData.AnimTime) * 100 / _activeActionData.PoseTime);
        }
示例#2
0
        void TickAction(int deltaTime, float dt)
        {
            //if (ProcessInterruptEveryFrame())
            //{
            //    return;
            //}

            // 检测是否有[等待]中断动画
            if (ProcessQueuedInterrupt(deltaTime))
            {
                return;
            }


            int  nextActionTime       = 0;
            bool thisActionIsFinished = false;

            if ((_actionTime + deltaTime) > ActionHelp.GetActionTotalTime(_activeActionData))
            {
                nextActionTime = deltaTime;

                deltaTime       = ActionHelp.GetActionTotalTime(_activeActionData) - _actionTime;
                nextActionTime -= deltaTime;

                thisActionIsFinished = true;
            }



            int nextActionKey = GetNextKey(deltaTime);

            tempNextKey = nextActionKey;
            if (nextActionKey > _actionKey)
            {
                int nextKeyTime;
                if (nextActionKey > 100)
                {
                    nextKeyTime = (_activeActionData.AnimTime + _activeActionData.PoseTime) * nextActionKey / 200;
                }
                else
                {
                    nextKeyTime = _activeActionData.AnimTime * nextActionKey / 100;
                }

                //  事件处理
                ProcessEvent(nextKeyTime, deltaTime);

                //  hit define

                //  中断处理
                if (ProcessActionInterruptList(_actionKey, nextActionKey))
                {
                    return;
                }


                //  如果有Pose,尝试进入Pose状态
                if (_activeActionData.PoseTime > 0 && _actionKey < 100 && nextActionKey >= 100)
                {
                    //  enter posetime
                    //  animation speed 0.001f
                    _ownerUnit.OnEnterPoseTime();
                }

                //  hack the event interrupts.
            }


            ProcessMoving(dt);

            _actionTime += deltaTime;
            beforKey     = _actionKey;
            _actionKey   = nextActionKey;

            if (thisActionIsFinished)
            {
                ProcessAnimFinish(nextActionTime);
            }
        }