/*
Author: Wai Lam
Date: 6/2/25
Description: UI to follow camera with a slight delay
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Followplayercam : MonoBehaviour
{

    public Transform target; // Usually the Main Camera (XR Rig's Head)


    public float followSpeed = 5f; // How quickly it follows the target
    public Vector3 offset = new Vector3(0, -0.2f, 1.5f); // Position offset
    public bool followRotation = true; // Toggle for rotating with the head

    public float maxPitchAngle = 30f; // Limits how much the panel tilts up/down

    private void LateUpdate()
    {
        if (target == null) return;

        // Smooth Position Follow
        Vector3 desiredPosition = target.position + target.TransformDirection(offset);
        transform.position = Vector3.Lerp(transform.position, desiredPosition, Time.deltaTime * followSpeed);

        // Smooth Rotation Follow (Yaw + Pitch)
        if (followRotation)
        {
            // Capture target's full rotation
            Vector3 targetEulerAngles = target.eulerAngles;

            // Handle Pitch (X-axis) - Clamp to avoid extreme tilting
            float pitch = targetEulerAngles.x;
            if (pitch > 180) pitch -= 360; // Convert to -180 to 180 range
            pitch = Mathf.Clamp(pitch, -maxPitchAngle, maxPitchAngle);

            // Apply Yaw (Y-axis) and Pitch (X-axis), keep Roll (Z-axis) at 0
            Quaternion desiredRotation = Quaternion.Euler(pitch, targetEulerAngles.y, 0);
            transform.rotation = Quaternion.Slerp(transform.rotation, desiredRotation, Time.deltaTime * followSpeed);
        }
    }
}