/// <summary>
        /// start taking bow
        /// </summary>
        public override void takeBow()
        {
#if DEBUG_INFO
            if (!m_Initialized)
            {
                Debug.LogError("Component not initialized < " + this.ToString() + " >");
                return;
            }
#endif
            if (m_SwitchingItemState)
            {
                return;
            }
            if (!areArmsFree)
            {
                return;
            }

            if (m_EquipmentScript.currentBow &&
                m_EquipmentScript.currentQuiver)
            {
                _startTakingBow();
                if (m_ThirdPersonPlayer.m_Camera is OrbitCameraController)
                {
                    OrbitCameraController oCam = m_ThirdPersonPlayer.m_Camera as OrbitCameraController;
                    def_Xconstraint = oCam.Xconstraint;
                    oCam.minXAngle  = -30;
                    oCam.maxXAngle  = 35;
                }
            }
        }
        /// <summary>
        /// initialize component
        /// </summary>
        public override bool initialize()
        {
            if (m_Initialized)
            {
                return(true);
            }

            if (!base.initialize())
            {
                return(false);
            }


            if (m_Player is PlayerThirdPerson)
            {
                m_ThirdPersonPlayer = m_Player as PlayerThirdPerson;
            }
            else
            {
                Debug.LogError("PlayerThirdPerson component missing <" + this.ToString() + ">");
                return(false);
            }

            m_ItemPicker = GetComponent <ItemPicker>();
            if (!m_ItemPicker)
            {
                Debug.LogError("Cannot find 'ItemPicker' component! < " + this.ToString() + " >"); return(false);
            }

            // setup ragdoll callbacks
            m_ThirdPersonPlayer.ragdoll.OnHit = () =>
            {
                m_Character.simulateRootMotion = false;
                m_Character.disableMove        = true;
                m_Character.rigidBody.velocity = Vector3.zero;

                m_ThirdPersonPlayer.disableInput = true;
                m_ThirdPersonPlayer.noLookIK();
                m_Character.rigidBody.isKinematic      = true;
                m_Character.rigidBody.detectCollisions = false;
                m_Character.capsule.enabled            = false;

                if (m_ThirdPersonPlayer.ragdoll.isFullRagdoll)
                {
                    m_ThirdPersonPlayer.m_Camera.switchTargets(m_ThirdPersonPlayer.ragdoll.RagdollBones[(int)BodyParts.Spine]);
                }
            };
            m_ThirdPersonPlayer.ragdoll.OnStartTransition = () =>
            {
                if (!m_ThirdPersonPlayer.ragdoll.isFullRagdoll && !m_ThirdPersonPlayer.ragdoll.isGettingUp)
                {
                    m_Character.simulateRootMotion         = true;
                    m_Character.rigidBody.detectCollisions = true;
                    m_Character.rigidBody.isKinematic      = false;
                    m_Character.capsule.enabled            = true;
                }
                else
                {
                    m_Animator.SetFloat(/*"pForward"*/ HashIDs.ForwardFloat, 0.0f);
                    m_Animator.SetFloat(/*"pSide"*/ HashIDs.SideFloat, 0.0f);
                }
            };
            m_ThirdPersonPlayer.ragdoll.ragdollEventTime = 3.0f;
            m_ThirdPersonPlayer.ragdoll.OnTimeEnd        = () =>
            {
                if (m_Stats.currentHealth > 0)
                {
                    m_ThirdPersonPlayer.ragdoll.blendToMecanim();
                }
            };
            //m_Ragdoll.OnBlendEnd = () =>
            // {
            //     Debug.Log("ON BLEND END");
            // };
            //m_Ragdoll.OnGetUpEvent = () =>
            //  {
            //      Debug.Log("ON GET UP EVENT");
            //  };
            m_ThirdPersonPlayer.ragdoll.LastEvent = () =>
            {
                m_Character.simulateRootMotion   = true;
                m_Character.disableMove          = false;
                m_ThirdPersonPlayer.disableInput = false;

                if (m_ThirdPersonPlayer.lookTowardsCamera)
                {
                    m_Character.setIKMode(TPCharacter.IKMode.Head);
                }

                m_Character.rigidBody.isKinematic      = false;
                m_Character.rigidBody.detectCollisions = true;
                m_Character.capsule.enabled            = true;
                m_ThirdPersonPlayer.m_Camera.switchTargets(m_ThirdPersonPlayer.m_Camera.Target);
            };

            if (m_ThirdPersonPlayer.lookTowardsCamera)
            {
                m_Character.setIKMode(TPCharacter.IKMode.Head);
            }


            m_ThirdPersonPlayer.OnAttackHit         = attack_hit_notify;
            m_ThirdPersonPlayer.OnAttackEndNotify   = attack_end_notify;
            m_ThirdPersonPlayer.OnAttackStartNotify = attack_start_notify;

            if (m_ThirdPersonPlayer.triggers)
            {
                // setup trigger callbacks
                m_ThirdPersonPlayer.triggers.OnTriggerStart = () =>
                {
                    if (m_ThirdPersonPlayer.legsIK)
                    {
                        m_ThirdPersonPlayer.legsIK.enabled = false;
                    }
                    m_ThirdPersonPlayer.disableInput = true;
                    bool isOnLedge = m_Animator.GetBool(/*"pOnLedge"*/ HashIDs.OnLedgeBool);
                    if (!isOnLedge)
                    {
                        m_ThirdPersonPlayer.noLookIK();
                        m_PrevStrafing = m_ThirdPersonPlayer.strafing;
                        m_ThirdPersonPlayer.strafing = false;
                    }
                };
                m_ThirdPersonPlayer.triggers.OnTriggerEnd = () =>
                {
                    bool isOnLedge = m_Animator.GetBool(/*"pOnLedge"*/ HashIDs.OnLedgeBool);
                    if (!isOnLedge)
                    {
                        m_Player.m_Camera.additiveRotation = false;
                        m_Player.strafing = m_PrevStrafing;
                        if (m_ThirdPersonPlayer.legsIK)
                        {
                            m_ThirdPersonPlayer.legsIK.enabled = true;
                        }
                        if (m_ThirdPersonPlayer.lookTowardsCamera)
                        {
                            m_Character.setIKMode(TPCharacter.IKMode.Head);
                        }
                        if (m_ThirdPersonPlayer.strafing)
                        {
                            m_Character.setMoveMode(TPCharacter.MovingMode.Strafe);
                        }
                    }
                    m_ThirdPersonPlayer.disableInput = false;
                };
            }

            def_cameraMinXangle = (m_ThirdPersonPlayer.m_Camera as OrbitCameraController).minXAngle;
            def_cameraMaxXangle = (m_ThirdPersonPlayer.m_Camera as OrbitCameraController).maxXAngle;
            def_Xconstraint     = (m_ThirdPersonPlayer.m_Camera as OrbitCameraController).Xconstraint;

            m_PrevTargetDirection = m_TargetDirection;

            m_Initialized = true;
            return(m_Initialized);
        }