From bac7ff7498e49f5889766d01212ebf06a94a300b Mon Sep 17 00:00:00 2001 From: LongLy Date: Wed, 15 Jan 2025 12:23:11 -0700 Subject: [PATCH] Added VerMessageHelper --- .../Messages/OLSVerbMessageHelpers.cpp | 80 +++++++++++++++++++ .../Public/Messages/OLSVerbMessageHelpers.h | 30 +++++++ 2 files changed, 110 insertions(+) create mode 100644 Source/ols/Private/Messages/OLSVerbMessageHelpers.cpp create mode 100644 Source/ols/Public/Messages/OLSVerbMessageHelpers.h diff --git a/Source/ols/Private/Messages/OLSVerbMessageHelpers.cpp b/Source/ols/Private/Messages/OLSVerbMessageHelpers.cpp new file mode 100644 index 0000000..78ac430 --- /dev/null +++ b/Source/ols/Private/Messages/OLSVerbMessageHelpers.cpp @@ -0,0 +1,80 @@ +// © 2024 Long Ly. All rights reserved. Any unauthorized use, reproduction, or distribution of this trademark is strictly prohibited and may result in legal action. + + +#include "Messages/OLSVerbMessageHelpers.h" + +#include "GameplayEffectTypes.h" +#include "GameFramework/PlayerState.h" +#include "Messages/OLSVerbMessage.h" + +APlayerState* UOLSVerbMessageHelpers::GetPlayerStateFromObject(UObject* object) +{ + if (APlayerController* playerController = Cast(object)) + { + return playerController->PlayerState; + } + + if (APlayerState* targetPlayerState = Cast(object)) + { + return targetPlayerState; + } + + if (APawn* targetPawn = Cast(object)) + { + if (APlayerState* targetPlayerState = targetPawn->GetPlayerState()) + { + return targetPlayerState; + } + } + return nullptr; +} + +APlayerController* UOLSVerbMessageHelpers::GetPlayerControllerFromObject(UObject* object) +{ + if (APlayerController* playerController = Cast(object)) + { + return playerController; + } + + if (APlayerState* targetPlayerState = Cast(object)) + { + return targetPlayerState->GetPlayerController(); + } + + if (APawn* targetPawn = Cast(object)) + { + return Cast(targetPawn->GetController()); + } + + return nullptr; +} + +FGameplayCueParameters UOLSVerbMessageHelpers::VerbMessageToCueParameters(const FOLSVerbMessage& message) +{ + FGameplayCueParameters Result; + + Result.OriginalTag = message.Verb; + Result.Instigator = Cast(message.Instigator); + Result.EffectCauser = Cast(message.Target); + Result.AggregatedSourceTags = message.InstigatorTags; + Result.AggregatedTargetTags = message.TargetTags; + //@TODO: = Message.ContextTags; + Result.RawMagnitude = message.Magnitude; + + return Result; +} + +FOLSVerbMessage UOLSVerbMessageHelpers::CueParametersToVerbMessage(const FGameplayCueParameters& params) +{ + FOLSVerbMessage result; + + result.Verb = params.OriginalTag; + result.Instigator = params.Instigator.Get(); + result.Target = params.EffectCauser.Get(); + result.InstigatorTags = params.AggregatedSourceTags; + result.TargetTags = params.AggregatedTargetTags; + //@TODO: Result.ContextTags = ???; + result.Magnitude = params.RawMagnitude; + + return result; +} diff --git a/Source/ols/Public/Messages/OLSVerbMessageHelpers.h b/Source/ols/Public/Messages/OLSVerbMessageHelpers.h new file mode 100644 index 0000000..74210bd --- /dev/null +++ b/Source/ols/Public/Messages/OLSVerbMessageHelpers.h @@ -0,0 +1,30 @@ +// © 2024 Long Ly. All rights reserved. Any unauthorized use, reproduction, or distribution of this trademark is strictly prohibited and may result in legal action. + +#pragma once + +#include "CoreMinimal.h" +#include "Kismet/BlueprintFunctionLibrary.h" +#include "OLSVerbMessageHelpers.generated.h" + +/** + * + */ +UCLASS() +class OLS_API UOLSVerbMessageHelpers : public UBlueprintFunctionLibrary +{ + GENERATED_BODY() + + +public: + UFUNCTION(BlueprintCallable, Category = "Lyra") + static class APlayerState* GetPlayerStateFromObject(UObject* object); + + UFUNCTION(BlueprintCallable, Category = "Lyra") + static class APlayerController* GetPlayerControllerFromObject(UObject* object); + + UFUNCTION(BlueprintCallable, Category = "Lyra") + static struct FGameplayCueParameters VerbMessageToCueParameters(const struct FOLSVerbMessage& message); + + UFUNCTION(BlueprintCallable, Category = "Lyra") + static struct FOLSVerbMessage CueParametersToVerbMessage(const FGameplayCueParameters& params); +};