public void RemoveAbilityByTag(FAbilityTagContainer inTag)
 {
     if (abilitiesMap.TryGetValue(inTag, out AbilityBase ability))
     {
         RemoveAbility(ability);
     }
 }
Пример #2
0
    /// <summary>
    /// 尝试触发任务
    /// </summary>
    public bool TryTrigger(FAbilityTagContainer inTag)
    {
        if (TaskStatus != ETaskStatus.TS_UnAccepted)
        {
            return(false);
        }

        bool bRes = false;

        if (needTriggerTaskTags == null)
        {
            bRes       = true;
            TaskStatus = ETaskStatus.TS_Accepted;
        }
        else if (needTriggerTaskTags.Contains(inTag))
        {
            if (alreadyTriggerTaskTags == null)
            {
                alreadyTriggerTaskTags = new List <FAbilityTagContainer>();
            }

            alreadyTriggerTaskTags.Add(inTag);

            if (alreadyTriggerTaskTags.Count == needTriggerTaskTags.Count)
            {
                foreach (FAbilityTagContainer registerTag in registerEventTags)
                {
                    AbilityManager.Instance.RegisterEvent(registerTag, OnTriggerEvent);
                }
                bRes       = true;
                TaskStatus = ETaskStatus.TS_Accepted;
            }
        }
        return(bRes);
    }
 public virtual void RemoveEvent(FAbilityTagContainer inTag, UnityAction <AbilitySystemComponent> inAction)
 {
     if (OnAbilityTriggerEventMap.ContainsKey(inTag))
     {
         OnAbilityTriggerEventMap[inTag] -= inAction;
     }
 }
Пример #4
0
 public void RemoveEvent(FAbilityTagContainer tagContainer, UnityAction <FAbilityTagContainer, object, object, object> register)
 {
     if (eventMaps.ContainsKey(tagContainer))
     {
         eventMaps[tagContainer] -= register;
     }
 }
 public void AcquireAbilityByTag(FAbilityTagContainer inTag)
 {
     if (!abilitiesMap.ContainsKey(inTag))
     {
         AbilityBase ability = AbilityManager.Instance.CreateAbility(inTag, this);
         AcquireAbility(ability);
     }
 }
Пример #6
0
 public void TriggerEvent(FAbilityTagContainer tagContainer, object param1 = null, object param2 = null, object param3 = null)
 {
     if (eventMaps.TryGetValue(tagContainer, out UnityAction <FAbilityTagContainer, object, object, object> action))
     {
         onTriggerEvent?.Invoke(tagContainer);
         action?.Invoke(tagContainer, param1, param2, param3);
     }
 }
 public bool TryActivateAbilityByTag(FAbilityTagContainer inTag)
 {
     if (abilitiesMap.TryGetValue(inTag, out AbilityBase ability))
     {
         return(TryActivateAbility(ability));
     }
     return(false);
 }
 public virtual bool TryCancelAbilityByTag(FAbilityTagContainer inTagContainer)
 {
     if (abilitiesMap.TryGetValue(inTagContainer, out AbilityBase ability) &&
         activityAbilities.Contains(ability))
     {
         ability.CancelAbility();
     }
     return(false);
 }
 public virtual void TriggerEventByTags(FAbilityTagContainer inTag)
 {
     foreach (FAbilityTagContainer eventContainer in OnAbilityTriggerEventMap.Keys)
     {
         if (inTag.HasAll(eventContainer))
         {
             OnAbilityTriggerEventMap[eventContainer]?.Invoke(null);
         }
     }
 }
Пример #10
0
 public bool GetTagContainer(string inTagName, out FAbilityTagContainer tagContainer)
 {
     if (TagContainersMap != null && TagContainersMap.TryGetValue(inTagName, out FAbilityTagContainer tempContainer))
     {
         tagContainer = tempContainer;
         return(true);
     }
     tagContainer = new FAbilityTagContainer();
     return(false);
 }
Пример #11
0
 public void RegisterEvent(FAbilityTagContainer tagContainer, UnityAction <FAbilityTagContainer, object, object, object> register)
 {
     if (eventMaps.ContainsKey(tagContainer))
     {
         eventMaps[tagContainer] += register;
     }
     else
     {
         eventMaps.Add(tagContainer, register);
     }
 }
 public virtual void RegisterEvent(FAbilityTagContainer inTag, UnityAction <AbilitySystemComponent> inAction)
 {
     if (OnAbilityTriggerEventMap.ContainsKey(inTag))
     {
         OnAbilityTriggerEventMap[inTag] += inAction;
     }
     else
     {
         OnAbilityTriggerEventMap.Add(inTag, inAction);
     }
 }
    public AbilityBase TryGetAbility(FAbilityTagContainer inTag)
    {
        AbilityBase abilityBase;

        if (!abilitiesMap.TryGetValue(inTag, out abilityBase) || abilityBase == null)
        {
            if (buffMap.TryGetValue(inTag, out AbilityBuff buff))
            {
                abilityBase = buff;
            }
        }
        return(abilityBase);
    }
Пример #14
0
 public void OnTriggerEvent(FAbilityTagContainer inTag)
 {
     if (m_UnAcceptTaskMap.TryGetValue(inTag, out List <Task> list))
     {
         foreach (Task task in list)
         {
             if (task.TryTrigger(inTag))
             {
                 m_CurrentTaskMap.Add(task.Id, task);
             }
         }
     }
 }
    public void RemoveTags(FAbilityTagContainer inAbilityTagContainer)
    {
        if (inAbilityTagContainer.IsEmpty())
        {
            return;
        }

        foreach (FAbilityTag abilityTag in inAbilityTagContainer.abilityTags)
        {
            AddTag(abilityTag, -1);
        }
        //AddTag(inAbilityTagContainer.abilityTags[inAbilityTagContainer.abilityTags.Count - 1], -1);
    }
Пример #16
0
 public AbilityBase CreateAbility(FAbilityTagContainer inTag, AbilitySystemComponent systemComponent)
 {
     if (m_AbilityMaps.TryGetValue(inTag, out AbilityEditorData abilityEditorData) && abilityEditorData.AbilityScript != null)
     {
         AbilityBase ability = systemComponent.TryGetAbility(inTag);
         if (ability == null)
         {
             ability = System.Activator.CreateInstance(abilityEditorData.AbilityScript.GetClass()) as AbilityBase;
         }
         ability.InitAbility(systemComponent, abilityEditorData);
         return(ability);
     }
     return(null);
 }
    public bool HasAnyMatchingTags(FAbilityTagContainer inOtherContainer)
    {
        if (inOtherContainer.IsEmpty())
        {
            return(true);
        }

        foreach (FAbilityTag abilityTag in inOtherContainer.abilityTags)
        {
            if (HasMatchingTag(abilityTag))
            {
                return(true);
            }
        }
        return(false);
    }
Пример #18
0
    void AddTag(string inStr)
    {
        if (string.IsNullOrEmpty(inStr) || string.IsNullOrWhiteSpace(inStr))
        {
            return;
        }

        string[] strs = inStr.Split('.');

        FAbilityTagContainer[] containers = new FAbilityTagContainer[strs.Length];

        FAbilityTag rootTag = new FAbilityTag(strs[0]);

        if (!TagsMap.ContainsKey(rootTag.TagId))
        {
            TagsMap.Add(rootTag.TagId, rootTag);
        }

        for (int i = 0; i < containers.Length; i++)
        {
            containers[i].AddAbilityTag(rootTag);
        }
        if (!TagContainersMap.ContainsKey(rootTag.TagName))
        {
            TagContainersMap.Add(rootTag.TagName, containers[0]);
        }

        FAbilityTag parentTag = rootTag;

        for (int i = 1; i < strs.Length; i++)
        {
            parentTag = new FAbilityTag(strs[i], parentTag);
            if (!TagsMap.ContainsKey(parentTag.TagId))
            {
                TagsMap.Add(parentTag.TagId, parentTag);
            }

            for (int j = i; j < containers.Length; j++)
            {
                containers[j].AddAbilityTag(parentTag);
            }
            if (!TagContainersMap.ContainsKey(parentTag.TagName))
            {
                TagContainersMap.Add(parentTag.TagName, containers[i]);
            }
        }
    }
    public bool TryActivateBuffByTag(FAbilityTagContainer inTag, int inLevel = 0, int inStackDelta = 1, bool bForceActivate = false)
    {
        if (blockAbilityTagsContainer.HasBlockMatchingTags(inTag))
        {
            return(false);
        }

        if (buffMap.TryGetValue(inTag, out AbilityBuff buff))
        {
            return(TryActivateBuff(buff, inLevel, inStackDelta));
        }
        else
        {
            AbilityBuff tempBuff = AbilityManager.Instance.CreateAbility(inTag, this) as AbilityBuff;
            return(TryActivateBuff(tempBuff, inLevel, inStackDelta, bForceActivate));
        }
    }
Пример #20
0
    /// <summary>
    /// 触发事件
    /// </summary>
    /// <param name="param1"></param>
    /// <param name="param2"></param>
    /// <param name="param3"></param>
    public void OnTriggerEvent(FAbilityTagContainer inTriggerTag, object param1, object param2, object param3)
    {
        float add = (float)param1;

        Current += add;
        if (Current >= Conditions)
        {
            TaskStatus = ETaskStatus.TS_Finished;
            TaskManager.Instance.RemoveTask(this);

            foreach (FAbilityTagContainer registerTag in registerEventTags)
            {
                AbilityManager.Instance.RemoveEvent(registerTag, OnTriggerEvent);
            }
            foreach (FAbilityTagContainer triggerTag in finishTriggerTaskTags)
            {
                AbilityManager.Instance.TriggerEvent(triggerTag, 1);
            }
        }
    }
Пример #21
0
    public bool HasAll(FAbilityTagContainer tagContainer)
    {
        if (tagContainer.IsEmpty())
        {
            return(true);
        }
        if (IsEmpty() || abilityTags.Count < tagContainer.abilityTags.Count)
        {
            return(false);
        }

        for (int i = 0; i < tagContainer.abilityTags.Count; i++)
        {
            if (abilityTags[i] != tagContainer.abilityTags[i])
            {
                return(false);
            }
        }
        return(true);
    }
Пример #22
0
    /// <summary>
    /// 初始化
    /// </summary>
    public virtual void InitAbility(AbilitySystemComponent abilitySystem, AbilityEditorData abilityEditorData)
    {
        this.abilitySystem = abilitySystem;

        abilityTags = AbilityTagManager.Instance.GetTagContainer(abilityEditorData.abilityTags[0]);
        InitTagList(ref cancelAbilitiesWithTags, abilityEditorData.cancelAbilitiesWithTags);
        InitTagList(ref blockAbilitiesWithTags, abilityEditorData.blockAbilitiesWithTags);
        InitTagList(ref activationOwnedTags, abilityEditorData.activationOwnedTags);
        InitTagList(ref sourceRequiredTags, abilityEditorData.sourceRequiredTags);
        InitTagList(ref sourceBlockedTags, abilityEditorData.sourceBlockedTags);
        InitTagList(ref targetRequiredTags, abilityEditorData.targetRequiredTags);
        InitTagList(ref targetBlockedTags, abilityEditorData.targetBlockedTags);

        Level                    = 0;
        MaxLevel                 = abilityEditorData.maxLevel;
        IsActive                 = false;
        IsImmediately            = abilityEditorData.bImmediately;
        IsCancelable             = abilityEditorData.bIsCancelable;
        IsBlockingOtherAbilities = abilityEditorData.bIsBlockingOtherAbilities;

        AbilityEditorData.ReadChildInfo(GetType(), abilityEditorData, this);
    }
 public void RemoveActivateTags(FAbilityTagContainer inTag)
 {
     activationAbilityTagsContainer.RemoveTags(inTag);
 }
 public void AddActivateTags(FAbilityTagContainer inTag)
 {
     activationAbilityTagsContainer.AddTags(inTag);
 }