From fe2abe19726c14d1d9a9d4474b17da4c84068804 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Fri, 26 Apr 2024 20:08:08 -0400 Subject: [PATCH] 58. Broadcasting Data Table Rows --- .../Win64/UnrealEditor-GasaEditor.dll | 2 +- Project/Config/DefaultGame.ini | 1 + Project/Config/DefaultGameplayTags.ini | 6 +++- .../Core/AbilitySystem/GE_CrystalHeal.uasset | 4 +-- .../Core/AbilitySystem/GE_CrystalMana.uasset | 4 +-- .../Core/AbilitySystem/GE_PotionHealth.uasset | 4 +-- .../Core/AbilitySystem/GE_PotionMana.uasset | 4 +-- Project/Content/Core/CT_Potion.uasset | 3 -- .../Content/Core/DT_PrimaryAttributes.uasset | 4 +-- Project/Content/Core/DT_TaggedMessages.uasset | 3 ++ Project/Content/Core/Tables/CT_Potion.uasset | 3 ++ .../Core/Tables/DT_PrimaryAttributes.uasset | 3 ++ .../Core/Tables/DT_TaggedMessages.uasset | 3 ++ Project/Content/Levels/StartupMap.umap | 2 +- Project/Content/UI/UI_Host.uasset | 4 +-- .../DT_TaggedMessages.json | 9 ++++++ .../GasaAbilitySystemComponent.cpp | 7 +---- .../GasaAbilitySystemComponent.h | 8 +++++- Project/Source/Gasa/GasaCommon.h | 3 ++ Project/Source/Gasa/GasaContainers.h | 8 ++++++ Project/Source/Gasa/GasaDevOptions.h | 6 +++- Project/Source/Gasa/GasaDevOptionsCache.cpp | 3 ++ Project/Source/Gasa/GasaDevOptionsCache.h | 2 ++ .../Source/Gasa/UI/HostWIdgetController.cpp | 19 +++++++++++++ Project/Source/Gasa/UI/HostWidgetController.h | 8 ++++++ Project/Source/Gasa/UI/TaggedMessageRow.h | 28 +++++++++++++++++++ .../GasaGen/GasaGen_HostWidgetController.cpp | 2 ++ 27 files changed, 127 insertions(+), 26 deletions(-) delete mode 100644 Project/Content/Core/CT_Potion.uasset create mode 100644 Project/Content/Core/DT_TaggedMessages.uasset create mode 100644 Project/Content/Core/Tables/CT_Potion.uasset create mode 100644 Project/Content/Core/Tables/DT_PrimaryAttributes.uasset create mode 100644 Project/Content/Core/Tables/DT_TaggedMessages.uasset create mode 100644 Project/Saved/AssetData/DataTableEditorLayout/DT_TaggedMessages.json create mode 100644 Project/Source/Gasa/UI/TaggedMessageRow.h diff --git a/Project/Binaries/Win64/UnrealEditor-GasaEditor.dll b/Project/Binaries/Win64/UnrealEditor-GasaEditor.dll index b0293b3..abd7464 100644 --- a/Project/Binaries/Win64/UnrealEditor-GasaEditor.dll +++ b/Project/Binaries/Win64/UnrealEditor-GasaEditor.dll @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:873a05db7e7d47efe7f28c35f73a556f508724c60c6003f15139c7a183b498a1 +oid sha256:29f79da21a9eb63e3fb29099f298d1685caa74fca443a7fdaf79dc3d0fc6242d size 79360 diff --git a/Project/Config/DefaultGame.ini b/Project/Config/DefaultGame.ini index 830df19..87abe9a 100644 --- a/Project/Config/DefaultGame.ini +++ b/Project/Config/DefaultGame.ini @@ -10,6 +10,7 @@ Tag_GlobalPPV=Global_PPV Template_PlayerCamera=/Game/Actors/BP_CameraMount.BP_CameraMount_C Template_HUD_HostUI=/Game/UI/UI_Host.UI_Host_C Template_HostWidgetController=/Game/UI/BP_HostWidgetController.BP_HostWidgetController_C +TaggedMessageTable=/Game/Core/Tables/DT_TaggedMessages.DT_TaggedMessages [/Script/GameplayAbilities.AbilitySystemGlobals] bUseDebugTargetFromHud=true diff --git a/Project/Config/DefaultGameplayTags.ini b/Project/Config/DefaultGameplayTags.ini index 87ede76..2c7ca1e 100644 --- a/Project/Config/DefaultGameplayTags.ini +++ b/Project/Config/DefaultGameplayTags.ini @@ -6,11 +6,15 @@ AllowEditorTagUnloading=True AllowGameTagUnloading=False FastReplication=False InvalidTagCharacters="\"\'," -+GameplayTagTableList=/Game/Core/DT_PrimaryAttributes.DT_PrimaryAttributes ++GameplayTagTableList=/Game/Core/Tables/DT_PrimaryAttributes.DT_PrimaryAttributes NumBitsForContainerSize=6 NetIndexFirstBitSegment=16 +GameplayTagList=(Tag="Attributes.Vital.Health",DevComment="") +GameplayTagList=(Tag="Attributes.Vital.Mana",DevComment="") +GameplayTagList=(Tag="Attributes.Vital.MaxHealth",DevComment="") +GameplayTagList=(Tag="Attributes.Vital.MaxMana",DevComment="") ++GameplayTagList=(Tag="Message.Crystal.Health",DevComment="") ++GameplayTagList=(Tag="Message.Crystal.Mana",DevComment="") ++GameplayTagList=(Tag="Message.Potion.Health",DevComment="") ++GameplayTagList=(Tag="Message.Potion.Mana",DevComment="") diff --git a/Project/Content/Core/AbilitySystem/GE_CrystalHeal.uasset b/Project/Content/Core/AbilitySystem/GE_CrystalHeal.uasset index 8166681..0334a23 100644 --- a/Project/Content/Core/AbilitySystem/GE_CrystalHeal.uasset +++ b/Project/Content/Core/AbilitySystem/GE_CrystalHeal.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:545297b5ea118f000b0d840e4d082a946d9c986fcdf37289cad44071057adb4f -size 14597 +oid sha256:8654b5491b6623f6baeb4c68ca347a063c37299c844d728e757ab5e675f374b9 +size 14584 diff --git a/Project/Content/Core/AbilitySystem/GE_CrystalMana.uasset b/Project/Content/Core/AbilitySystem/GE_CrystalMana.uasset index 3198882..99808ee 100644 --- a/Project/Content/Core/AbilitySystem/GE_CrystalMana.uasset +++ b/Project/Content/Core/AbilitySystem/GE_CrystalMana.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c332786805df3d861854085af15419b9d6e264557f034ccf3415d1dd620dc514 -size 13488 +oid sha256:ff4bef4e04b872cf713595a6d9c2735c9b1788cc97ebb936d68fb96e245c7b3f +size 14379 diff --git a/Project/Content/Core/AbilitySystem/GE_PotionHealth.uasset b/Project/Content/Core/AbilitySystem/GE_PotionHealth.uasset index 84cfa24..5acc4be 100644 --- a/Project/Content/Core/AbilitySystem/GE_PotionHealth.uasset +++ b/Project/Content/Core/AbilitySystem/GE_PotionHealth.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a088b1e8b1f64550e6feb2589f2a418d4536bcea52a806ecb2dc58bc70f95acf -size 13422 +oid sha256:01a8166ba9987fe32990e12f3cd0e06fa434241c881d7425cebdad01b84025e8 +size 14321 diff --git a/Project/Content/Core/AbilitySystem/GE_PotionMana.uasset b/Project/Content/Core/AbilitySystem/GE_PotionMana.uasset index 6c1e8e1..707a12d 100644 --- a/Project/Content/Core/AbilitySystem/GE_PotionMana.uasset +++ b/Project/Content/Core/AbilitySystem/GE_PotionMana.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:669466a6f78ce2841ac5abb2ed7b32fa01a8095934dc26a42ea9344af92502df -size 13387 +oid sha256:b4b87a4e8e293fffb86ccdf0a358ff3c7f1a047c59827aedb3febc0146d2c71d +size 14284 diff --git a/Project/Content/Core/CT_Potion.uasset b/Project/Content/Core/CT_Potion.uasset deleted file mode 100644 index 5beb555..0000000 --- a/Project/Content/Core/CT_Potion.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:af048bad73910bf6913ed75293f37a12381f1f46b33258b09aad47c1e60d27b7 -size 2603 diff --git a/Project/Content/Core/DT_PrimaryAttributes.uasset b/Project/Content/Core/DT_PrimaryAttributes.uasset index c72133b..9fa7479 100644 --- a/Project/Content/Core/DT_PrimaryAttributes.uasset +++ b/Project/Content/Core/DT_PrimaryAttributes.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:18de865771242d2ad5aaa2d109411e14e284da5b640a1d768094faee4de8efe3 -size 2763 +oid sha256:3a2f54070cef01e4b79e98c5b6a9cf025bd20526f3b1aed3cb6be68f0efe2a4a +size 1495 diff --git a/Project/Content/Core/DT_TaggedMessages.uasset b/Project/Content/Core/DT_TaggedMessages.uasset new file mode 100644 index 0000000..11e4510 --- /dev/null +++ b/Project/Content/Core/DT_TaggedMessages.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71fd32b98dc6bca2a8abbfc99dec2e66bd309b0583cc28ddabface523bb114dd +size 1471 diff --git a/Project/Content/Core/Tables/CT_Potion.uasset b/Project/Content/Core/Tables/CT_Potion.uasset new file mode 100644 index 0000000..a37324a --- /dev/null +++ b/Project/Content/Core/Tables/CT_Potion.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9786db3e6acb1ad98f9fa396bce4a47746c13d86c7679e729474dccf69426d3 +size 2617 diff --git a/Project/Content/Core/Tables/DT_PrimaryAttributes.uasset b/Project/Content/Core/Tables/DT_PrimaryAttributes.uasset new file mode 100644 index 0000000..8b593ef --- /dev/null +++ b/Project/Content/Core/Tables/DT_PrimaryAttributes.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5755f644ee0fbddf3a910887dc582c3537b16fb55c469d33a72f20f32375a4d +size 2777 diff --git a/Project/Content/Core/Tables/DT_TaggedMessages.uasset b/Project/Content/Core/Tables/DT_TaggedMessages.uasset new file mode 100644 index 0000000..0c69130 --- /dev/null +++ b/Project/Content/Core/Tables/DT_TaggedMessages.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:740bc6ded88cd0b8f38bb7ddf99dcada505374635fcdfdf4833c371f2f8bdd41 +size 4940 diff --git a/Project/Content/Levels/StartupMap.umap b/Project/Content/Levels/StartupMap.umap index a581783..ca1e71e 100644 --- a/Project/Content/Levels/StartupMap.umap +++ b/Project/Content/Levels/StartupMap.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c2864f918effd2977a374a78e6d1fdfaf7efe038b888b8bb35d1f1c25eca74f8 +oid sha256:25256d0c9e6a738f0a78bf585129c72238f2b85b0968dcd6b0433bc906de82ec size 97208 diff --git a/Project/Content/UI/UI_Host.uasset b/Project/Content/UI/UI_Host.uasset index 4d3900d..7f7384e 100644 --- a/Project/Content/UI/UI_Host.uasset +++ b/Project/Content/UI/UI_Host.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:deb2ac4014fccf5d96bbda4e1581090dc27cf4a5b0d1b53f5b99157726f702b3 -size 37928 +oid sha256:249977d9b0ffc5fa13c9c65d2cdea54a8d35981645b7b1545f4fefb4aac5d113 +size 59609 diff --git a/Project/Saved/AssetData/DataTableEditorLayout/DT_TaggedMessages.json b/Project/Saved/AssetData/DataTableEditorLayout/DT_TaggedMessages.json new file mode 100644 index 0000000..e0fd6bf --- /dev/null +++ b/Project/Saved/AssetData/DataTableEditorLayout/DT_TaggedMessages.json @@ -0,0 +1,9 @@ +{ + "ColumnWidths": + { + "Image": 487, + "Tag": 246, + "Message": 439, + "MessageTemplate": 232 + } +} \ No newline at end of file diff --git a/Project/Source/Gasa/AbilitySystem/GasaAbilitySystemComponent.cpp b/Project/Source/Gasa/AbilitySystem/GasaAbilitySystemComponent.cpp index 99d010c..5390b4e 100644 --- a/Project/Source/Gasa/AbilitySystem/GasaAbilitySystemComponent.cpp +++ b/Project/Source/Gasa/AbilitySystem/GasaAbilitySystemComponent.cpp @@ -21,12 +21,7 @@ void UGasaAbilitySystemComp::EffectApplied(UAbilitySystemComponent* AbilitySyste { FGameplayTagContainer Tags; Spec.GetAllAssetTags(Tags); - for (FGameplayTag const& Tag : Tags) - { - // TODO(Ed): Broadcast the tag to the widget controller - FString Msg = FString::Printf(TEXT("GE Tag: %s"), * Tag.ToString()); - Log(Msg); - } + Event_OnEffectAppliedAssetTags.Broadcast(Tags); } void UGasaAbilitySystemComp::InitAbilityActorInfo(AActor* InOwnerActor, AActor* InAvatarActor) diff --git a/Project/Source/Gasa/AbilitySystem/GasaAbilitySystemComponent.h b/Project/Source/Gasa/AbilitySystem/GasaAbilitySystemComponent.h index 10bb10f..a258758 100644 --- a/Project/Source/Gasa/AbilitySystem/GasaAbilitySystemComponent.h +++ b/Project/Source/Gasa/AbilitySystem/GasaAbilitySystemComponent.h @@ -1,16 +1,22 @@ #pragma once #include "AbilitySystemComponent.h" - #include "GasaCommon.h" #include "GasaAbilitySystemComponent.generated.h" + +DECLARE_MULTICAST_DELEGATE_OneParam(FEffectAssetTagsSig, FGameplayTagContainer const& /*Tags*/); + + UCLASS(BlueprintType) class GASA_API UGasaAbilitySystemComp : public UAbilitySystemComponent { GENERATED_BODY() public: + + FEffectAssetTagsSig Event_OnEffectAppliedAssetTags; + // TODO(Ed): If hes only using this to bind the EffectApplied to a delegate, then just use the init override instead. void OnAbilityActorInfoSet(); diff --git a/Project/Source/Gasa/GasaCommon.h b/Project/Source/Gasa/GasaCommon.h index 8f29e2f..f8ab2ef 100644 --- a/Project/Source/Gasa/GasaCommon.h +++ b/Project/Source/Gasa/GasaCommon.h @@ -23,6 +23,7 @@ struct FInputActionValue; struct FGameplayEffectContextHandle; struct FGameplayEffectModCallbackData; +struct FGameplayTagContainer; struct FOnAttributeChangeData; struct FReplicationFlags; @@ -44,6 +45,7 @@ class UInputAction; class UInputMappingContext; class USphereComponent; class USpringArmComponent; +class UTexture2D; #pragma endregion Engine Forwards #pragma region Engine Plugin Forwards @@ -72,6 +74,7 @@ class UGasaObject; class UGasaOverlay; class UGasaProgressBar; class UGasaSizeBox; +class UGasaUserWidget; class UHostWidgetController; class UHUDHostWidget; class UWidgetController; diff --git a/Project/Source/Gasa/GasaContainers.h b/Project/Source/Gasa/GasaContainers.h index 770212d..ece7845 100644 --- a/Project/Source/Gasa/GasaContainers.h +++ b/Project/Source/Gasa/GasaContainers.h @@ -2,6 +2,14 @@ #include "GasaCommon.h" +template +inline +RowType* GetDataTableRowByTag(UDataTable* DT, FGameplayTag& Tag) +{ + RowType* Row = DT->FindRow(Tag.GetTagName(), TEXT("")); + return Row; +} + template inline void RemoveKeys(TMap Map, TArray Keys) diff --git a/Project/Source/Gasa/GasaDevOptions.h b/Project/Source/Gasa/GasaDevOptions.h index 1f125be..e0e5917 100644 --- a/Project/Source/Gasa/GasaDevOptions.h +++ b/Project/Source/Gasa/GasaDevOptions.h @@ -1,11 +1,12 @@ #pragma once +#include "Engine/DataTable.h" #include "Engine/DeveloperSettings.h" #include "GasaCommon.h" - #include "GasaDevOptions.generated.h" + UCLASS(Config=Game, DefaultConfig, meta=(DisplayName="Gasa")) class GASA_API UGasaDevOptions : public UDeveloperSettings { @@ -15,6 +16,9 @@ public: // NOTE(Ed): Any Soft-References must have their includes defined in GasaDevOptions.cpp // They are used by GasaGen for the GasaDevOptionsCache + UPROPERTY(Config, EditAnywhere, BlueprintReadOnly, Category="UI") + TSoftObjectPtr TaggedMessageTable; + UPROPERTY(Config, EditAnywhere, BlueprintReadOnly, Category="UI") TSoftClassPtr Template_PlayerCamera; diff --git a/Project/Source/Gasa/GasaDevOptionsCache.cpp b/Project/Source/Gasa/GasaDevOptionsCache.cpp index f676587..a887f76 100644 --- a/Project/Source/Gasa/GasaDevOptionsCache.cpp +++ b/Project/Source/Gasa/GasaDevOptionsCache.cpp @@ -11,6 +11,9 @@ void FGasaDevOptionsCache::CachedDevOptions() { UGasaDevOptions* DevOpts = GetMutDevOptions(); + TaggedMessageTable = DevOpts->TaggedMessageTable.LoadSynchronous(); + ensureMsgf( TaggedMessageTable != nullptr, TEXT( "TaggedMessageTable is null, DO NOT RUN PIE or else you may get a crash if not handled in BP or C++" ) ); + Template_PlayerCamera = DevOpts->Template_PlayerCamera.LoadSynchronous(); ensureMsgf( Template_PlayerCamera != nullptr, TEXT( "Template_PlayerCamera is null, DO NOT RUN PIE or else you may get a crash if not handled in BP or C++" ) diff --git a/Project/Source/Gasa/GasaDevOptionsCache.h b/Project/Source/Gasa/GasaDevOptionsCache.h index 04d842d..818c7d3 100644 --- a/Project/Source/Gasa/GasaDevOptionsCache.h +++ b/Project/Source/Gasa/GasaDevOptionsCache.h @@ -8,6 +8,8 @@ struct GASA_API FGasaDevOptionsCache { GENERATED_BODY() + UPROPERTY() + UObject* TaggedMessageTable; UPROPERTY() UClass* Template_PlayerCamera; UPROPERTY() diff --git a/Project/Source/Gasa/UI/HostWIdgetController.cpp b/Project/Source/Gasa/UI/HostWIdgetController.cpp index 34c3010..bf8178e 100644 --- a/Project/Source/Gasa/UI/HostWIdgetController.cpp +++ b/Project/Source/Gasa/UI/HostWIdgetController.cpp @@ -2,6 +2,9 @@ #include "AbilitySystem/GasaAbilitySystemComponent_Inlines.h" #include "AbilitySystem/GasaAttributeSet.h" #include "GameplayEffectTypes.h" +#include "GasaDevOptions.h" +#include "TaggedMessageRow.h" +using namespace Gasa; @@ -30,6 +33,20 @@ void UHostWidgetController::MaxManaChanged( FOnAttributeChangeData const& Attrib } #pragma endregion Attribute Changed Callbacks +void UHostWidgetController::OnEffectAppliedAssetTags( FGameplayTagContainer const& AssetTags ) +{ + UDataTable* TaggedMessages = GetDevOptions()->TaggedMessageTable.Get(); + for ( FGameplayTag const& Tag : AssetTags ) + { + FGameplayTag MessageTagCategory = FGameplayTag::RequestGameplayTag( FName( "Message" ) ); + if ( ! Tag.MatchesTag( MessageTagCategory ) ) + continue; + + FTaggedMessageRow* Row = TaggedMessages->FindRow( Tag.GetTagName(), TEXT( "" ) ); + OnTaggedAssetMessage.Broadcast( *Row ); + } +} + void UHostWidgetController::BroadcastInitialValues() { // This function is managed by: GenGasa/GenGasa_HostWidgetController.cpp @@ -66,4 +83,6 @@ void UHostWidgetController::BindCallbacksToDependencies() FOnGameplayAttributeValueChange& MaxManaAttributeChangedDelegate = AbilitySystem->GetGameplayAttributeValueChangeDelegate( GasaAttribs->GetMaxManaAttribute() ); MaxManaAttributeChangedDelegate.AddUObject( this, &ThisClass::MaxManaChanged ); + + AbilitySystem->Event_OnEffectAppliedAssetTags.AddUObject( this, &UHostWidgetController::OnEffectAppliedAssetTags ); } diff --git a/Project/Source/Gasa/UI/HostWidgetController.h b/Project/Source/Gasa/UI/HostWidgetController.h index 0fd65c3..be54826 100644 --- a/Project/Source/Gasa/UI/HostWidgetController.h +++ b/Project/Source/Gasa/UI/HostWidgetController.h @@ -1,7 +1,10 @@ #pragma once +#include "GasaCommon.h" +#include "TaggedMessageRow.h" #include "WidgetController.h" #include "HostWidgetController.generated.h" + DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam( FAttributeFloatChangedSig, float, NewValue ); UCLASS( Blueprintable, BlueprintType ) @@ -30,6 +33,11 @@ public: void MaxManaChanged( FOnAttributeChangeData const& Data ); #pragma endregion Attribute Events + UPROPERTY( BlueprintAssignable, Category = "Messages" ) + FTaggedMessageRowSig OnTaggedAssetMessage; + + void OnEffectAppliedAssetTags( FGameplayTagContainer const& AssetTags ); + #pragma region WidgetController void BroadcastInitialValues() override; void BindCallbacksToDependencies() override; diff --git a/Project/Source/Gasa/UI/TaggedMessageRow.h b/Project/Source/Gasa/UI/TaggedMessageRow.h new file mode 100644 index 0000000..b5471ff --- /dev/null +++ b/Project/Source/Gasa/UI/TaggedMessageRow.h @@ -0,0 +1,28 @@ +#pragma once + +#include "GameplayTagContainer.h" +#include "GasaCommon.h" +#include "Engine/DataTable.h" +#include "Templates/SubclassOf.h" + +#include "TaggedMessageRow.generated.h" + +USTRUCT(BlueprintType) +struct FTaggedMessageRow : public FTableRowBase +{ + GENERATED_BODY() + + UPROPERTY(EditAnywhere, BlueprintReadOnly) + FGameplayTag Tag; + + UPROPERTY(EditAnywhere, BlueprintReadOnly) + FText Message; + + UPROPERTY(EditAnywhere, BlueprintReadOnly) + TSubclassOf MessageTemplate; + + UPROPERTY(EditAnywhere, BlueprintReadOnly) + UTexture2D* Image; +}; + +DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FTaggedMessageRowSig, FTaggedMessageRow, Message); diff --git a/Project/Source/GasaGen/GasaGen_HostWidgetController.cpp b/Project/Source/GasaGen/GasaGen_HostWidgetController.cpp index f24cc5e..bd1a678 100644 --- a/Project/Source/GasaGen/GasaGen_HostWidgetController.cpp +++ b/Project/Source/GasaGen/GasaGen_HostWidgetController.cpp @@ -209,6 +209,8 @@ void gen_UHostWidgetController() UGasaAttributeSet* GasaAttribs = Cast( Data.Attributes ); + + AbilitySystem->Event_OnEffectAppliedAssetTags.AddUObject(this, & UHostWidgetController::OnEffectAppliedAssetTags); }) )); }