Esempio n. 1
0
            void Optimize()
            {
                if (m_List.Count <= 1)
                {
                    return;
                }

                float push_time                  = m_List[0].PushTime;
                float push_position_normal       = m_List[0].PushPosition;
                float push_position_critical     = m_List[0].PushPositionCritical;
                float push_position_critical_dot = m_List[0].PushPositionCriticalDot;
                float push_position_dot          = m_List[0].PushPositionDot;

                float         last_time      = -10f;
                float         last_position  = 0f;
                eTextPushType last_push_type = eTextPushType.Normal;

                for (int i = m_List.Count - 1; i >= 0; --i)
                {
                    TextAnimation animation = m_List[i];
                    if (animation.IsPlaying == false)
                    {
                        continue;
                    }

                    bool is_optimize = false;
                    if (push_time > 0f)
                    {
                        float time = animation.PlaybackTime;
                        if (time - last_time < push_time)
                        {
                            animation.PlaybackTime = last_time + push_time;
                            is_optimize            = true;
                        }
                        last_time = animation.PlaybackTime;
                    }

                    float local_push_position = 0f;
                    if (i != m_List.Count - 1)
                    {
                        switch (last_push_type)
                        {
                        case eTextPushType.Dot:         local_push_position += push_position_dot; break;

                        case eTextPushType.Critical:    local_push_position += push_position_critical; break;

                        case eTextPushType.CriticalDot:    local_push_position += push_position_critical_dot; break;

                        default:                        local_push_position += push_position_normal; break;
                        }
                    }
                    switch (animation.PushType)
                    {
                    case eTextPushType.Dot: local_push_position += push_position_dot; break;

                    case eTextPushType.Critical: local_push_position += push_position_critical; break;

                    case eTextPushType.CriticalDot: local_push_position += push_position_critical_dot; break;

                    default: local_push_position += push_position_normal; break;
                    }

                    if (local_push_position > 0f)
                    {
                        float pos = animation.CurrentPosition;
                        if (pos - last_position < local_push_position)
                        {
                            animation.AddPosition += last_position + local_push_position - pos;
                            last_position          = animation.CurrentPosition;
                            is_optimize            = true;
                        }
                        else
                        {
                            last_position = pos;
                        }
                    }
                    last_push_type = animation.PushType;

                    if (is_optimize == true)
                    {
                        animation.Sample();
                    }
                }
            }