34. Listening for Attribute Changes
This commit is contained in:
		| @@ -8,9 +8,9 @@ | ||||
|  | ||||
| UGasaAttributeSet::UGasaAttributeSet() | ||||
| { | ||||
| 	InitHealth( 100.f ); | ||||
| 	InitHealth( 80.f ); | ||||
| 	InitMaxHealth( 100.f ); | ||||
| 	InitMana( 50.f ); | ||||
| 	InitMana( 20.f ); | ||||
| 	InitMaxMana( 50.f ); | ||||
| } | ||||
|  | ||||
| @@ -33,7 +33,6 @@ void UGasaAttributeSet::Client_OnRep_MaxMana( FGameplayAttributeData& PrevMaxMan | ||||
| { | ||||
| 	GAMEPLAYATTRIBUTE_REPNOTIFY( UGasaAttributeSet, MaxMana, PrevMaxMana ) | ||||
| } | ||||
|  | ||||
| void UGasaAttributeSet::GetLifetimeReplicatedProps( TArray<FLifetimeProperty>& OutLifetimeProps ) const | ||||
| { | ||||
| 	Super::GetLifetimeReplicatedProps( OutLifetimeProps ); | ||||
|   | ||||
| @@ -90,7 +90,6 @@ public: | ||||
| 	#pragma endregion Setters | ||||
|  | ||||
| #pragma region UObject | ||||
|  | ||||
| 	    void | ||||
| 	    GetLifetimeReplicatedProps( TArray<FLifetimeProperty>& OutLifetimeProps ) const override; | ||||
| #pragma endregion UObject | ||||
|   | ||||
| @@ -28,7 +28,7 @@ void APlayerCharacter::PossessedBy(AController* NewController) | ||||
| 	AGasaPlayerController* PC   = GetController<AGasaPlayerController>(); | ||||
| 	AGasaHUD*              HUD  = PC->GetHUD<AGasaHUD>(); | ||||
| 	FWidgetControllerData  Data = { PC, PS, AbilitySystem, Attributes }; | ||||
| 	HUD->InitOverlay(& Data); | ||||
| 	HUD->InitHostWidget(& Data); | ||||
| } | ||||
|  | ||||
| // TODO(Ed): We need to setup Net Slime... | ||||
| @@ -49,6 +49,6 @@ void APlayerCharacter::OnRep_PlayerState() | ||||
| 		AGasaPlayerController* PC   = GetController<AGasaPlayerController>(); | ||||
| 		AGasaHUD*              HUD  = PC->GetHUD<AGasaHUD>(); | ||||
| 		FWidgetControllerData  Data = { PC, PS, AbilitySystem, Attributes }; | ||||
| 		HUD->InitOverlay(& Data); | ||||
| 		HUD->InitHostWidget(& Data); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -6,14 +6,16 @@ | ||||
| #include "Blueprint/UserWidget.h" | ||||
| using namespace Gasa; | ||||
|  | ||||
| void AGasaHUD::InitOverlay(FWidgetControllerData const* WidgetControllerData) | ||||
| void AGasaHUD::InitHostWidget(FWidgetControllerData const* WidgetControllerData) | ||||
| { | ||||
| 	HostWidget = CreateWidget<UHUDHostWidget>( GetWorld()  | ||||
| 		, GetDevOptions()->Template_HUD_HostUI.LoadSynchronous() ); | ||||
|  | ||||
| 	HostWidgetController = NewObject<UHostWidgetController>(this, GetDevOptions()->Template_HostWidgetController.Get()); | ||||
| 	HostWidgetController->Data = (* WidgetControllerData); | ||||
| 	HostWidget->SetWidgetController(HostWidgetController); | ||||
|  | ||||
| 	 | ||||
| 	HostWidgetController->BroadcastInitialValues(); | ||||
| 	HostWidget->AddToViewport(); | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -19,7 +19,7 @@ public: | ||||
| 	UPROPERTY(VisibleAnywhere, BlueprintReadWrite) | ||||
| 	TObjectPtr<UHostWidgetController> HostWidgetController; | ||||
| 	 | ||||
| 	void InitOverlay(FWidgetControllerData const* WidgetControllerData); | ||||
| 	void InitHostWidget(FWidgetControllerData const* WidgetControllerData); | ||||
| 	 | ||||
| #pragma region HUD	 | ||||
| 	void ShowHUD() override; | ||||
|   | ||||
| @@ -89,6 +89,11 @@ void UGlobeProgressBar::SetGlassStyle(FSlateBrush brush) | ||||
| 	Glass->SetBrush(brush); | ||||
| } | ||||
|  | ||||
| void UGlobeProgressBar::SetPercentage(float CurrentValue, float MaxValue) | ||||
| { | ||||
| 	Bar->SetPercent( MaxValue > 0.f ? CurrentValue / MaxValue : 0.f ); | ||||
| } | ||||
|  | ||||
| void UGlobeProgressBar::SetSize(float width, float height) | ||||
| { | ||||
| 	Root_SB->SetWidthOverride(  width ); | ||||
|   | ||||
| @@ -46,6 +46,9 @@ public: | ||||
| 	 | ||||
| 	UFUNCTION(BlueprintCallable, Category="Globe") | ||||
| 	void SetGlassStyle(FSlateBrush brush); | ||||
|  | ||||
| 	UFUNCTION(BlueprintCallable, Category="Globe") | ||||
| 	void SetPercentage(float CurrentValue, float MaxValue); | ||||
| 	 | ||||
| 	UFUNCTION(BlueprintCallable, Category="Globe") | ||||
| 	void SetSize(float width, float height); | ||||
|   | ||||
| @@ -1 +1,14 @@ | ||||
| #include "HostWidgetController.h" | ||||
| #include "HostWidgetController.h" | ||||
| #include "AbilitySystem/GasaAttributeSet.h" | ||||
| void UHostWidgetController::BroadcastInitialValues() | ||||
| { | ||||
| 	Super::BroadcastInitialValues(); | ||||
| 	UGasaAttributeSet* GasaAttribs = Cast<UGasaAttributeSet>( Data.Attributes ); | ||||
| 	if ( GasaAttribs ) | ||||
| 	{ | ||||
| 		Event_OnHealthChanged.Broadcast( GasaAttribs->GetHealth() ); | ||||
| 		Event_OnMaxHealthChanged.Broadcast( GasaAttribs->GetMaxHealth() ); | ||||
| 		Event_OnManaChanged.Broadcast( GasaAttribs->GetMana() ); | ||||
| 		Event_OnMaxManaChanged.Broadcast( GasaAttribs->GetMaxMana() ); | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -1,12 +1,31 @@ | ||||
| #pragma once | ||||
| #pragma once | ||||
|  | ||||
| #include "WidgetController.h" | ||||
|  | ||||
| #include "HostWidgetController.generated.h" | ||||
| DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam( FAttributeFloatChangedSig, float, NewValue ); | ||||
|  | ||||
| UCLASS() | ||||
| UCLASS( Blueprintable, BlueprintType ) | ||||
| class GASA_API UHostWidgetController : public UWidgetController | ||||
| { | ||||
| 	GENERATED_BODY() | ||||
| public: | ||||
| #pragma region Attribute Events | ||||
| 	// Attribute Events are generated by GasaGen/GasaGen_HostWidgetController.cpp | ||||
|  | ||||
| 	UPROPERTY( BlueprintAssignable, Category = "Attributes" ) | ||||
| 	FAttributeFloatChangedSig Event_OnHealthChanged; | ||||
|  | ||||
| 	UPROPERTY( BlueprintAssignable, Category = "Attributes" ) | ||||
| 	FAttributeFloatChangedSig Event_OnMaxHealthChanged; | ||||
|  | ||||
| 	UPROPERTY( BlueprintAssignable, Category = "Attributes" ) | ||||
| 	FAttributeFloatChangedSig Event_OnManaChanged; | ||||
|  | ||||
| 	UPROPERTY( BlueprintAssignable, Category = "Attributes" ) | ||||
| 	FAttributeFloatChangedSig Event_OnMaxManaChanged; | ||||
| #pragma endregion Attribute Events | ||||
|  | ||||
| #pragma region WidgetController | ||||
| 	void BroadcastInitialValues() override; | ||||
| #pragma endregion WidgetController | ||||
| }; | ||||
|   | ||||
| @@ -7,27 +7,19 @@ USTRUCT(BlueprintType) | ||||
| struct GASA_API FWidgetControllerData | ||||
| { | ||||
| 	GENERATED_BODY() | ||||
|  | ||||
| public: | ||||
| 	FWidgetControllerData() = default; | ||||
|  | ||||
| 	FWidgetControllerData(AGasaPlayerController*   Controller | ||||
| 						, AGasaPlayerState*        PlayerState | ||||
| 						, UAbilitySystemComponent* AbilitySystem | ||||
| 						, UAttributeSet*           Attributes ) | ||||
| #if 1 | ||||
| 	FWidgetControllerData | ||||
| 	( AGasaPlayerController*   Controller | ||||
| 	, AGasaPlayerState*        PlayerState | ||||
| 	, UAbilitySystemComponent* AbilitySystem | ||||
| 	, UAttributeSet*           Attributes ) | ||||
| 	: Controller(Controller) | ||||
| 	, PlayerState(PlayerState) | ||||
| 	, AbilitySystem(AbilitySystem) | ||||
| 	, Attributes(Attributes) | ||||
| #endif | ||||
| 	{ | ||||
| #if 0 | ||||
| 		this->Controller    = Controller; | ||||
| 		this->PlayerState   = PlayerState; | ||||
| 		this->AbilitySystem = AbilitySystem; | ||||
| 		this->Attributes    = Attributes; | ||||
| #endif | ||||
| 	} | ||||
| 	{} | ||||
| 	 | ||||
| 	UPROPERTY(BlueprintReadOnly, Category="Player") | ||||
| 	TObjectPtr<AGasaPlayerController> Controller; | ||||
| @@ -50,4 +42,7 @@ public: | ||||
|  | ||||
| 	UPROPERTY(BlueprintReadOnly, Category="Player") | ||||
| 	FWidgetControllerData Data; | ||||
|  | ||||
| 	UFUNCTION() | ||||
| 	virtual void BroadcastInitialValues() {}; | ||||
| }; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user