using System.Collections;
using UnityEngine;

namespace Shooter.Gameplay
{
    /// <summary>
    /// Граната игрока: летит по дуге от точки броска к цели примерно за секунду, затем
    /// взрывается (тряска камеры + эффект взрыва). Высоту дуги задаёт кривая
    /// <see cref="m_MoveCurve"/>.
    /// </summary>
    public class PlayerGrenade : MonoBehaviour
    {
        [Tooltip("Профиль высоты дуги: Y в зависимости от времени полёта (0..1)")]
        public AnimationCurve m_MoveCurve;
        public GameObject m_ExplodeParticle;

        [HideInInspector] public Vector3 m_StartPosition;
        [HideInInspector] public Vector3 m_TargetPosition;

        void Start()
        {
            StartCoroutine(Co_Move());
        }

        /// <summary>Летит по дуге от старта к цели за ~1 секунду, затем взрывается.</summary>
        IEnumerator Co_Move()
        {
            float lerp = 0;
            while (lerp < 1)
            {
                transform.position = Vector3.Lerp(m_StartPosition, m_TargetPosition, lerp);
                transform.position += new Vector3(0, m_MoveCurve.Evaluate(lerp), 0);
                lerp += Time.deltaTime;
                yield return null;
            }

            transform.position = m_TargetPosition;

            // Взрыв.
            CameraControl.m_Current.StartShake(.3f, .15f);
            GameObject obj = Instantiate(m_ExplodeParticle);
            obj.transform.position = transform.position;
            Destroy(obj, 3);
            Destroy(gameObject);
        }
    }
}
