using Kryz.CharacterStats; using Kryz.CharacterStats.Examples; using System.Collections; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(fileName = "AbsorbEffect", menuName = "RiftMayhem/AbilitySystem/Effects/Absorb Effect", order = 1)] public class AbsorbEffect : StatusEffect { public float amount; AbsorbEffectInstance targetAbsorbEffect; public override void ApplyEffect(Taggable user, List targets) { base.ApplyEffect(user, targets); if(applyToTargetsHit) { foreach (Taggable target in targets) { if (IsAlliedTarget(user, target)) { targetAbsorbEffect = target.GetComponent(); targetAbsorbEffect.owner.RPC(nameof(targetAbsorbEffect.RPC_ApplyAbsorbEffect), targetAbsorbEffect.owner.Owner, StatusEffectIndexer.Instance.StatusEffects.IndexOf(this), CalculateFinalAmount(user)); } } } if (applyToSelf) { targetAbsorbEffect = user.GetComponent(); targetAbsorbEffect.ApplyEffect(this, CalculateFinalAmount(user)); //targetAbsorbEffect.owner.RPC(nameof(targetAbsorbEffect.RPC_ApplyAbsorbEffect), targetAbsorbEffect.owner.Owner, StatusEffectIndexer.Instance.StatusEffects.IndexOf(this)); } } private bool IsAlliedTarget(Taggable user, Taggable target) { //return user.targetTag.Contains(target.targetTag); return user.AlliedTagsContains(target.targetTag); } private float CalculateFinalAmount(Taggable user) { float finalAmount = amount; CharacterStats stats = user.GetComponent(); foreach (var statInfluence in influencingStats) { if (stats.statsDictionary.TryGetValue(statInfluence.statTag.name.ToLower(), out CharacterStat stat)) { finalAmount += stat.Value * statInfluence.percentInfluence; } } return finalAmount; } }