public void CastAbility(Ability ability, string abilityName, AbilityTarget target) { if (m_CachedAbilities.ContainsKey(abilityName) == false) { return; } var abilityData = new Ability.AbilityData() { name = abilityName, startTime = Utils.Time.logicTime, root = m_CachedAbilities[abilityName].Clone() as AbilityRoot }; ability.current = abilityData; ability.current.root.caster = ability.entity.id; ability.current.root.target = target; ability.current.root.Execute(); LogicEvent.RaiseEvent(LogicEventType.CastAbility, ability.entity); }