using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; public class PlayerMovement : MonoBehaviour { private Rigidbody2D rb; private SpriteRenderer SR; private Transform Gr; private Animator Ani; private Collider2D C2D; private Inputs Input; private InputAction Walk; private InputAction Jump; private InputAction Dash; private Vector2 Force; private ParticleSystem Fart; private float x; private int usedash; public float drag; public LayerMask GroundLayer; public Vector2 dashvec; public int dashes; public float Speed; public float JumpPwr; private void Awake() { Input = new Inputs(); rb = this.gameObject.GetComponent(); Gr = this.gameObject.transform.Find("GroundCheck").transform; Ani = this.gameObject.GetComponent(); SR = this.gameObject.GetComponent(); C2D = this.gameObject.GetComponent(); Fart = this.gameObject.transform.Find("Fart").GetComponent(); } private void OnEnable() { Walk = Input.Movement.wasd; Jump = Input.Movement.Jump; Dash = Input.Movement.Dash; Walk.Enable(); Jump.Enable(); Dash.Enable(); } private void OnDisable() { Walk.Disable(); Jump.Disable(); Dash.Disable(); } private void Update() { Jump.performed += _ => jump(); Dash.performed += _ => dash(); Force = Walk.ReadValue(); if(Force.x < 0) { if(x > 0) { x = -x; } SR.flipX = true; Fart.transform.localPosition = new Vector3(2.14f, 1.5f, 0); Fart.transform.localRotation = Quaternion.Euler(new Vector3(30, 90, 0)); Ani.SetBool("Running", true); C2D.offset = new Vector2(1.125f, 2.5f); } else if(Force.x > 0) { if(x < 0) { x = -x; } SR.flipX = false; Fart.transform.localPosition = new Vector3(-2.14f, 1.5f, 0); Fart.transform.localRotation = Quaternion.Euler(new Vector3(30, -90, 0)); Ani.SetBool("Running", true); C2D.offset = new Vector2(-1.125f, 2.5f); } else { Ani.SetBool("Running", false); } if(rb.velocity.y < 0 && !IsGrounded()) { Ani.SetBool("Falling", true); } else { Ani.SetBool("Falling", false); } if(IsGrounded()) { Ani.SetBool("Dash", false); usedash = dashes; } } private void FixedUpdate() { rb.velocity = new Vector2(x + Force.x*Speed, rb.velocity.y); if(x > -0.01 && x < 0.01 || IsGrounded()) { x=0; } else { x = Mathf.Lerp(x, 0, Time.deltaTime * drag); } } private bool IsGrounded() { return Physics2D.OverlapBox(Gr.position, new Vector2(6, 1), 0f, GroundLayer); } private void jump() { if(IsGrounded()) { rb.velocity = new Vector2(rb.velocity.x, JumpPwr); Ani.SetBool("Jump", true); } } private void dash() { if(!IsGrounded() && !Fart.isPlaying && usedash !=0) { float e = 0; if(SR.flipX) { e = -1; } else { e = 1; } rb.velocity = new Vector2(rb.velocity.x, rb.velocity.y + dashvec.y); x += dashvec.x * e; Fart.Play(); Ani.SetBool("Dash", true); Ani.SetBool("Jump", false); usedash--; } } }