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; } }
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); } } } }
public void ApplyEffectToTarget(Actor target, EffectType effectType, float effectPower) { ActorEffect.ApplyEffectToTarget(target, SourceActor, effectType, effectPower, effectData[effectType].Duration); }