using Rigging.Data; using Rigging.Inputs; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Rigging.Action { public class Movement : RiggingActionBase { private InputHandler inputHandler; public float friction = 0.9f; public Vector3 movementVector; public AnimationParam forceAmounts; private RigidbodyHolder allRigs; public AnimationCurve jumpCurve; public float jumpForce; private StandingDataHandler standingData; private MovementDataHandler data; [HideInInspector, NonSerialized] public float multiplier = 1f; protected override void OnStart() { forceAmounts.SetPlayer(player); standingData = player.status.standingData; inputHandler = player.input; allRigs = player.status.body; data = player.status.movementData; } private void FixedUpdate() { data.sinceJump += Time.fixedDeltaTime; movementVector += inputHandler.inputMovementDirection * forceAmounts.current; movementVector *= friction; allRigs.AddForceToAll(movementVector * multiplier, ForceMode.Acceleration); } public void Jump() { if (!(data.sinceJump < 0.5f) && !(standingData.sinceGrounded > 0.3f)) { data.sinceJump = 0f; StartCoroutine(AddJumpForce()); } } private IEnumerator AddJumpForce() { float counter = 0f; allRigs.ModifyVelocityForEach((_rig) => { return new Vector3(_rig.velocity.x, 0f, _rig.velocity.z); }); while (counter < jumpCurve.keys[jumpCurve.length - 1].time) { counter += Time.deltaTime; allRigs.AddForceToAll(Vector3.up * multiplier * jumpForce * jumpCurve.Evaluate(counter) * Time.deltaTime, ForceMode.Acceleration); yield return null; } } } }