第一次提交
This commit is contained in:
@@ -0,0 +1,106 @@
|
||||
// Copyright 2025 https://yuewu.dev/en All Rights Reserved.
|
||||
|
||||
|
||||
#include "GGA_AttributeSystemComponent.h"
|
||||
|
||||
#include "AbilitySystemComponent.h"
|
||||
#include "GameplayEffect.h"
|
||||
#include "GameplayEffectExtension.h"
|
||||
#include "GameplayEffectTypes.h"
|
||||
|
||||
DEFINE_LOG_CATEGORY_STATIC(LogGGA_AttributeSystem, Log, All);
|
||||
|
||||
// Sets default values for this component's properties
|
||||
UGGA_AttributeSystemComponent::UGGA_AttributeSystemComponent()
|
||||
{
|
||||
// Set this component to be initialized when the game starts, and to be ticked every frame. You can turn these features
|
||||
// off to improve performance if you don't need them.
|
||||
PrimaryComponentTick.bCanEverTick = false;
|
||||
|
||||
// ...
|
||||
}
|
||||
|
||||
|
||||
bool UGGA_AttributeSystemComponent::ReceivePreGameplayEffectExecute(UAttributeSet* AttributeSet, FGameplayEffectModCallbackData& Data)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void UGGA_AttributeSystemComponent::ReceivePostGameplayEffectExecute(UAttributeSet* AttributeSet, const FGameplayEffectModCallbackData& Data)
|
||||
{
|
||||
if (!AttributeSet)
|
||||
{
|
||||
UE_LOG(LogGGA_AttributeSystem, Error, TEXT("Owner AttributeSet isn't valid"));
|
||||
return;
|
||||
}
|
||||
|
||||
FGameplayEffectContextHandle ContextHandle = Data.EffectSpec.GetContext();
|
||||
|
||||
FGGA_GameplayEffectModCallbackData Payload;
|
||||
Payload.AttributeSet = AttributeSet;
|
||||
Payload.EvaluatedData = Data.EvaluatedData;
|
||||
|
||||
for (const FGameplayEffectModifiedAttribute& ModifiedAttribute : Data.EffectSpec.ModifiedAttributes)
|
||||
{
|
||||
FGGA_ModifiedAttribute ModAttribute;
|
||||
ModAttribute.Attribute = ModifiedAttribute.Attribute;
|
||||
ModAttribute.TotalMagnitude = ModifiedAttribute.TotalMagnitude;
|
||||
Payload.ModifiedAttributes.Add(ModAttribute);
|
||||
}
|
||||
|
||||
Payload.SetByCallerNameMagnitudes = Data.EffectSpec.SetByCallerNameMagnitudes;
|
||||
Payload.SetByCallerTagMagnitudes = Data.EffectSpec.SetByCallerTagMagnitudes;
|
||||
|
||||
Payload.ContextHandle = ContextHandle;
|
||||
Payload.InstigatorActor = Data.EffectSpec.GetContext().GetInstigator();
|
||||
|
||||
Payload.TargetActor = Data.Target.AbilityActorInfo->AvatarActor.Get();;
|
||||
Payload.TargetAsc = &Data.Target;
|
||||
|
||||
Payload.AggregatedSourceTags = *Data.EffectSpec.CapturedSourceTags.GetAggregatedTags();
|
||||
Payload.AggregatedTargetTags = *Data.EffectSpec.CapturedTargetTags.GetAggregatedTags();
|
||||
OnPostGameplayEffectExecute.Broadcast(Payload);
|
||||
HandlePostGameplayEffectExecute(Payload);
|
||||
}
|
||||
|
||||
void UGGA_AttributeSystemComponent::ReceivePreAttributeChange(UAttributeSet* AttributeSet, const FGameplayAttribute& Attribute, float& NewValue)
|
||||
{
|
||||
NewValue = HandlePreAttributeChange(AttributeSet, Attribute, NewValue);
|
||||
}
|
||||
|
||||
void UGGA_AttributeSystemComponent::ReceivePostAttributeChange(UAttributeSet* AttributeSet, const FGameplayAttribute& Attribute, float OldValue, float NewValue)
|
||||
{
|
||||
HandlePostAttributeChange(AttributeSet, Attribute, OldValue, NewValue);
|
||||
OnPostAttributeChange.Broadcast(AttributeSet, Attribute, OldValue, NewValue);
|
||||
}
|
||||
|
||||
void UGGA_AttributeSystemComponent::ReceiveAttributeChange(UAttributeSet* AttributeSet, const FGameplayAttribute& Attribute, const float& NewValue, const float& OldValue)
|
||||
{
|
||||
HandleAttributeChange(AttributeSet, Attribute, NewValue, OldValue);
|
||||
OnAttributeChanged.Broadcast(AttributeSet, Attribute, NewValue, OldValue);
|
||||
}
|
||||
|
||||
float UGGA_AttributeSystemComponent::HandlePreAttributeChange_Implementation(UAttributeSet* AttributeSet, const FGameplayAttribute& Attribute, float NewValue)
|
||||
{
|
||||
return NewValue;
|
||||
}
|
||||
|
||||
void UGGA_AttributeSystemComponent::HandlePostAttributeChange_Implementation(UAttributeSet* AttributeSet, const FGameplayAttribute& Attribute, float OldValue, float NewValue)
|
||||
{
|
||||
}
|
||||
|
||||
void UGGA_AttributeSystemComponent::HandlePostGameplayEffectExecute_Implementation(const FGGA_GameplayEffectModCallbackData& Payload)
|
||||
{
|
||||
}
|
||||
|
||||
void UGGA_AttributeSystemComponent::HandleAttributeChange_Implementation(UAttributeSet* AttributeSet, const FGameplayAttribute& Attribute, const float& NewValue, const float& OldValue)
|
||||
{
|
||||
}
|
||||
|
||||
// Called when the game starts
|
||||
void UGGA_AttributeSystemComponent::BeginPlay()
|
||||
{
|
||||
Super::BeginPlay();
|
||||
|
||||
// ...
|
||||
}
|
||||
Reference in New Issue
Block a user