protected bool m_PrevStrafing = false; // keep track of strafe mode if need to reset /// <summary> /// initialize component /// </summary> public void initialize() { if (m_Initialized) { return; } m_Player = GetComponent <PlayerThirdPerson>(); if (!m_Player) { Debug.LogError("Cannot find component 'Player'" + " < " + this.ToString() + ">"); return; } m_Player.initialize(); // setup ragdoll callbacks m_Player.ragdoll.OnHit = () => { m_Player.character.simulateRootMotion = false; m_Player.character.disableMove = true; m_Player.character.rigidBody.velocity = Vector3.zero; m_Player.disableInput = true; m_Player.character.setIKMode(TPCharacter.IKMode.None); m_Player.character.rigidBody.isKinematic = true; m_Player.character.rigidBody.detectCollisions = false; m_Player.character.capsule.enabled = false; if (m_Player.ragdoll.isFullRagdoll) { m_Player.m_Camera.switchTargets(m_Player.ragdoll.RagdollBones[(int)BodyParts.Spine]); } }; m_Player.ragdoll.OnStartTransition = () => { if (!m_Player.ragdoll.isFullRagdoll && !m_Player.ragdoll.isGettingUp) { m_Player.character.simulateRootMotion = true; m_Player.character.rigidBody.detectCollisions = true; m_Player.character.rigidBody.isKinematic = false; m_Player.character.capsule.enabled = true; } else { m_Player.character.animator.SetFloat(/*"pForward"*/ HashIDs.ForwardFloat, 0.0f); m_Player.character.animator.SetFloat(/*"pSide"*/ HashIDs.SideFloat, 0.0f); } }; //m_Player.ragdoll.ragdollEventTime = 3.0f; //m_Player.ragdoll.OnTimeEnd = () => //{ // m_Player.ragdoll.blendToMecanim(); //}; //m_Ragdoll.OnBlendEnd = () => // { // Debug.Log("ON BLEND END"); // }; //m_Ragdoll.OnGetUpEvent = () => // { // Debug.Log("ON GET UP EVENT"); // }; m_Player.ragdoll.LastEvent = () => { m_Player.character.simulateRootMotion = true; m_Player.character.disableMove = false; m_Player.disableInput = false; if (m_Player.lookTowardsCamera) { m_Player.character.setIKMode(TPCharacter.IKMode.Head); } m_Player.character.rigidBody.isKinematic = false; m_Player.character.rigidBody.detectCollisions = true; m_Player.character.capsule.enabled = true; m_Player.m_Camera.switchTargets(m_Player.m_Camera.Target); }; if (m_Player.lookTowardsCamera) { m_Player.character.setIKMode(TPCharacter.IKMode.Head); } if (m_Player.triggers) { // setup trigger callbacks m_Player.triggers.OnTriggerStart = () => { if (m_Player.legsIK) { m_Player.legsIK.enabled = false; } m_Player.disableInput = true; bool isOnLedge = m_Player.character.animator.GetBool(/*"pOnLedge"*/ HashIDs.OnLedgeBool); if (!isOnLedge) { m_PrevStrafing = m_Player.strafing; m_Player.strafing = false; if (m_Player.character.getIKMode() == TPCharacter.IKMode.Head || m_Player.character.getIKMode() == TPCharacter.IKMode.Waist) { m_Player.character.setIKMode(TPCharacter.IKMode.ToNone); } } }; m_Player.triggers.OnTriggerEnd = () => { bool isOnLedge = m_Player.character.animator.GetBool(/*"pOnLedge"*/ HashIDs.OnLedgeBool); if (!isOnLedge) { m_Player.m_Camera.additiveRotation = false; m_Player.strafing = m_PrevStrafing; if (m_Player.legsIK) { m_Player.legsIK.enabled = true; } if (m_Player.lookTowardsCamera) { m_Player.character.setIKMode(TPCharacter.IKMode.Head); } if (m_Player.strafing) { m_Player.character.setMoveMode(TPCharacter.MovingMode.Strafe); } } m_Player.disableInput = false; }; } m_Initialized = true; }