using System;
using Unity.AI.Navigation;
using UnityEngine;
using UnityEngine.AI;
namespace AI.CamGirl
{
[RequireComponent(typeof(NavMeshAgent))]
[RequireComponent(typeof(Animator))]
public class CamGirlLocomotion : MonoBehaviour
{
[SerializeField] private float _wanderRadius = 5f;
private NavMeshAgent _navMeshAgent;
private Animator _animator;
private bool _isWandering;
private static readonly int WalkSpeed = Animator.StringToHash("WalkSpeed");
public event Action<Vector3> OnWalk;
public event Action<Vector3> OnRun;
private void Awake()
{
_navMeshAgent = GetComponent<NavMeshAgent>();
_animator = GetComponent<Animator>();
}
private void Update()
{
Debug.DrawLine(transform.position, _navMeshAgent.destination);
HandleDestinationFromClick();
}
private void LateUpdate()
{
float speed = _navMeshAgent.velocity.magnitude;
_animator.SetFloat(WalkSpeed, speed);
}
public void Walk(Vector3 destination)
{
_navMeshAgent.destination = destination;
OnWalk?.Invoke(destination);
}
public void Run(Vector3 destination)
{
_navMeshAgent.destination = destination;
OnRun?.Invoke(destination);
}
private void HandleDestinationFromClick()
{
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out RaycastHit hitInfo, Mathf.Infinity) &&
hitInfo.collider.TryGetComponent(out NavMeshSurface navMesh))
{
_navMeshAgent.destination = hitInfo.point;
}
}
}
}
}