34. Listening for Attribute Changes
This commit is contained in:
Project
Binaries
Win64
Source
scripts
@ -8,9 +8,9 @@
|
||||
|
||||
UGasaAttributeSet::UGasaAttributeSet()
|
||||
{
|
||||
InitHealth( 80.f );
|
||||
InitHealth( 50.f );
|
||||
InitMaxHealth( 100.f );
|
||||
InitMana( 20.f );
|
||||
InitMana( 25.f );
|
||||
InitMaxMana( 50.f );
|
||||
}
|
||||
|
||||
|
@ -14,6 +14,7 @@
|
||||
|
||||
#pragma region Engine Forwards
|
||||
struct FInputActionValue;
|
||||
struct FOnAttributeChangeData;
|
||||
|
||||
class IAbilitySystemInterface;
|
||||
|
||||
@ -34,6 +35,8 @@ class UCogWindowManager;
|
||||
// Gasa
|
||||
|
||||
#pragma region Forwards
|
||||
struct FWidgetControllerData;
|
||||
|
||||
class ACameraMount;
|
||||
class AGasaCharacter;
|
||||
class AGasaGameInstance;
|
||||
@ -52,8 +55,6 @@ class UGasaSizeBox;
|
||||
class UHostWidgetController;
|
||||
class UHUDHostWidget;
|
||||
class UWidgetController;
|
||||
|
||||
struct FWidgetControllerData;
|
||||
#pragma endregion Forwards
|
||||
|
||||
#pragma region Logging
|
||||
|
@ -12,13 +12,18 @@ void FGasaDevOptionsCache::CachedDevOptions()
|
||||
UGasaDevOptions* DevOpts = GetMutDevOptions();
|
||||
|
||||
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++" ) );
|
||||
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++" )
|
||||
);
|
||||
|
||||
Template_HUD_HostUI = DevOpts->Template_HUD_HostUI.LoadSynchronous();
|
||||
ensureMsgf( Template_HUD_HostUI != nullptr, TEXT( "Template_HUD_HostUI is null, DO NOT RUN PIE or else you may get a crash if not handled in BP or C++" ) );
|
||||
|
||||
Template_HostWidgetController = DevOpts->Template_HostWidgetController.LoadSynchronous();
|
||||
ensureMsgf( Template_HostWidgetController != nullptr, TEXT( "Template_HostWidgetController is null, DO NOT RUN PIE or else you may get a crash if not handled in BP or C++" ) );
|
||||
ensureMsgf(
|
||||
Template_HostWidgetController != nullptr,
|
||||
TEXT( "Template_HostWidgetController is null, DO NOT RUN PIE or else you may get a crash if not handled in BP or C++" )
|
||||
);
|
||||
|
||||
Tag_GlobalPPV = DevOpts->Tag_GlobalPPV;
|
||||
}
|
||||
|
@ -14,6 +14,7 @@ void AGasaHUD::InitHostWidget(FWidgetControllerData const* WidgetControllerData)
|
||||
HostWidgetController = NewObject<UHostWidgetController>(this, GetDevOptions()->Template_HostWidgetController.Get());
|
||||
HostWidgetController->Data = (* WidgetControllerData);
|
||||
HostWidget->SetWidgetController(HostWidgetController);
|
||||
HostWidgetController->BindCallbacksToDependencies();
|
||||
|
||||
HostWidgetController->BroadcastInitialValues();
|
||||
HostWidget->AddToViewport();
|
||||
|
@ -1,8 +1,34 @@
|
||||
#include "HostWidgetController.h"
|
||||
#include "AbilitySystem/GasaAbilitySystemComponent_Inlines.h"
|
||||
#include "AbilitySystem/GasaAttributeSet.h"
|
||||
#include "GameplayEffectTypes.h"
|
||||
|
||||
#pragma region Attribute Changed Callbacks
|
||||
// Attribute Changed Callbacks are generated by GasaGen/GasaGen_HostWidgetController.cpp
|
||||
|
||||
void UHostWidgetController::HealthChanged( FOnAttributeChangeData const& Attribute )
|
||||
{
|
||||
Event_OnHealthChanged.Broadcast( Attribute.NewValue );
|
||||
}
|
||||
|
||||
void UHostWidgetController::MaxHealthChanged( FOnAttributeChangeData const& Attribute )
|
||||
{
|
||||
Event_OnMaxHealthChanged.Broadcast( Attribute.NewValue );
|
||||
}
|
||||
|
||||
void UHostWidgetController::ManaChanged( FOnAttributeChangeData const& Attribute )
|
||||
{
|
||||
Event_OnManaChanged.Broadcast( Attribute.NewValue );
|
||||
}
|
||||
|
||||
void UHostWidgetController::MaxManaChanged( FOnAttributeChangeData const& Attribute )
|
||||
{
|
||||
Event_OnMaxManaChanged.Broadcast( Attribute.NewValue );
|
||||
}
|
||||
#pragma endregion Attribute Changed Callbacks
|
||||
|
||||
void UHostWidgetController::BroadcastInitialValues()
|
||||
{
|
||||
Super::BroadcastInitialValues();
|
||||
UGasaAttributeSet* GasaAttribs = Cast<UGasaAttributeSet>( Data.Attributes );
|
||||
if ( GasaAttribs )
|
||||
{
|
||||
@ -12,3 +38,24 @@ void UHostWidgetController::BroadcastInitialValues()
|
||||
Event_OnMaxManaChanged.Broadcast( GasaAttribs->GetMaxMana() );
|
||||
}
|
||||
}
|
||||
|
||||
void UHostWidgetController::BindCallbacksToDependencies()
|
||||
{
|
||||
UGasaAbilitySystemComp* AbilitySystem = Cast<UGasaAbilitySystemComp>( Data.AbilitySystem );
|
||||
UGasaAttributeSet* GasaAttribs = Cast<UGasaAttributeSet>( Data.Attributes );
|
||||
|
||||
FOnGameplayAttributeValueChange& HealthAttributeChangedDelegate =
|
||||
AbilitySystem->GetGameplayAttributeValueChangeDelegate( GasaAttribs->GetHealthAttribute() );
|
||||
HealthAttributeChangedDelegate.AddUObject( this, &ThisClass::HealthChanged );
|
||||
|
||||
FOnGameplayAttributeValueChange& MaxHealthAttributeChangedDelegate =
|
||||
AbilitySystem->GetGameplayAttributeValueChangeDelegate( GasaAttribs->GetMaxHealthAttribute() );
|
||||
MaxHealthAttributeChangedDelegate.AddUObject( this, &ThisClass::MaxHealthChanged );
|
||||
|
||||
FOnGameplayAttributeValueChange& ManaAttributeChangedDelegate = AbilitySystem->GetGameplayAttributeValueChangeDelegate( GasaAttribs->GetManaAttribute() );
|
||||
ManaAttributeChangedDelegate.AddUObject( this, &ThisClass::ManaChanged );
|
||||
|
||||
FOnGameplayAttributeValueChange& MaxManaAttributeChangedDelegate =
|
||||
AbilitySystem->GetGameplayAttributeValueChangeDelegate( GasaAttribs->GetMaxManaAttribute() );
|
||||
MaxManaAttributeChangedDelegate.AddUObject( this, &ThisClass::MaxManaChanged );
|
||||
}
|
||||
|
@ -23,9 +23,15 @@ public:
|
||||
|
||||
UPROPERTY( BlueprintAssignable, Category = "Attributes" )
|
||||
FAttributeFloatChangedSig Event_OnMaxManaChanged;
|
||||
|
||||
void HealthChanged( FOnAttributeChangeData const& Data );
|
||||
void MaxHealthChanged( FOnAttributeChangeData const& Data );
|
||||
void ManaChanged( FOnAttributeChangeData const& Data );
|
||||
void MaxManaChanged( FOnAttributeChangeData const& Data );
|
||||
#pragma endregion Attribute Events
|
||||
|
||||
#pragma region WidgetController
|
||||
void BroadcastInitialValues() override;
|
||||
void BindCallbacksToDependencies() override;
|
||||
#pragma endregion WidgetController
|
||||
};
|
||||
|
@ -45,4 +45,5 @@ public:
|
||||
|
||||
UFUNCTION()
|
||||
virtual void BroadcastInitialValues() {};
|
||||
virtual void BindCallbacksToDependencies() {};
|
||||
};
|
||||
|
Reference in New Issue
Block a user