diff options
author | chai <215380520@qq.com> | 2023-10-27 11:05:14 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2023-10-27 11:05:14 +0800 |
commit | 766cdff5ffa72b65d7f106658d1603f47739b2ba (patch) | |
tree | 34d7799a94dfa9be182825577583c0fa6dc935f7 /GameCode/Movement.cs |
+ init
Diffstat (limited to 'GameCode/Movement.cs')
-rw-r--r-- | GameCode/Movement.cs | 137 |
1 files changed, 137 insertions, 0 deletions
diff --git a/GameCode/Movement.cs b/GameCode/Movement.cs new file mode 100644 index 0000000..17d7b11 --- /dev/null +++ b/GameCode/Movement.cs @@ -0,0 +1,137 @@ +using UnityEngine; + +public class Movement : MonoBehaviour +{ + public float jumpForce; + + public float force; + + public float torque; + + public float drag = 1f; + + public float Angulardrag = 1f; + + public ParticleSystem[] jumpPart; + + private GeneralInput input; + + private Rigidbody2D rig; + + private CharacterData data; + + private CharacterStatModifiers stats; + + public Vector2 knockBack; + + private HealthHandler health; + + private Vector3 moveDir; + + private Vector3 idleForce; + + private void Start() + { + rig = GetComponent<Rigidbody2D>(); + input = GetComponent<GeneralInput>(); + data = GetComponent<CharacterData>(); + stats = GetComponent<CharacterStatModifiers>(); + health = GetComponent<HealthHandler>(); + } + + private void FixedUpdate() + { + if (input.direction != Vector3.zero) + { + moveDir = input.direction; + idleForce = Vector3.Lerp(idleForce, moveDir, Time.fixedDeltaTime * 6f); + } + else if (data.isGrounded || data.isWallGrab) + { + idleForce = Vector3.Lerp(idleForce, Vector3.zero, 15f * Time.fixedDeltaTime); + } + else + { + idleForce = Vector3.Lerp(idleForce, Vector3.zero, 3f * Time.fixedDeltaTime); + } + if (input.direction == Vector3.zero) + { + moveDir = idleForce; + } + if (data.isGrounded || data.isWallGrab) + { + knockBack = Vector3.Lerp(knockBack, Vector3.zero, 10f * Time.fixedDeltaTime); + } + else + { + knockBack = Vector3.Lerp(knockBack, Vector3.zero, 7f * Time.fixedDeltaTime); + } + rig.AddForce(knockBack * 0.1f * rig.mass, ForceMode2D.Force); + if (moveDir.y > 0f) + { + moveDir.y = 0f; + } + rig.AddForce(-rig.velocity * 0.01f * drag * rig.mass, ForceMode2D.Force); + rig.AddTorque((0f - rig.angularVelocity) * 0.01f * Angulardrag * rig.mass, ForceMode2D.Force); + if (input.jumpIsPressed) + { + rig.AddForce(Vector2.up * 20f * rig.mass, ForceMode2D.Force); + } + rig.AddForce(moveDir * force * (1f - stats.GetSlow()) * rig.mass, ForceMode2D.Force); + } + + private void Update() + { + if (input.jumpWasPressed) + { + Jump(); + } + if (data.isGrounded && data.sinceJump > 0.2f) + { + data.currentJumps = data.jumps; + } + } + + private void Jump() + { + if (data.sinceJump < 0.15f) + { + return; + } + Vector3 vector = Vector3.up; + Vector3 vector2 = data.groundPos; + if (data.sinceGrounded < 0.1f) + { + if (data.sinceGrounded > 0.05f) + { + vector2 = base.transform.position; + } + data.currentJumps = data.jumps; + } + else if (data.sinceWallGrab < 0.1f) + { + vector = Vector2.up + data.wallNormal; + vector2 = data.wallPos; + data.currentJumps = data.jumps; + } + else + { + if (data.currentJumps <= 0) + { + return; + } + vector2 = base.transform.position; + } + data.currentJumps--; + rig.velocity = new Vector3(rig.velocity.x, 0f); + health.TakeForce(Vector2.up * jumpForce * 1f * (1f - stats.GetSlow()) * rig.mass); + data.sinceJump = 0f; + data.sinceGrounded = 0f; + for (int i = 0; i < jumpPart.Length; i++) + { + jumpPart[i].transform.position = new Vector3(vector2.x, vector2.y, 5f) - vector * 0f; + jumpPart[i].transform.rotation = Quaternion.LookRotation(rig.velocity); + jumpPart[i].Play(); + } + } +} |