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(); death = GetComponent(); standingData = GetComponent(); inputHandler = GetComponent(); animationHandler = GetComponent(); allRigs = GetComponent(); data = GetComponent(); } 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; } } }