using UnityEngine;

[System.Serializable]
public class PlayerMovement : MonoBehaviour
{
    private Rigidbody rb;
    public int speed = 1;
    private float sneak;
    private float sprint;
    public float jumpHeight = 3f;
    public float gravityScale = 5f;
    private Camera mainCamera;

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

    private void Start()
    {
        mainCamera = Camera.main;
        // 添加自定义的Player控制的方式,可能需要更改控制代码
    }

    private void Update()
    {
        if (Input.GetKey(KeyCode.W))
        {
            rb.AddForce(transform.forward * speed * sneak);
        }
        else if (Input.GetKey(KeyCode.S))
        {
            rb.AddForce(-transform.forward * speed * sneak);
        }
        else if (Input.GetKey(KeyCode.A))
        {
            rb.AddForce(-transform.right * speed * sneak);
        }
        else if (Input.GetKey(KeyCode.D))
        {
            rb.AddForce(transform.right * speed * sneak);
        }
        else
        {
            rb.velocity = new Vector3(0, rb.velocity.y, 0);
        }

        if (Input.GetKey(KeyCode.LeftCtrl))
        {
            sneak = 0.5f;
        }
        else
        {
            sneak = 1f;
        }

        if (Input.GetKey(KeyCode.LeftShift))
        {
            sprint = 2f;
        }
        else
        {
            sprint = 1f;
        }

        float jumpForce = Mathf.Sqrt(jumpHeight * -3 * (Physics.gravity.y * gravityScale));
        if (Input.GetKeyDown(KeyCode.Space) && IsGrounded())
        {
            rb.AddForce(Vector2.up * jumpForce, ForceMode.Impulse);
        }

        // 使摄像机跟随着玩家
        transform.position = mainCamera.transform.position - mainCamera.transform.forward * 5;
        transform.rotation = Quaternion.LookRotation(mainCamera.transform.forward, Vector3.up);
    }

    private void FixedUpdate()
    {
        rb.AddForce(Physics.gravity * (gravityScale - 1) * rb.mass, ForceMode.Acceleration);
    }

    private bool IsGrounded()
    {
        return Physics.Raycast(transform.position, Vector3.down, 1.1f);
    }
}