Example #1
0
    void SetOutputDamage(ref OutDamageInfo dmg)
    {
        OnPreTakenDamage(ref dmg);
        bool isCallEvent = false;
        var  prev        = m_Armor;
        bool res         = AddTo(ref m_Armor, -dmg.DmgToArmor);

        isCallEvent = res;
        if (res)
        {
            ArmorEventStack(prev);
        }
        prev = m_Health;
        res  = AddTo(ref m_Health, -dmg.DmgToHealth);
        if (res)
        {
            InnerBeforeChangeHealth();
            HealthEventCall(prev);
        }
        isCallEvent = isCallEvent || res;
        if (isCallEvent)
        {
            CallChangeEvent();
        }
        OnAfterTakenDamage(ref dmg);
        OnCheckedDeathOrResurrect();
    }
Example #2
0
    void GetOutDamageInfo(ref IncomeDamageInfo inDmg, out OutDamageInfo outDmg)
    {
        float curArmor      = CurrentArmor;
        float curHp         = CurrentHealth;
        float armorReceiver = 0f;
        float hpReceiver    = 0f;
        float receiver      = 0f;//реально полученный общий урон

        if (inDmg.Kill)
        {
            float fullArmor = inDmg.IgnoreArmor ? 0f : curArmor;
            receiver      = curHp + fullArmor;
            inDmg.Damage  = receiver;
            armorReceiver = fullArmor;
            hpReceiver    = curHp;
        }
        else
        {
            float dmg        = inDmg.Damage; //Заменить на ReceivedDamage
            float deltaHpDmg = dmg;          //урон котоырй пойдет, когда кончится броня
            float realDmg;                   //реальный урон для текущего типа(броня/хп)
            if (!inDmg.IgnoreArmor)
            {
                if (curArmor > 0f)
                {
                    realDmg       = (dmg > curArmor ? curArmor : dmg);
                    receiver     += realDmg;
                    deltaHpDmg    = dmg - realDmg;
                    armorReceiver = realDmg;
                }
            }
            if (deltaHpDmg > 0f)
            {
                realDmg    = (deltaHpDmg > curHp ? curHp : deltaHpDmg);
                hpReceiver = realDmg;
                receiver  += realDmg;
            }
        }
        outDmg             = new OutDamageInfo();
        outDmg.ReceiverDmg = receiver;
        outDmg.SetSpecificDamage(armorReceiver, hpReceiver);
    }
Example #3
0
 void OnAfterTakenDamage(ref OutDamageInfo outInfo)
 {
     AfterTakenDamage(this, dmgArgs);
     //UnitStaticEvents.GlobalTakenDamage(this, dmgArgs);//Костыль
 }