/**********************************************************************************/ // функция получения урона // /**********************************************************************************/ 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(); } } }
/**********************************************************************************/ // функция нанесения урона юниту // /**********************************************************************************/ 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(); } } }