/// <summary> /// Использовать способность /// </summary> /// <param name="type">Тип способности</param> /// <param name="dir">Направление способности</param> /// <returns>true если способность была применена</returns> public void TryUseAbility(AbilityTypes type, Vector2 dir, int senderTeamID) { //Если у персонажа есть способность if (m_Abilities.ContainsKey(type)) { CreatureAbility ability = m_Abilities[type]; int abilityCode = CanUseABility(ability); if (abilityCode == ABILITY_CAN_USE) { ability.Use(); LaunchProjectile(type, dir, senderTeamID); if (OnAbilityUse != null) { OnAbilityUse(type); } } else { Debug.Log("CANT USE ABILITY. REASON " + abilityCode); } } }
public void Init() { SelectedAbilityEffect.gameObject.SetActive(false); m_Abilities = new Dictionary <AbilityTypes, CreatureAbility>(); for (int i = 0; i < Abilities.Length; i++) { if (!m_Abilities.ContainsKey(Abilities[i])) { CreatureAbility ability = new CreatureAbility(Abilities[i]); m_Abilities.Add(Abilities[i], ability); } } }
/// <summary> /// Внутреняя функция проверки возможности использовать способность с получением типов причин отказа /// </summary> int CanUseABility(CreatureAbility ability) { //Если у способности нет зарядов и она не в откате if (!ability.HasAmmo) { Debug.LogWarning("No ammo"); return(ABILITY_CODE_NO_AMMO); } else if (ability.IsCooldown) //Если способность в откате { Debug.LogWarning("Is in cooldown"); return(ABILITY_CODE_COOLDOWN); } return(ABILITY_CAN_USE);; }