76 lines
2.3 KiB
C++
76 lines
2.3 KiB
C++
// Copyright 2025 https://yuewu.dev/en All Rights Reserved.
|
|
|
|
|
|
#include "Utilities/GGA_GameplayAbilityTargetDataFunctionLibrary.h"
|
|
#include "AbilitySystemBlueprintLibrary.h"
|
|
#include "GGA_GameplayAbilityTargetData_Payload.h"
|
|
|
|
FGameplayAbilityTargetDataHandle UGGA_GameplayAbilityTargetDataFunctionLibrary::AbilityTargetDataFromPayload(const FInstancedStruct& Payload)
|
|
{
|
|
// Construct TargetData
|
|
FGGA_GameplayAbilityTargetData_Payload* TargetData = new FGGA_GameplayAbilityTargetData_Payload(Payload);
|
|
|
|
// Give it a handle and return
|
|
FGameplayAbilityTargetDataHandle Handle;
|
|
Handle.Data.Add(TSharedPtr<FGameplayAbilityTargetData>(TargetData));
|
|
|
|
return Handle;
|
|
}
|
|
|
|
FInstancedStruct UGGA_GameplayAbilityTargetDataFunctionLibrary::GetPayloadFromTargetData(const FGameplayAbilityTargetDataHandle& TargetData, int32 Index)
|
|
{
|
|
if (TargetData.Data.IsValidIndex(Index))
|
|
{
|
|
if (TargetData.Data[Index]->GetScriptStruct() == FGGA_GameplayAbilityTargetData_Payload::StaticStruct())
|
|
{
|
|
if (FGGA_GameplayAbilityTargetData_Payload* Data = static_cast<FGGA_GameplayAbilityTargetData_Payload*>(TargetData.Data[Index].Get()))
|
|
{
|
|
return Data->Payload;
|
|
}
|
|
}
|
|
}
|
|
|
|
return FInstancedStruct();
|
|
}
|
|
|
|
FGameplayAbilityTargetDataHandle UGGA_GameplayAbilityTargetDataFunctionLibrary::AbilityTargetDataFromHitResults(const TArray<FHitResult>& HitResults, bool OneTargetPerHandle)
|
|
{
|
|
// Construct TargetData
|
|
if (OneTargetPerHandle)
|
|
{
|
|
FGameplayAbilityTargetDataHandle Handle;
|
|
for (int32 i = 0; i < HitResults.Num(); ++i)
|
|
{
|
|
if (::IsValid(HitResults[i].GetActor()))
|
|
{
|
|
FGameplayAbilityTargetDataHandle TempHandle = UAbilitySystemBlueprintLibrary::AbilityTargetDataFromHitResult(HitResults[i]);
|
|
Handle.Append(TempHandle);
|
|
}
|
|
}
|
|
return Handle;
|
|
}
|
|
else
|
|
{
|
|
FGameplayAbilityTargetDataHandle Handle;
|
|
|
|
for (const FHitResult& HitResult : HitResults)
|
|
{
|
|
FGameplayAbilityTargetData_SingleTargetHit* NewData = new FGameplayAbilityTargetData_SingleTargetHit(HitResult);
|
|
Handle.Add(NewData);
|
|
}
|
|
|
|
return Handle;
|
|
}
|
|
}
|
|
|
|
void UGGA_GameplayAbilityTargetDataFunctionLibrary::AddTargetDataToContext(FGameplayAbilityTargetDataHandle TargetData, FGameplayEffectContextHandle EffectContext)
|
|
{
|
|
for (auto Data : TargetData.Data)
|
|
{
|
|
if (Data.IsValid())
|
|
{
|
|
Data->AddTargetDataToContext(EffectContext, true);
|
|
}
|
|
}
|
|
}
|