using System.Collections;
using System.Collections.Generic;
using Cinemachine.Utility;
using UnityEngine;

public class PlayerMoveOnSphere : MonoBehaviour
{
    public SphereCollider Sphere;

    public float speed = 5;
    public bool rotatePlayer = true;
    public float rotationDamping = 0.5f;

    // Update is called once per frame
    void Update()
    {
        Vector3 input = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
        if (input.magnitude > 0)
        {
            input = Camera.main.transform.rotation * input;
            if (input.magnitude > 0.001f)
            {
                transform.position += input * (speed * Time.deltaTime);
                if (rotatePlayer)
                {
                    float t = Cinemachine.Utility.Damper.Damp(1, rotationDamping, Time.deltaTime);
                    Quaternion newRotation = Quaternion.LookRotation(input.normalized, transform.up);
                    transform.rotation = Quaternion.Slerp(transform.rotation, newRotation, t);
                }
            }
        }

        // Stick to sphere surface
        if (Sphere != null)
        {
            var up = transform.position - Sphere.transform.position;
            up = up.normalized;
            var fwd = transform.forward.ProjectOntoPlane(up);
            transform.position = Sphere.transform.position + up * (Sphere.radius + transform.localScale.y / 2);
            transform.rotation = Quaternion.LookRotation(fwd, up);
        }
    }
}