public virtual void Set(ProponentAbility reference)
        {
            this.Ability = reference;

            Ability.Cooldown.OnTick += ElementCoolDownTickCallback;

            UpdateState();
        }
        public virtual PlayerAbilityUITemplate Create(ProponentAbility ability)
        {
            var instance = Instantiate(template, transform);

            var script = instance.GetComponent <PlayerAbilityUITemplate>();

            script.Init();
            script.Set(ability);
            return(script);
        }
        //Static Utility
        public static ProponentAbilityCooldown Create(ProponentAbility ability)
        {
            var instance = new GameObject("Cooldown");

            instance.transform.SetParent(ability.transform);

            var script = instance.AddComponent <ProponentAbilityCooldown>();

            return(script);
        }
        public override void Init()
        {
            base.Init();

            for (int i = 0; i < Selection.Count; i++)
            {
                if (Selection[i] == null)
                {
                    continue;
                }

                var instance = ProponentAbility.Create(this, Selection[i]);

                Elements.Add(instance);

                Modules.Setup(instance, this);
            }
        }
        public override void Configure(ProponentAbility reference)
        {
            base.Configure(reference);

            Timer = 0f;
        }