using UnityEngine;

public class Controller : MonoBehaviour
{
    public Rigidbody rb;
    public float movementForce = 10f;
    public float jukeForce = 20f;
    public float maxSpeed = 5f;

    void Start()
    {
        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        Vector2 input = GetInputs();
        ApplyMovement(input);
        Juke(GetJukeDirection());
    }

    void ApplyMovement(Vector2 input)
    {
        Vector3 force = new Vector3(input.x, 0, input.y) * movementForce;

        float projectedSpeed = rb.velocity.magnitude + force.magnitude / rb.mass;

        // Scale force if needed to prevent exceeding maxSpeed
        if (projectedSpeed < maxSpeed)
        {
            rb.AddForce(force, ForceMode.Force);
        }
        else
        {
            float scale = (maxSpeed - rb.velocity.magnitude) / (force.magnitude / rb.mass);
            rb.AddForce(force * scale, ForceMode.Force);
        }
    }

    void Juke(Vector3 direction)
    {
        rb.AddForce(direction * jukeForce, ForceMode.Impulse);
    }

    Vector2 GetInputs()
    {
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        return new Vector2(horizontal, vertical);
    }