using System.Collections; using System.Collections.Generic; using UnityEngine; namespace Template_RuntimeInstance { public abstract class BaseAbility : ScriptableObject { public string abilityName; public string description; public Sprite icon; public List targettingTags = new List(); public List tags = new List(); public List abilityEffects = new List(); public float castTime; public float manaCost; public float healthCost = 0; public float classResourceCost = 0; public float cooldown; public bool castableWhileMoving; public AbilityAnimationType animationType; public abstract IAbilityProperties CreateProperties(); private void OnValidate() { InitializeUniqueTags(); } private void OnEnable() { InitializeUniqueTags(); } public void InitializeUniqueTags() { tags.Clear(); // Iterate through each effect and add unique GameTags to uniqueTags list foreach (var effect in abilityEffects) { if (effect != null) { foreach (var tag in effect.tags) { if (!tags.Contains(tag)) { tags.Add(tag); } } foreach (var influencingStat in effect.influencingStats) { if (!tags.Contains(influencingStat.statTag)) { tags.Add(influencingStat.statTag); } } } } } } }