using Unity.VisualScripting.FullSerializer;
using UnityEditor.Experimental.GraphView;
using UnityEngine;

/// <summary>
/// Playermovement.
/// </summary>
public class PlayerController : MonoBehaviour 
{
    [SerializeField] public float speed;
    [SerializeField] public float acceleration;
    [SerializeField] public float jumpPower;

    private Rigidbody2D body;
    private bool isGround = true;

    private Animator jumpAnim;

    void Start()
    {
        body = this.GetComponent<Rigidbody2D>();
        jumpAnim = this.GetComponent<Animator>();
    }

    private void Update()
    {
        // run logic auto
        speed += acceleration * Time.deltaTime;
        transform.Translate(new Vector2(1f,0f) * speed * Time.deltaTime);

        // jump logic + jump animation
        if (Input.GetKey(KeyCode.W) && isGround)
        {
            Jump();
            jumpAnim.SetBool("jump", true);
            isGround = false;
        }
    }

    // jump method logic + jump animation
    void Jump()
    {
        Vector2 velocity = body.velocity;
        velocity.y = jumpPower;
        body.velocity = velocity;
    }

    private void OnCollisionEnter2D(Collision2D other)
    {
        if (other.collider.tag == "Ground")
        {
            isGround = true;
            jumpAnim.SetBool("jump", false);
        }
    }

    // ground trigger
    void OnTriggerEnter2D(Collider2D other)
    {
        if (other.gameObject.tag == "Ground")
        {
            FindObjectOfType<GroundSpawner>().SpawnGround();
        }
    }
}