summaryrefslogtreecommitdiff
path: root/_ActiveRagdoll/AnimationObject.cs
diff options
context:
space:
mode:
Diffstat (limited to '_ActiveRagdoll/AnimationObject.cs')
-rw-r--r--_ActiveRagdoll/AnimationObject.cs140
1 files changed, 140 insertions, 0 deletions
diff --git a/_ActiveRagdoll/AnimationObject.cs b/_ActiveRagdoll/AnimationObject.cs
new file mode 100644
index 0000000..0c2d636
--- /dev/null
+++ b/_ActiveRagdoll/AnimationObject.cs
@@ -0,0 +1,140 @@
+using UnityEngine;
+using UnityEngine.Events;
+
+public class AnimationObject : MonoBehaviour
+{
+ public PhysicsAnimation[] animations;
+
+ private Rigidbody rig;
+
+ private StepHandler stepHandler;
+
+ private Transform hip;
+
+ public float smoothing;
+
+ public float multiplier = 1f;
+
+ private bool isCurrentlyLeft;
+
+ public bool isLeft;
+
+ public UnityEvent switchToForwardEvent;
+
+ public UnityEvent switchToBackwardsEvent;
+
+ public bool dontAnimateIfHoldingSomething;
+
+ private Holding holding;
+
+ private AnimationHandler animationHandler;
+
+ private PlayerDeath death;
+
+ private float muscleMultiplier = 1f;
+
+ private void Start()
+ {
+ animationHandler = base.transform.root.GetComponent<AnimationHandler>();
+ rig = GetComponent<Rigidbody>();
+ stepHandler = base.transform.root.GetComponent<StepHandler>();
+ holding = base.transform.root.GetComponent<Holding>();
+ death = base.transform.root.GetComponent<PlayerDeath>();
+ Hip componentInChildren = base.transform.root.GetComponentInChildren<Hip>();
+ if ((bool)componentInChildren)
+ {
+ hip = componentInChildren.transform;
+ }
+ }
+
+ private void FixedUpdate()
+ {
+ if ((bool)death)
+ {
+ if (death.muscleFunction < 0f)
+ {
+ return;
+ }
+ muscleMultiplier = death.muscleFunction;
+ }
+ if ((!holding || !dontAnimateIfHoldingSomething || !holding.heldObject) && animationHandler.animationState < animations.Length)
+ {
+ SetMultiplier();
+ AddTorque();
+ AddForce();
+ }
+ }
+
+ private void AddForce()
+ {
+ Vector3 vector = Vector3.zero;
+ if (isCurrentlyLeft == isLeft)
+ {
+ Vector3 forwardForce = animations[animationHandler.animationState].forwardForce;
+ if (animations[animationHandler.animationState].forceSpace == PhysicsAnimation.ForceSpace.World)
+ {
+ vector = forwardForce;
+ }
+ if (animations[animationHandler.animationState].forceSpace == PhysicsAnimation.ForceSpace.Hip)
+ {
+ vector = hip.TransformDirection(forwardForce);
+ }
+ }
+ else
+ {
+ Vector3 backwardsForce = animations[animationHandler.animationState].backwardsForce;
+ if (animations[animationHandler.animationState].forceSpace == PhysicsAnimation.ForceSpace.World)
+ {
+ vector = backwardsForce;
+ }
+ if (animations[animationHandler.animationState].forceSpace == PhysicsAnimation.ForceSpace.Hip)
+ {
+ vector = hip.TransformDirection(backwardsForce);
+ }
+ }
+ rig.AddForce(vector * muscleMultiplier * multiplier, ForceMode.Acceleration);
+ }
+
+ private void AddTorque()
+ {
+ Vector3 vector = ((isCurrentlyLeft != isLeft) ? hip.TransformDirection(animations[animationHandler.animationState].backwardsTorque) : hip.TransformDirection(animations[animationHandler.animationState].forwardTorque));
+ rig.AddTorque(vector * muscleMultiplier * multiplier, ForceMode.Acceleration);
+ }
+
+ private void SetMultiplier()
+ {
+ if (smoothing != 0f)
+ {
+ float b = 1f;
+ if (isCurrentlyLeft != stepHandler.isLeft)
+ {
+ b = 0f;
+ }
+ multiplier = Mathf.Lerp(multiplier, b, 1f / smoothing);
+ if (multiplier < 0.1f)
+ {
+ ChangeStep();
+ }
+ }
+ else
+ {
+ ChangeStep();
+ }
+ }
+
+ private void ChangeStep()
+ {
+ if (isCurrentlyLeft != stepHandler.isLeft)
+ {
+ if (stepHandler.isLeft == isLeft)
+ {
+ switchToForwardEvent.Invoke();
+ }
+ else
+ {
+ switchToBackwardsEvent.Invoke();
+ }
+ isCurrentlyLeft = stepHandler.isLeft;
+ }
+ }
+}