using System.Collections;
using UnityEngine;

namespace Shooter.Gameplay
{
    /// <summary>
    /// Простое движение снаряда: летит вперёд с постоянной скоростью, может плавно
    /// доворачивать (m_TurnSpeed) и при появлении «раздувается» от нуля до полного
    /// размера. Урон считают отдельные компоненты (<see cref="Projectile_Base"/> или
    /// <see cref="ProjectileCollision"/>).
    /// </summary>
    public class ProjectileMovement : MonoBehaviour
    {
        [Tooltip("Скорость полёта")]
        public float m_Speed = 50;
        [Tooltip("Скорость поворота, град/сек (0 — летит строго прямо)")]
        public float m_TurnSpeed = 0;
        [Tooltip("Скорость появления (раздувание масштаба за секунду)")]
        public float m_GrowSpeed = 5f;

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

        void Update()
        {
            if (m_TurnSpeed != 0)
                transform.forward = Quaternion.Euler(0, Time.deltaTime * m_TurnSpeed, 0) * transform.forward;

            transform.position += m_Speed * Time.deltaTime * transform.forward;
        }

        /// <summary>Плавно раздувает снаряд от нуля до полного размера при появлении.</summary>
        IEnumerator Co_InitGrow()
        {
            float lerp = 0;
            while (lerp < 1)
            {
                transform.localScale = lerp * Vector3.one;
                lerp += m_GrowSpeed * Time.deltaTime;
                yield return null;
            }

            transform.localScale = Vector3.one;
        }
    }
}
