Skip to content

Commit

Permalink
Update Value class
Browse files Browse the repository at this point in the history
- Rename Value to FValue to match Unreal naming conventions.
- Rename ValueType to EValueType to match Unreal naming conventions.
- Utilize TVariant for core value storage in FValue.
- Remove usage of std::string in FValue class.
- Migrate GetXValue to templated GetValue function.
- Utilize FString instead of std::string for string value in FValue class.
- Add assignment operators to FValue class to simplify usage.
- Create LexToString for EValueType. Remove deprecated FYarnValueHelpers.
  • Loading branch information
codemaster committed Jan 1, 2024
1 parent ba04dc9 commit 77ed605
Show file tree
Hide file tree
Showing 18 changed files with 412 additions and 358 deletions.
10 changes: 5 additions & 5 deletions Source/YarnSpinner/Private/DialogueRunner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,11 +109,11 @@ void ADialogueRunner::PreInitializeComponents()
return YarnSubsystem()->GetYarnLibraryRegistry()->GetExpectedFunctionParamCount(FName(UTF8_TO_TCHAR(FunctionName.c_str())));
};

VirtualMachine->CallFunction = [this](const std::string& FunctionName, const std::vector<Yarn::Value>& Parameters) -> Yarn::Value
VirtualMachine->CallFunction = [this](const std::string& FunctionName, const std::vector<Yarn::FValue>& Parameters) -> Yarn::FValue
{
return YarnSubsystem()->GetYarnLibraryRegistry()->CallFunction(
FName(UTF8_TO_TCHAR(FunctionName.c_str())),
TArray<Yarn::Value>(Parameters.data(), Parameters.size())
TArray<Yarn::FValue>(Parameters.data(), Parameters.size())
);
};

Expand Down Expand Up @@ -336,10 +336,10 @@ bool ADialogueRunner::HasValue(std::string Name)
}


Yarn::Value ADialogueRunner::GetValue(std::string Name)
Yarn::FValue ADialogueRunner::GetValue(std::string Name)
{
Yarn::Value Value = YarnSubsystem()->GetValue(Name);
YS_LOG("Retrieving variable %s with value %s", UTF8_TO_TCHAR(Name.c_str()), UTF8_TO_TCHAR(Value.ConvertToString().c_str()))
Yarn::FValue Value = YarnSubsystem()->GetValue(Name);
YS_LOG("Retrieving variable %s with value %s", UTF8_TO_TCHAR(Name.c_str()), *Value.ConvertToString());
return Value;
}

Expand Down
19 changes: 9 additions & 10 deletions Source/YarnSpinner/Private/Library/YarnCommandLibrary.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,7 @@
#include "Library/YarnCommandLibrary.h"

#include "DialogueRunner.h"
#include "AssetRegistry/ARFilter.h"
#include "AssetRegistry/AssetRegistryModule.h"
#include "Library/YarnLibraryRegistry.h"
#include "Misc/OutputDeviceNull.h"
#include "Misc/YSLogging.h"
#include "UObject/SoftObjectPtr.h"

Expand Down Expand Up @@ -85,37 +82,39 @@ void UYarnCommandLibrary::CallCommand(FName CommandName, TSoftObjectPtr<ADialogu
// DialogueRunnerProperty->SetObjectPropertyValue_InContainer(FuncParams.GetStructMemory(), DialogueRunner);
// DialogueRunnerProperty->SetPropertyValue_InContainer(FuncParams.GetStructMemory(), {DialogueRunner});

for (auto Arg : Args)
for (const FYarnBlueprintParam& Arg : Args)
{
// Set input properties
switch (Arg.Value.GetType())
{
case Yarn::Value::ValueType::BOOL:
case Yarn::FValue::EValueType::Bool:
BoolParam = CastField<FBoolProperty>(Function->FindPropertyByName(Arg.Name));
if (!BoolParam)
{
YS_WARN_FUNC("Could not create function parameter '%s' for command '%s' from given values", *Arg.Name.ToString(), *CommandName.ToString())
return ContinueDialogue(DialogueRunner);
}
BoolParam->SetPropertyValue_InContainer(FuncParams.GetStructMemory(), Arg.Value.GetBooleanValue());
BoolParam->SetPropertyValue_InContainer(FuncParams.GetStructMemory(), Arg.Value.GetValue<bool>());
break;
case Yarn::Value::ValueType::NUMBER:
case Yarn::FValue::EValueType::Number:
FloatParam = CastField<FFloatProperty>(Function->FindPropertyByName(Arg.Name));
if (!FloatParam)
{
YS_WARN_FUNC("Could not create function parameter '%s' for command '%s' from given values", *Arg.Name.ToString(), *CommandName.ToString())
return ContinueDialogue(DialogueRunner);
}
FloatParam->SetPropertyValue_InContainer(FuncParams.GetStructMemory(), Arg.Value.GetNumberValue());
FloatParam->SetPropertyValue_InContainer(FuncParams.GetStructMemory(), Arg.Value.GetValue<double>());
break;
case Yarn::Value::ValueType::STRING:
case Yarn::FValue::EValueType::String:
StringParam = CastField<FStrProperty>(Function->FindPropertyByName(Arg.Name));
if (!StringParam)
{
YS_WARN_FUNC("Could not create function parameter '%s' for command '%s' from given values", *Arg.Name.ToString(), *CommandName.ToString())
return ContinueDialogue(DialogueRunner);
}
StringParam->SetPropertyValue_InContainer(FuncParams.GetStructMemory(), FString(Arg.Value.GetStringValue().c_str()));
StringParam->SetPropertyValue_InContainer(FuncParams.GetStructMemory(), Arg.Value.GetValue<FString>());
break;
default:
break;
}
}
Expand Down
28 changes: 14 additions & 14 deletions Source/YarnSpinner/Private/Library/YarnFunctionLibrary.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,9 @@ UYarnFunctionLibrary* UYarnFunctionLibrary::FromBlueprint(const UBlueprint* Blue
}


TOptional<Yarn::Value> UYarnFunctionLibrary::CallFunction(FName FunctionName, TArray<FYarnBlueprintParam> Args, TOptional<FYarnBlueprintParam> ReturnValue)
TOptional<Yarn::FValue> UYarnFunctionLibrary::CallFunction(FName FunctionName, TArray<FYarnBlueprintParam> Args, TOptional<FYarnBlueprintParam> ReturnValue)
{
TOptional<Yarn::Value> Result;
TOptional<Yarn::FValue> Result;

// Find the function
UFunction* Function = FindFunction(FunctionName);
Expand All @@ -80,32 +80,32 @@ TOptional<Yarn::Value> UYarnFunctionLibrary::CallFunction(FName FunctionName, TA
// Set input properties
switch (Arg.Value.GetType())
{
case Yarn::Value::ValueType::BOOL:
case Yarn::FValue::EValueType::Bool:
BoolParam = CastField<FBoolProperty>(Function->FindPropertyByName(Arg.Name));
if (!BoolParam)
{
YS_WARN_FUNC("Could not create function parameter '%s' for function %s from given values", *Arg.Name.ToString(), *FunctionName.ToString())
return Result;
}
BoolParam->SetPropertyValue_InContainer(FuncParams.GetStructMemory(), Arg.Value.GetBooleanValue());
BoolParam->SetPropertyValue_InContainer(FuncParams.GetStructMemory(), Arg.Value.GetValue<bool>());
break;
case Yarn::Value::ValueType::NUMBER:
case Yarn::FValue::EValueType::Number:
FloatParam = CastField<FFloatProperty>(Function->FindPropertyByName(Arg.Name));
if (!FloatParam)
{
YS_WARN_FUNC("Could not create function parameter '%s' for function %s from given values", *Arg.Name.ToString(), *FunctionName.ToString())
return Result;
}
FloatParam->SetPropertyValue_InContainer(FuncParams.GetStructMemory(), Arg.Value.GetNumberValue());
FloatParam->SetPropertyValue_InContainer(FuncParams.GetStructMemory(), Arg.Value.GetValue<double>());
break;
case Yarn::Value::ValueType::STRING:
case Yarn::FValue::EValueType::String:
StringParam = CastField<FStrProperty>(Function->FindPropertyByName(Arg.Name));
if (!StringParam)
{
YS_WARN_FUNC("Could not create function parameter '%s' for function %s from given values", *Arg.Name.ToString(), *FunctionName.ToString())
return Result;
}
StringParam->SetPropertyValue_InContainer(FuncParams.GetStructMemory(), FString(Arg.Value.GetStringValue().c_str()));
StringParam->SetPropertyValue_InContainer(FuncParams.GetStructMemory(), Arg.Value.GetValue<FString>());
break;
}
}
Expand All @@ -118,32 +118,32 @@ TOptional<Yarn::Value> UYarnFunctionLibrary::CallFunction(FName FunctionName, TA
{
switch (ReturnValue->Value.GetType())
{
case Yarn::Value::ValueType::BOOL:
case Yarn::FValue::EValueType::Bool:
BoolParam = CastField<FBoolProperty>(Function->FindPropertyByName(ReturnValue->Name));
if (!BoolParam)
{
YS_WARN_FUNC("Could not get return parameter '%s' for function '%s'", *ReturnValue->Name.ToString(), *FunctionName.ToString())
return Result;
}
Result = Yarn::Value(BoolParam->GetPropertyValue_InContainer(FuncParams.GetStructMemory()));
Result = Yarn::FValue(BoolParam->GetPropertyValue_InContainer(FuncParams.GetStructMemory()));
break;
case Yarn::Value::ValueType::NUMBER:
case Yarn::FValue::EValueType::Number:
FloatParam = CastField<FFloatProperty>(Function->FindPropertyByName(ReturnValue->Name));
if (!FloatParam)
{
YS_WARN_FUNC("Could not get return parameter '%s' for function '%s'", *ReturnValue->Name.ToString(), *FunctionName.ToString())
return Result;
}
Result = Yarn::Value(FloatParam->GetPropertyValue_InContainer(FuncParams.GetStructMemory()));
Result = Yarn::FValue(FloatParam->GetPropertyValue_InContainer(FuncParams.GetStructMemory()));
break;
case Yarn::Value::ValueType::STRING:
case Yarn::FValue::EValueType::String:
StringParam = CastField<FStrProperty>(Function->FindPropertyByName(ReturnValue->Name));
if (!StringParam)
{
YS_WARN_FUNC("Could not get return parameter '%s' for function '%s'", *ReturnValue->Name.ToString(), *FunctionName.ToString())
return Result;
}
Result = Yarn::Value(TCHAR_TO_UTF8(*StringParam->GetPropertyValue_InContainer(FuncParams.GetStructMemory())));
Result = Yarn::FValue(TCHAR_TO_UTF8(*StringParam->GetPropertyValue_InContainer(FuncParams.GetStructMemory())));
break;
}
}
Expand Down
Loading

0 comments on commit 77ed605

Please sign in to comment.