From 259d42e585de5eb114e36d6c00d9422086be3d5e Mon Sep 17 00:00:00 2001 From: "[Dev] Pavel Penkov" Date: Wed, 28 May 2025 14:43:41 +0300 Subject: [PATCH] [UHLGAS] AbilityInputCache option to check tags on AbilityInputCache.Check --- Source/UHLGAS/Private/Input/AbilityInputCache.cpp | 13 +++++++++++++ Source/UHLGAS/Public/Abilities/UHLGameplayAbility.h | 11 +++++++++++ 2 files changed, 24 insertions(+) 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(). */