Ejemplo n.º 1
0
    public void Active(TAvatar avatar, ViAvatarDurationVisualInterface <TAvatar> kEffect)
    {
        if (m_kPriorityList.IsEmpty())
        {
            m_kPriorityList.PushBack(kEffect._priorityNode);
            kEffect.OnActive(avatar);
            _OnUpdated(avatar, null);
        }
        else
        {
            ViDoubleLinkNode2 <ViAvatarDurationVisualInterface <TAvatar> > iter = m_kPriorityList.GetHead();
            ViAvatarDurationVisualInterface <TAvatar> pkOldTop = iter.Data as ViAvatarDurationVisualInterface <TAvatar>;
            ViDebuger.AssertError(pkOldTop);
            while (!m_kPriorityList.IsEnd(iter))
            {
                ViAvatarDurationVisualInterface <TAvatar> pkEffect = iter.Data as ViAvatarDurationVisualInterface <TAvatar>;
                ViDebuger.AssertError(pkEffect);
                if (kEffect.Weight > pkEffect.Weight)
                {
                    break;
                }
                ViDoubleLink2 <ViAvatarDurationVisualInterface <TAvatar> > .Next(ref iter);
            }
            ViDoubleLink2 <ViAvatarDurationVisualInterface <TAvatar> > .PushBefore(iter, kEffect._priorityNode);

            if (kEffect._priorityNode == m_kPriorityList.GetHead())
            {
                pkOldTop.OnDeactive(avatar);
                kEffect.OnActive(avatar);
                _OnUpdated(avatar, pkOldTop);
            }
        }
    }