Example #1
0
    private void ApplyEffect(Actor target, Actor source)
    {
        switch (BaseEffect.effectType)
        {
        case EffectType.DEBUFF:
        case EffectType.BUFF:
            string buffName = sourceName + BaseEffect.statBonusType.ToString() + BaseEffect.statModifyType.ToString();
            ApplyBuffEffect(target, source, buffName);
            return;

        case EffectType.BLEED:
        case EffectType.BURN:
        case EffectType.CHILL:
        case EffectType.ELECTROCUTE:
        case EffectType.FRACTURE:
        case EffectType.PACIFY:
        case EffectType.RADIATION:
        case EffectType.POISON:
            float effectPowerMultiplier = source.Data.OnHitData.effectData[BaseEffect.effectType].Effectiveness;
            ActorEffect.ApplyEffectToTarget(target, source, BaseEffect.effectType, Value * effectPowerMultiplier * target.Data.AfflictedStatusDamageResistance, source.Data.OnHitData.effectData[BaseEffect.effectType].Duration);
            break;

        default:
            ActorEffect.ApplyEffectToTarget(target, source, BaseEffect.effectType, Value, BaseEffect.effectDuration, 1.0f, BaseEffect.effectElement);
            return;
        }
    }
Example #2
0
    public static void ApplyStatusSpreadEffect(Actor target, Actor source, EffectType effectType, LayerMask mask)
    {
        List <ActorEffect> effectsToApply = new List <ActorEffect>();

        switch (effectType)
        {
        case EffectType.SPREAD_STATUSES:
            effectsToApply.Add(target.GetStatusEffect(EffectType.BLEED));
            effectsToApply.Add(target.GetStatusEffect(EffectType.BURN));
            effectsToApply.Add(target.GetStatusEffect(EffectType.CHILL));
            effectsToApply.Add(target.GetStatusEffect(EffectType.ELECTROCUTE));
            effectsToApply.Add(target.GetStatusEffect(EffectType.FRACTURE));
            effectsToApply.Add(target.GetStatusEffect(EffectType.PACIFY));
            effectsToApply.Add(target.GetStatusEffect(EffectType.RADIATION));
            break;

        case EffectType.SPREAD_BURN:
            effectsToApply.Add(target.GetStatusEffect(EffectType.BURN));
            break;

        case EffectType.SPREAD_DAMAGING_STATUSES:
            effectsToApply.Add(target.GetStatusEffect(EffectType.BLEED));
            effectsToApply.Add(target.GetStatusEffect(EffectType.BURN));
            effectsToApply.Add(target.GetStatusEffect(EffectType.ELECTROCUTE));
            effectsToApply.Add(target.GetStatusEffect(EffectType.RADIATION));
            break;

        case EffectType.SPREAD_BLEED:
            effectsToApply.Add(target.GetStatusEffect(EffectType.BLEED));
            break;

        case EffectType.SPREAD_RADIATION:
            effectsToApply.Add(target.GetStatusEffect(EffectType.RADIATION));
            break;
        }

        Collider2D[] hits = Physics2D.OverlapCircleAll(target.transform.position, 1f, mask);

        foreach (Collider2D hit in hits)
        {
            Actor secondary = hit.gameObject.GetComponent <Actor>();

            if (secondary.Data.IsDead || secondary == target)
            {
                continue;
            }

            foreach (ActorEffect effect in effectsToApply)
            {
                if (effect != null)
                {
                    ActorEffect.ApplyEffectToTarget(secondary, effect.Source, effect.effectType, effect.GetSimpleEffectValue(), effect.duration);
                }
            }
        }
    }
Example #3
0
 public void ApplyEffectToTarget(Actor target, EffectType effectType, float effectPower)
 {
     ActorEffect.ApplyEffectToTarget(target, SourceActor, effectType, effectPower, effectData[effectType].Duration);
 }