diff --git a/Source/UHLGAS/Private/Input/AbilityInputCache.cpp b/Source/UHLGAS/Private/Input/AbilityInputCache.cpp index 1caf78e..d115497 100644 --- a/Source/UHLGAS/Private/Input/AbilityInputCache.cpp +++ b/Source/UHLGAS/Private/Input/AbilityInputCache.cpp @@ -108,6 +108,19 @@ void UAbilityInputCache::CheckCache() // // bCanceledSuccessfully; // } // } + + FGameplayAbilitySpec AbilitySpec; + UUHLGASBlueprintLibrary::FindAbilitySpecByTagUsingASC(ASC.Get(), AbilityTagToActivate, AbilitySpec); + if (AbilitySpec.IsActive()) + { + const UUHLGameplayAbility* AbilityCDO = Cast(AbilitySpec.Ability); + if (AbilityCDO->bCheckTagsWhenCheckingCache) + { + // ASC->CancelAbilityHandle(AbilitySpec.Handle); + // bool bCanceledSuccessfully = ASC->TryCancelAbilityWithTag(AbilityTagToActivate); + // bCanceledSuccessfully; + } + } bool bActivated = ASC->TryActivateAbilityWithTag(AbilityTagToActivate); UE_LOG(Log_UHL_AbilityInputCache, Log, TEXT("Activation %s - %s!"), bActivated ? TEXT("successful") : TEXT("failed"), *AbilityTagToActivate.ToString()); diff --git a/Source/UHLGAS/Public/Abilities/UHLGameplayAbility.h b/Source/UHLGAS/Public/Abilities/UHLGameplayAbility.h index 99dbdfd..3465bdc 100644 --- a/Source/UHLGAS/Public/Abilities/UHLGameplayAbility.h +++ b/Source/UHLGAS/Public/Abilities/UHLGameplayAbility.h @@ -80,6 +80,17 @@ class UHLGAS_API UUHLGameplayAbility : public UGameplayAbility UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AbilityInputCache", DisplayName="[Add to Cache] BlockedTags") FGameplayTagContainer AddToCacheBlockedTags; + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AbilityInputCache") + bool bCheckTagsWhenCheckingCache = false; + + // tags required on owner ASC to activate ability from cache when we "Check" AbilityInputCache + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AbilityInputCache", DisplayName="[Check Cache] RequiredTags", meta=(EditCondition="bCheckTagsWhenCheckingCache", EditConditionHides)) + FGameplayTagContainer CheckCacheRequiredTags; + // tags blocked on owner ASC - if present ability won't be activated from cache when we "Check" AbilityInputCache + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "AbilityInputCache", DisplayName="[Check Cache] RequiredTags", meta=(EditCondition="bCheckTagsWhenCheckingCache", EditConditionHides)) + FGameplayTagContainer CheckCacheBlockedTags; + /** * When true, external CancelAbility calls are intercepted and must be completed manually via ReleaseCancellation(). */