Exemplo n.º 1
0
    /**********************************************************************************/
    // функция получения урона
    //
    /**********************************************************************************/
    override public void ApplyDamage(DamageData damage)
    {
        if (m_isActive)
        {
            ShieldController.SHIELD_STATE shiledState = m_shieldCtr.State;

            // аварийный щит поглощает весь урон в течении короткого времени
            if (shiledState == ShieldController.SHIELD_STATE.EMERGENCY_ACTIVE)
            {
                // игнорируем урон
            }
            else
            {
                int damageToLose = damage.Damage;
                int shieldToLose = damage.Damage;

                // пробуем защитится щитом
                if (shiledState == ShieldController.SHIELD_STATE.ACTIVE)
                {
                    damageToLose  = m_shieldCtr.TakeDamage(damageToLose);
                    shieldToLose -= damageToLose;   // разница - кол-во потерянных очков прочности щита

                    // обновляем UI
                    UIController.GetInstance().LosePlayerShield((int)playerId, shieldToLose);
                }

                // если удалось погасить урон щитом - выходим
                if (damageToLose == 0)
                {
                    return;
                }

                // объект получает урон
                Health -= damageToLose;

                // сообщаем UI о потере здоровья
                UIController.GetInstance().LosePlayerHealth((int)playerId, damageToLose);

                if (Health <= 0)
                {
                    m_animator.SetTrigger("isLose");
                    m_isActive = false;

                    TargetController.GetInstance().TargetIsDead(gameObject);
                }

                // включаем щит
                m_shieldCtr.ActivateEmergencyShield();
            }
        }
    }
Exemplo n.º 2
0
    /**********************************************************************************/
    // функция нанесения урона юниту
    //
    /**********************************************************************************/
    public override void TakeDamage(DamageData damage)
    {
        ShieldController.SHIELD_STATE shiledState = m_shieldCtr.State;

        // аварийный щит поглощает весь урон в течении короткого времени
        if (shiledState == ShieldController.SHIELD_STATE.EMERGENCY_ACTIVE)
        {
            // игнорируем урон
            return;
        }
        else
        {
            int damageToLose = damage.Damage;
            int shieldToLose = damage.Damage;

            // пробуем защитится щитом
            if (shiledState == ShieldController.SHIELD_STATE.ACTIVE)
            {
                damageToLose  = m_shieldCtr.TakeDamage(damageToLose);
                shieldToLose -= damageToLose;   // разница - кол-во потерянных очков прочности щита
            }

            // если удалось погасить урон щитом - выходим
            if (damageToLose == 0)
            {
                return;
            }

            damage.Damage = damageToLose;
            base.TakeDamage(damage);

            // включаем щит (если ещё живы)
            if (m_unitHP > 0)
            {
                m_shieldCtr.ActivateEmergencyShield();
            }
        }
    }