示例#1
0
        public int ExecInternal(float tick)
        {
            if (m_rootMovie == null)
            {
                return(0);
            }
            bool  execed          = false;
            float currentProgress = m_progress;

            if (m_execDisabled && tweens == null)
            {
                if (!m_executedForExecDisabled)
                {
                    ++m_execCount;
                    m_rootMovie.Exec();
                    m_rootMovie.PostExec(true);
                    m_executedForExecDisabled = true;
                    execed = true;
                }
            }
            else
            {
                bool progressing = true;
                if (tick == 0)
                {
                    m_progress = m_tick;
                }
                else if (tick < 0)
                {
                    m_progress  = m_tick;
                    progressing = false;
                }
                else
                {
                    if (m_time == 0)
                    {
                        m_time     += (double)m_tick;
                        m_progress += m_tick;
                    }
                    else
                    {
                        m_time     += (double)tick;
                        m_progress += tick;
                    }
                }

                if (m_execHandlers != null)
                {
                    foreach (var h in m_execHandlers)
                    {
                        h(this);
                    }
                }

                int execLimit = m_execLimit;
                while (m_progress >= m_tick - m_roundOffTick)
                {
                    if (--execLimit < 0)
                    {
                        m_progress = 0;
                        break;
                    }
                    m_progress -= m_tick;
                    ++m_execCount;
                    m_rootMovie.Exec();
                    m_rootMovie.PostExec(progressing);
                    execed = true;
                    if (!m_frameSkip)
                    {
                        break;
                    }
                }

                if (m_progress < m_roundOffTick)
                {
                    m_progress = 0;
                }

                LinkButton();
            }

            if (isLWFAttached)
            {
                bool hasButton = m_rootMovie.ExecAttachedLWF(tick, currentProgress);
                if (hasButton)
                {
                    LinkButton();
                }
            }

            m_needsUpdate = false;
            if (!m_fastForward)
            {
                if (execed || m_propertyDirty || m_needsUpdateForAttachLWF)
                {
                    m_needsUpdate = true;
                }
            }

            if (!m_execDisabled)
            {
                if (tick < 0)
                {
                    m_progress = currentProgress;
                }
            }

            return(m_renderingCount);
        }