using UnityEngine;

namespace Shooter.Gameplay
{
    /// <summary>
    /// Особые способности игрока («power»), например брошенная граната. Способность
    /// бывает двух видов: ограниченная по времени (<see cref="m_HasTimer"/> = true)
    /// или по числу зарядов (<see cref="m_AmmoCount"/>). Когда время или заряды
    /// кончаются, способность автоматически снимается.
    /// </summary>
    public class PlayerPowers : MonoBehaviour
    {
        [HideInInspector] public bool m_HavePower = false; // есть ли активная способность
        [HideInInspector] public int m_PowerNum = 0;       // номер способности (-1 — нет)
        [HideInInspector] public bool m_HasTimer = false;  // ограничена временем (true) или зарядами (false)
        [HideInInspector] public float m_Timer = 0;        // остаток времени, сек
        [HideInInspector] public int m_AmmoCount = 0;      // остаток зарядов

        void Start()
        {
            m_PowerNum = -1;
            m_HavePower = false;
        }

        void Update()
        {
            if (!m_HavePower)
                return;

            // Способность снимается, когда вышло время или кончились заряды.
            if (m_HasTimer)
            {
                m_Timer -= Time.deltaTime;
                if (m_Timer <= 0)
                    ClearPower();
            }
            else if (m_AmmoCount <= 0)
            {
                ClearPower();
            }
        }

        /// <summary>Выдаёт игроку способность по номеру.</summary>
        public void SetNewPower(int num)
        {
            m_HavePower = true;
            switch (num)
            {
                case 0: // граната: 3 заряда, без таймера
                    m_HasTimer = false;
                    m_AmmoCount = 3;
                    m_PowerNum = 0;
                    break;
            }
        }

        /// <summary>Снимает текущую способность.</summary>
        void ClearPower()
        {
            m_HavePower = false;
            m_PowerNum = -1;
        }
    }
}
