diff options
Diffstat (limited to '_ActiveRagdoll/Player')
-rw-r--r-- | _ActiveRagdoll/Player/AnimationHandler.cs | 15 | ||||
-rw-r--r-- | _ActiveRagdoll/Player/MovementDataHandler.cs | 92 | ||||
-rw-r--r-- | _ActiveRagdoll/Player/MovementHandler.cs | 86 | ||||
-rw-r--r-- | _ActiveRagdoll/Player/PickupHandler.cs | 64 |
4 files changed, 257 insertions, 0 deletions
diff --git a/_ActiveRagdoll/Player/AnimationHandler.cs b/_ActiveRagdoll/Player/AnimationHandler.cs new file mode 100644 index 0000000..382b3a5 --- /dev/null +++ b/_ActiveRagdoll/Player/AnimationHandler.cs @@ -0,0 +1,15 @@ +using UnityEngine; + +//Player AnimationHandler 记录当前动作状态编号 +public class AnimationHandler : MonoBehaviour +{ + public int animationState; + + private void Start() + { + } + + private void Update() + { + } +} diff --git a/_ActiveRagdoll/Player/MovementDataHandler.cs b/_ActiveRagdoll/Player/MovementDataHandler.cs new file mode 100644 index 0000000..18d43f5 --- /dev/null +++ b/_ActiveRagdoll/Player/MovementDataHandler.cs @@ -0,0 +1,92 @@ +using UnityEngine; + +public class MovementDataHandler : MonoBehaviour +{ + [HideInInspector] + public Vector3 groundedForward; + + [HideInInspector] + public Vector3 right; + + [HideInInspector] + public Vector3 left; + + [HideInInspector] + public Vector3 groundedBack; + + private Transform hip; + + private Transform torso; + + public Transform rotationTarget; + + [HideInInspector] + public float slopeStrenght; + + public float slopeVelocityStrenght; + + [HideInInspector] + public float sinceJump = 1f; + + [HideInInspector] + public Vector3 groundNormal; + + private InputHandler inputHandler; + + private Transform leftKnee; + + private Transform rightKnee; + + private void Start() + { + inputHandler = GetComponent<InputHandler>(); + hip = GetComponentInChildren<Hip>().transform; + torso = GetComponentInChildren<Torso>().transform; + if (!rotationTarget) + { + rotationTarget = GetComponentInChildren<RotationTarget>().transform; + } + KneeLeft componentInChildren = GetComponentInChildren<KneeLeft>(); + if ((bool)componentInChildren) + { + leftKnee = componentInChildren.transform; + } + KneeRight componentInChildren2 = GetComponentInChildren<KneeRight>(); + if ((bool)componentInChildren2) + { + rightKnee = componentInChildren2.transform; + } + } + + private void Update() + { + sinceJump += Time.deltaTime; + groundedForward = rotationTarget.forward; + groundedForward.y = slopeStrenght * 1f; + groundedForward = groundedForward.normalized; + groundedBack = -groundedForward; + right = rotationTarget.right; + left = -rotationTarget.right; + slopeStrenght = Mathf.Lerp(slopeStrenght, 0f, Time.deltaTime * 1f); + Debug.DrawLine(hip.position, hip.position + groundedForward * 10f); + } + + public void SetSlope(Vector3 normal) + { + groundNormal = normal; + slopeStrenght = Vector3.Cross(rotationTarget.right, normal).y; + Vector3 lhs = Vector3.Cross(Vector3.up, inputHandler.inputMovementDirection); + slopeVelocityStrenght = Vector3.Cross(lhs, normal).y; + } + + public float GetSmallestLegAngle() + { + float num = Vector3.Angle(leftKnee.forward, Vector3.down); + float num2 = Vector3.Angle(rightKnee.forward, Vector3.down); + if (num < num2) + { + return num; + } + return num2; + } +} diff --git a/_ActiveRagdoll/Player/MovementHandler.cs b/_ActiveRagdoll/Player/MovementHandler.cs new file mode 100644 index 0000000..4579efc --- /dev/null +++ b/_ActiveRagdoll/Player/MovementHandler.cs @@ -0,0 +1,86 @@ +using System.Collections; +using UnityEngine; + +//Player MovementHandler 控制移动、跳跃 +public class MovementHandler : MonoBehaviour +{ + private InputHandler inputHandler; + + public float friction = 0.9f; + + public Vector3 movementVector; + + public float[] animationForceAmounts; + + private AnimationHandler animationHandler; + + private RigidbodyHolder allRigs; + + public AnimationCurve jumpCurve; + + public float jumpForce; + + private StandingDataHandler standingData; + + private MovementDataHandler data; + + private PlayerDeath death; + + [HideInInspector] + public float multiplier = 1f; + + private WobbleShake wobbleShake; + + private void Start() + { + wobbleShake = GetComponentInChildren<WobbleShake>(); + death = GetComponent<PlayerDeath>(); + standingData = GetComponent<StandingDataHandler>(); + inputHandler = GetComponent<InputHandler>(); + animationHandler = GetComponent<AnimationHandler>(); + allRigs = GetComponent<RigidbodyHolder>(); + data = GetComponent<MovementDataHandler>(); + } + + private void FixedUpdate() + { + if (!death.dead) + { + data.sinceJump += Time.fixedDeltaTime; + movementVector += inputHandler.inputMovementDirection * animationForceAmounts[animationHandler.animationState]; + movementVector *= friction; + for (int i = 0; i < allRigs.GetAllRigs().Length; i++) + { + allRigs.GetAllRigs()[i].AddForce(movementVector * multiplier, ForceMode.Acceleration); + } + } + } + + public void Jump() + { + if (!(data.sinceJump < 0.5f) && !(standingData.sinceGrounded > 0.3f)) + { + data.sinceJump = 0f; + StartCoroutine(AddJumpForce()); + wobbleShake.AddShake(Vector3.up * 2f, 0.8f); + } + } + + private IEnumerator AddJumpForce() + { + float counter = 0f; + for (int i = 0; i < allRigs.GetAllRigs().Length; i++) + { + allRigs.GetAllRigs()[i].velocity = new Vector3(allRigs.GetAllRigs()[i].velocity.x, 0f, allRigs.GetAllRigs()[i].velocity.z); + } + while (counter < jumpCurve.keys[jumpCurve.length - 1].time && !death.dead) + { + counter += Time.deltaTime; + for (int j = 0; j < allRigs.GetAllRigs().Length; j++) + { + allRigs.GetAllRigs()[j].AddForce(Vector3.up * multiplier * jumpForce * jumpCurve.Evaluate(counter) * Time.deltaTime, ForceMode.Acceleration); + } + yield return null; + } + } +} diff --git a/_ActiveRagdoll/Player/PickupHandler.cs b/_ActiveRagdoll/Player/PickupHandler.cs new file mode 100644 index 0000000..6a3a249 --- /dev/null +++ b/_ActiveRagdoll/Player/PickupHandler.cs @@ -0,0 +1,64 @@ +using UnityEngine; + +//Player PickupHandler 捡武器 +public class PickupHandler : MonoBehaviour +{ + public Pickup setWeapon; + + public Pickup setWeapon2; + + private WeaponHandler weaponHandler; + + private Holding holding; // holding动作 + + private float counter; + + private void Start() + { + weaponHandler = GetComponent<WeaponHandler>(); + holding = GetComponent<Holding>(); + if ((bool)setWeapon) + { + PickUp(setWeapon); + } + if ((bool)setWeapon2) + { + PickUp2(setWeapon2); + } + } + + private void Update() + { + counter += Time.deltaTime; + } + + public void PickUp(Pickup objectToPickUp) + { + if (!(counter < 1f)) + { + counter = 0f; + holding.Drop(); + Weapon component = objectToPickUp.GetComponent<Weapon>(); + Gun component2 = component.GetComponent<Gun>(); + weaponHandler.SetGun(component2, mainHand: true); + bool hasOffHand = false; + if ((bool)setWeapon2) + { + hasOffHand = true; + } + HoldableObject component3 = component.GetComponent<HoldableObject>(); + component3.holder = base.transform; + holding.StartHolding(component3, hasOffHand); + } + } + + public void PickUp2(Pickup objectToPickUp) + { + Weapon component = objectToPickUp.GetComponent<Weapon>(); + Gun component2 = component.GetComponent<Gun>(); + weaponHandler.SetGun(component2, mainHand: false); + HoldableObject component3 = component.GetComponent<HoldableObject>(); + component3.holder = base.transform; + holding.StartHolding(component3, hasOffHand: true); + } +} |