/**
     * \fn KeyFrameFinished
     * \brief Updates what the last keyframe played in the animation was.
     *
     *
     **/
    void KeyFrameFinished()
    {
        if (m_bPrintDebug)
        {
            LPK_PrintDebug(this, "Finished keyframe.");
        }

        LPK_EventManager.LPK_EventData data = new LPK_EventManager.LPK_EventData(gameObject, m_KeyFrameFinishedReceivers);
        data.m_idata.Add(m_iCounter);

        LPK_EventList sendEvent = new LPK_EventList();

        sendEvent.m_GameplayEventTrigger = new LPK_EventList.LPK_GAMEPLAY_EVENTS[] { LPK_EventList.LPK_GAMEPLAY_EVENTS.LPK_TransformAnimatorKeyframeFinished };

        LPK_EventManager.InvokeEvent(sendEvent, data);

        //Reset values.
        m_LastTransformValues = m_KeyFrames[m_iCounter];
        m_flPassedTime        = 0.0f;
        m_iCounter           += 1 * m_iCounterModifier;

        if (m_iCounter >= 0 && m_iCounter < m_KeyFrames.Length)
        {
            m_GoalTransformValues = m_KeyFrames[m_iCounter];
        }
    }
    /**
     * \fn Start
     * \brief Sets up what event to listen to for sprite and color modification.
     *
     *
     **/
    override protected void OnStart()
    {
        if (m_pModifyGameObject == null)
        {
            m_pModifyGameObject = gameObject;
        }

        if (m_KeyFrames.Length == 0)
        {
            m_bIsActive = false;

            if (m_bPrintDebug)
            {
                LPK_PrintWarning(this, "No keyframes set in animator.  BUG THIS.");
            }
            return;
        }

        InitializeEvent(m_EventTrigger, OnEvent);

        if (m_eTransformMode == LPK_TransformMode.WORLD)
        {
            m_LastTransformValues.m_vecTranslate = m_pModifyGameObject.transform.position;
            m_LastTransformValues.m_vecRotate    = m_pModifyGameObject.transform.eulerAngles;
            m_LastTransformValues.m_vecScale     = m_pModifyGameObject.transform.localScale;
        }
        else
        {
            m_LastTransformValues.m_vecTranslate = m_pModifyGameObject.transform.localPosition;
            m_LastTransformValues.m_vecRotate    = m_pModifyGameObject.transform.localEulerAngles;
            m_LastTransformValues.m_vecScale     = m_pModifyGameObject.transform.localScale;
        }

        m_GoalTransformValues = m_KeyFrames[0];
    }
    /**
     * \fn AnimationFinished
     * \brief Manages how the animator responds if finished.
     *
     * \return bool - True/False flag for whether or not the animator should animate again.
     **/
    bool AnimationFinished()
    {
        if (m_bPrintDebug)
        {
            LPK_PrintDebug(this, "Finished animation sequence.");
        }

        LPK_EventManager.LPK_EventData data = new LPK_EventManager.LPK_EventData(gameObject, m_SequenceFinishedReceivers);

        LPK_EventList sendEvent = new LPK_EventList();

        sendEvent.m_GameplayEventTrigger = new LPK_EventList.LPK_GAMEPLAY_EVENTS[] { LPK_EventList.LPK_GAMEPLAY_EVENTS.LPK_TransformAnimatorSequenceFinished };

        LPK_EventManager.InvokeEvent(sendEvent, data);

        if (m_eLoopingStyle == LPK_LoopingStyle.LOOP)
        {
            if (m_KeyFrames.Length < 2)
            {
                if (m_bPrintDebug)
                {
                    LPK_PrintWarning(this, "Cannot have LOOPING animation if there is only one frame.  Changing to PLAY_ONCE.");
                }

                m_eLoopingStyle = LPK_LoopingStyle.PlAY_ONCE;
                m_bIsActive     = false;
                return(false);
            }

            m_iCounter            = 0;
            m_GoalTransformValues = m_KeyFrames[m_iCounter];
            return(true);
        }
        else if (m_eLoopingStyle == LPK_LoopingStyle.PINGPONG)
        {
            if (m_KeyFrames.Length < 2)
            {
                if (m_bPrintDebug)
                {
                    LPK_PrintWarning(this, "Cannot have PINGPONG animation if there is only one frame.  Changing to PLAY_ONCE.");
                }

                m_eLoopingStyle = LPK_LoopingStyle.PlAY_ONCE;
                m_bIsActive     = false;
                return(false);
            }

            //Going backwards.
            if (m_iCounterModifier == 1)
            {
                m_iCounter -= 1;
            }
            //Going forwards.
            else
            {
                m_iCounter += 1;
            }

            m_iCounterModifier *= -1;

            m_LastTransformValues = m_KeyFrames[m_iCounter];

            //Set the next goal.
            m_iCounter           += 1 * m_iCounterModifier;
            m_GoalTransformValues = m_KeyFrames[m_iCounter];

            return(true);
        }
        else
        {
            m_bIsActive = false;
        }
        return(false);
    }