58. Broadcasting Data Table Rows
This commit is contained in:
Binary file not shown.
@@ -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
|
||||
|
||||
@@ -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="")
|
||||
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"ColumnWidths":
|
||||
{
|
||||
"Image": 487,
|
||||
"Tag": 246,
|
||||
"Message": 439,
|
||||
"MessageTemplate": 232
|
||||
}
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -2,6 +2,14 @@
|
||||
|
||||
#include "GasaCommon.h"
|
||||
|
||||
template<typename RowType>
|
||||
inline
|
||||
RowType* GetDataTableRowByTag(UDataTable* DT, FGameplayTag& Tag)
|
||||
{
|
||||
RowType* Row = DT->FindRow<RowType>(Tag.GetTagName(), TEXT(""));
|
||||
return Row;
|
||||
}
|
||||
|
||||
template<typename KeyType, typename ValueType>
|
||||
inline
|
||||
void RemoveKeys(TMap<KeyType, ValueType> Map, TArray<KeyType> Keys)
|
||||
|
||||
@@ -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<UDataTable> TaggedMessageTable;
|
||||
|
||||
UPROPERTY(Config, EditAnywhere, BlueprintReadOnly, Category="UI")
|
||||
TSoftClassPtr<ACameraMount> Template_PlayerCamera;
|
||||
|
||||
|
||||
@@ -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++" )
|
||||
|
||||
@@ -8,6 +8,8 @@ struct GASA_API FGasaDevOptionsCache
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
UPROPERTY()
|
||||
UObject* TaggedMessageTable;
|
||||
UPROPERTY()
|
||||
UClass* Template_PlayerCamera;
|
||||
UPROPERTY()
|
||||
|
||||
@@ -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<FTaggedMessageRow>( 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 );
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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<UGasaUserWidget> MessageTemplate;
|
||||
|
||||
UPROPERTY(EditAnywhere, BlueprintReadOnly)
|
||||
UTexture2D* Image;
|
||||
};
|
||||
|
||||
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam(FTaggedMessageRowSig, FTaggedMessageRow, Message);
|
||||
@@ -209,6 +209,8 @@ void gen_UHostWidgetController()
|
||||
UGasaAttributeSet* GasaAttribs = Cast<UGasaAttributeSet>( Data.Attributes );
|
||||
|
||||
<bindings>
|
||||
|
||||
AbilitySystem->Event_OnEffectAppliedAssetTags.AddUObject(this, & UHostWidgetController::OnEffectAppliedAssetTags);
|
||||
})
|
||||
));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user