public bool TryStartAction(CharacterAction action) { if (action == null) { return(false); } int index = Array.IndexOf(m_Actions, action); // If there is an active action and current action is non concurrent. if (m_ActiveAction != null && action.IsConcurrentAction() == false) { int activeActionIndex = Array.IndexOf(m_Actions, m_ActiveAction); //Debug.LogFormat("Action index {0} | Active Action index {1}", index, activeActionIndex); if (index < activeActionIndex) { if (action.CanStartAction()) { // Stop the current active action. TryStopAction(m_ActiveAction); // Set the active action. m_ActiveAction = m_Actions[index]; //m_ActiveActions[index] = m_Actions[index]; action.StartAction(); //action.UpdateAnimator(); return(true); } } } // If there is an active action and current action is concurrent. else if (m_ActiveAction != null && action.IsConcurrentAction()) { if (action.CanStartAction()) { //m_ActiveActions[index] = m_Actions[index]; action.StartAction(); //action.UpdateAnimator(); return(true); } } // If there is no active action. else if (m_ActiveAction == null) { if (action.CanStartAction()) { m_ActiveAction = m_Actions[index]; //m_ActiveActions[index] = m_Actions[index]; action.StartAction(); //action.UpdateAnimator(); return(true); } } return(false); }
protected void StopStartAction(CharacterAction charAction) { // First, check if current Action can Start or Stop. // Current Action is Active. if (charAction.enabled && charAction.IsActive) { // Check if can stop Action is StopType is NOT Manual. if (charAction.StopType != ActionStopType.Manual) { if (charAction.CanStopAction()) { // Start the Action and update the animator. charAction.StopAction(); // Reset Active Action. if (m_ActiveAction = charAction) { m_ActiveAction = null; } // Move on to the next Action. return; } } } // Current Action is NOT Active. else { // Check if can start Action is StartType is NOT Manual. if (charAction.enabled && charAction.StartType != ActionStartType.Manual) { if (m_ActiveAction == null) { if (charAction.CanStartAction()) { // Start the Action and update the animator. charAction.StartAction(); //charAction.UpdateAnimator(); // Set active Action if not concurrent. if (charAction.IsConcurrentAction() == false) { m_ActiveAction = charAction; } // Move onto the next Action. return; } } else if (charAction.IsConcurrentAction()) { if (charAction.CanStartAction()) { // Start the Action and update the animator. charAction.StartAction(); //charAction.UpdateAnimator(); // Move onto the next Action. return; } } else { return; } } } }