Пример #1
0
    public bool RemoveBuff(ActionUnit unit)
    {
        if (Buff.ActualStat == null)
        {
            return(false);
        }
        Debug.Log("Remove Buff " + unit.Group + "/" + Buff.Effect + "/" + Buff.ActualStat + "/" + Buff.Percent);
        float          amount   = 0;
        ActionUnitData baseStat = (ActionUnitData)unit.tileUnitData;

        switch (Buff.ActualStat)
        {
        case StatAffect.Health:
            amount = (Buff.Effect == EffectType.Increase ? 1 : -1) * baseStat.baseHealth * Buff.Percent / 100;
            unit.OriginStatus.baseHealth -= amount;
            if (Buff.Effect == EffectType.Increase)
            {
                if (unit.CurrentStatus.baseHealth > 0)
                {
                    unit.CurrentStatus.baseHealth =
                        ((unit.CurrentStatus.baseHealth - amount) <= 0) ?
                        1 :
                        (unit.CurrentStatus.baseHealth - amount);
                }
            }
            else
            {
                if (unit.CurrentStatus.baseHealth < unit.OriginStatus.baseHealth)
                {
                    unit.CurrentStatus.baseHealth =
                        ((unit.CurrentStatus.baseHealth - amount) > unit.OriginStatus.baseHealth) ?
                        unit.OriginStatus.baseHealth :
                        (unit.CurrentStatus.baseHealth - amount);
                }
            }
            break;

        case StatAffect.Damage:
            amount = (Buff.Effect == EffectType.Increase ? 1 : -1) * baseStat.baseAttack * Buff.Percent / 100;
            unit.OriginStatus.baseAttack  -= amount;
            unit.CurrentStatus.baseAttack -= amount;
            break;

        case StatAffect.AtkRate:
            amount = (Buff.Effect == EffectType.Increase ? -1 : 1) * baseStat.baseAttackRate * Buff.Percent / 100;
            unit.OriginStatus.baseAttackRate  -= amount;
            unit.CurrentStatus.baseAttackRate -= amount;
            break;

        default:
            break;
        }
        AffectUnit.Remove(unit);
        return(true);
    }
Пример #2
0
    public bool ApplyBuff(ActionUnit unit)
    {
        //this method usually cann by Action Unit to self buff
        // if (AffectUnit.Count > 0) return false;
        Buff.ActualStat = Buff.Stat;
        if (Buff.Stat == StatAffect.Random)
        {
            Buff.ActualStat = RandomStatAffect();
        }
        // if (Buff.Target != TargetType.Custom)
        // {
        //     if (Game.Instance.RoundManager.Round.RoundNumber < 5)
        //     {
        //         Buff.Percent = 20 - 2 * Game.Instance.RoundManager.Round.RoundNumber;
        //     }
        //     else
        //     {
        //         Buff.Percent = 2 * (Game.Instance.RoundManager.Round.RoundNumber - 5);
        //     }
        // }
        Debug.Log("Apply Buff " + unit.Group + "/" + Buff.Effect + "/" + Buff.ActualStat + "/" + Buff.Percent);
        float          amount   = 0;
        ActionUnitData baseStat = (ActionUnitData)unit.tileUnitData;

        switch (Buff.ActualStat)
        {
        case StatAffect.Health:
            amount = (Buff.Effect == EffectType.Increase ? 1 : -1) * baseStat.baseHealth * Buff.Percent / 100;
            unit.OriginStatus.baseHealth += amount;
            if (Buff.Effect == EffectType.Increase)
            {
                if (unit.CurrentStatus.baseHealth < unit.OriginStatus.baseHealth)
                {
                    unit.CurrentStatus.baseHealth =
                        ((unit.CurrentStatus.baseHealth + amount) > unit.OriginStatus.baseHealth) ?
                        unit.OriginStatus.baseHealth :
                        (unit.CurrentStatus.baseHealth + amount);
                }
            }
            else
            {
                if (unit.CurrentStatus.baseHealth > 0)
                {
                    unit.CurrentStatus.baseHealth =
                        ((unit.CurrentStatus.baseHealth + amount) <= 0) ?
                        1 :
                        (unit.CurrentStatus.baseHealth + amount);
                }
            }
            break;

        case StatAffect.Damage:
            amount = (Buff.Effect == EffectType.Increase ? 1 : -1) * baseStat.baseAttack * Buff.Percent / 100;
            unit.OriginStatus.baseAttack  += amount;
            unit.CurrentStatus.baseAttack += amount;
            break;

        case StatAffect.AtkRate:
            amount = (Buff.Effect == EffectType.Increase ? -1 : 1) * baseStat.baseAttackRate * Buff.Percent / 100;
            unit.OriginStatus.baseAttackRate  += amount;
            unit.CurrentStatus.baseAttackRate += amount;
            break;

        default:
            break;
        }
        AffectUnit.Add(unit);
        return(true);
    }