using UnityEngine; public abstract class Ability : ScriptableObject { [Header("Meta")] public string displayName = "Ability"; public string key = ""; public Sprite icon; [Header("Cost & Cooldown")] public float manaCost = 10f; public float cooldown = 2f; [TextArea] public string description; // Called after cost/cooldown checks pass public abstract void Activate(AbilityUser user); // Optional pre-checks (override if needed) public virtual bool CanActivate(AbilityUser user) => true; }