Exemplo n.º 1
0
 // ----------------------------------------------------------------------------------------------------
 // Smoothly transfers instructors to specified transition
 // ----------------------------------------------------------------------------------------------------
 public void AddTransition(Transition _transition)
 {
     // First checks if we are not adding the same transition as we last added
     if ((m_TransitionCount == 0 && m_Containers[_transition.Priority] == _transition) || (m_TransitionCount > 0 && m_Transitions[m_TransitionCount - 1].Container == _transition))
     {
         // Well, nothing to do here
     }
     else if (HigherPrioritiesBeingReleased(_transition.m_Priority))
     {
         InitContainer(_transition);
         m_Transitions[m_TransitionCount] =
             new TransitionInformation(
                 _transition,
                 _transition.m_Priority,
                 _transition.Time,
                 ContainerPriority.None);
         m_TransitionCount++;
     }
     else if (_transition.m_Priority < m_Priority)
     {
         InitContainer(_transition);
         m_Containers[_transition.m_Priority] = _transition;
     }
     else
     {
         InsertTransition(_transition, _transition.Priority, _transition.Time, ContainerPriority.None);
     }
 }
Exemplo n.º 2
0
    // ----------------------------------------------------------------------------------------------------
    // Inserts transition in list after its corresponding priority
    // ----------------------------------------------------------------------------------------------------
    private void InsertTransition(InstructorContainer _container, int _priority, float _time, int _priorityRelease)
    {
        int insertionPriority = _priorityRelease != ContainerPriority.None ? _priorityRelease : _priority;

        for (int i = 0; i < m_TransitionCount; i++)
        {
            if (m_Transitions[i].Priority > insertionPriority)
            {
                Assertion.Assert(i < InstructorProcessor.m_TransitionMaxCount - 1, "Transition list is full, cannot insert.");

                for (int j = InstructorProcessor.m_TransitionMaxCount - 1; j > i; j--)
                {
                    m_Transitions[j] = m_Transitions[j - 1];
                }

                InitContainer(_container);
                m_Transitions[i] = new TransitionInformation(_container, _priority, _time, _priorityRelease);
                m_TransitionCount++;

                break;
            }
        }
    }
Exemplo n.º 3
0
    // ----------------------------------------------------------------------------------------------------
    // Releases specified priority if no one has overriden it yet
    // ----------------------------------------------------------------------------------------------------
    public void ReleasePriority(Transition _transition)
    {
        Assertion.Assert(_transition.m_Priority != ContainerPriority.None, "Cannot release priority 0, logic error.");

        // Only release priority if there are no other transitions following it with higher or equal priority
        // or if it has already been overriden in the containers
        if (IsLastAddedTransition(_transition))
        {
            if (m_Priority > _transition.m_Priority)
            {
                ReleasePriorityCut(_transition);
            }
            else
            {
                InstructorContainer lastContainer;
                for (int i = _transition.m_Priority - 1; i >= 0; i--)
                {
                    lastContainer = GetLastContainer(i);
                    if (lastContainer != null)
                    {
                        if (HigherPriorityInList(_transition.m_Priority))
                        {
                            InsertTransition(lastContainer, i, _transition.Time, _transition.Priority);
                        }
                        else
                        {
                            m_Transitions[m_TransitionCount] = new TransitionInformation(lastContainer, i, _transition.Time, _transition.Priority);
                            m_TransitionCount++;
                        }

                        break;
                    }
                }
            }
        }
    }