Pedro Gomes b16bbc3c73 Update Targeting system
- Targetting tags can now hold more than one tag, keeping IsValidTarget, AlliesContains and HasSameTag checks available.
- Added generic target tags for enemies and players
- Optional specific targetting tags if needed for future enhanced targetting
2024-07-25 22:04:25 +01:00

60 lines
2.0 KiB
C#

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<Taggable> targets)
{
base.ApplyEffect(user, targets);
if(applyToTargetsHit)
{
foreach (Taggable target in targets)
{
if (IsAlliedTarget(user, target))
{
targetAbsorbEffect = target.GetComponent<AbsorbEffectInstance>();
targetAbsorbEffect.owner.RPC(nameof(targetAbsorbEffect.RPC_ApplyAbsorbEffect), targetAbsorbEffect.owner.Owner, StatusEffectIndexer.Instance.StatusEffects.IndexOf(this), CalculateFinalAmount(user));
}
}
}
if (applyToSelf)
{
targetAbsorbEffect = user.GetComponent<AbsorbEffectInstance>();
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<CharacterStats>();
foreach (var statInfluence in influencingStats)
{
if (stats.statsDictionary.TryGetValue(statInfluence.statTag.name.ToLower(), out CharacterStat stat))
{
finalAmount += stat.Value * statInfluence.percentInfluence;
}
}
return finalAmount;
}
}