protected abstract void Setup(float[] a_predictionTimes); //Setup function to be implemented for any custom logic based on the prediction times. It is called at the end of SetGoalRequirements.

        //===========================================================================================

        /**
         *  @brief Monobehaviour Awake function called once when the game object is created and before
         *  Start. This implementation ensure the trajectory generator has a reference to all necessary
         *  components.
         *
         *********************************************************************************************/
        protected virtual void Awake()
        {
            p_mxmAnimator = GetComponentInChildren <MxMAnimator>();

            Assert.IsNotNull(p_mxmAnimator, "Cannot initialize MxMTrajectoryGeneratorBase with null MxMAnimator" +
                             "Add an MxMAnimator component");

            p_animator = p_mxmAnimator.GetComponent <Animator>();
        }
        private void Start()
        {
            m_maxDecouple = Mathf.Clamp(Mathf.Abs(m_maxDecouple), 0f, float.MaxValue);

            m_controllerWrapper = GetComponent<GenericControllerWrapper>();

            m_mxmAnimator = GetComponentInChildren<MxMAnimator>();

            if(m_mxmAnimator != null)
            {
                m_modelTransform = m_mxmAnimator.transform;
                m_animator = m_mxmAnimator.GetComponent<Animator>();
            }
            else
            {
                Debug.LogError("MxMAnimationDecoupler: Cannot find child component with MxMAnimator attached. Decoupler disabled");
                enabled = false;
            }

            Animator animator = GetComponentInChildren<Animator>();
            if(animator != null)
            {
                if (animator.updateMode == AnimatorUpdateMode.AnimatePhysics)
                    m_fixedUpdate = true;
                else
                    m_fixedUpdate = false;
            }
            else
            {
                Debug.LogError("MxMAnimationDecoupler: Cannot find child component with Animator attached. Decoupler disabled");
                enabled = false;
            }

            m_modelPos = m_modelTransform.position;
            m_modelRot = m_modelTransform.rotation;
        }