From 328451c0a42dbb96e6379acb71cd19565f9f2c54 Mon Sep 17 00:00:00 2001 From: jyelon Date: Sat, 31 Aug 2024 17:48:38 -0400 Subject: [PATCH] LuaCall library complete. --- Source/Integration/LuaCall.cpp | 48 ++++++++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/Source/Integration/LuaCall.cpp b/Source/Integration/LuaCall.cpp index 799f0f17..f090a69a 100644 --- a/Source/Integration/LuaCall.cpp +++ b/Source/Integration/LuaCall.cpp @@ -2,34 +2,66 @@ #include "LuaCall.h" #include "IntegrationGameModeBase.h" -void UlxLuaCallLibrary::LuaCallBegin(UObject *context, const FString &cname, const FString &fname) { +static void CheckNotEmpty(const FlxStreamBuffer &sb) { + if (sb.empty()) { + UE_LOG(LogBlueprint, Fatal, TEXT("Must use LuaCallBegin before other LuaCall steps")); + } } - -void UlxLuaCallLibrary::LuaCallAddStringParameter(UObject *context, const FString &pstring) { +void UlxLuaCallLibrary::LuaCallBegin(UObject *context, const FString &cname, const FString &fname) { + AIntegrationGameModeBase *mode = AIntegrationGameModeBase::GetFromContext(context); + FlxStreamBuffer &sb = mode->LuaCallGetBuffer(); + mode->LuaCallBegin(); + sb.write_string(cname); + sb.write_string(fname); +} + + +void UlxLuaCallLibrary::LuaCallAddStringParameter(UObject *context, const FString &pstring) { + AIntegrationGameModeBase *mode = AIntegrationGameModeBase::GetFromContext(context); + FlxStreamBuffer &sb = mode->LuaCallGetBuffer(); + CheckNotEmpty(sb); + sb.write_simple_dynamic_tag(SimpleDynamicTag::STRING); + sb.write_string(pstring); } void UlxLuaCallLibrary::LuaCallAddFloatParameter(UObject *context, double pfloat) { - + AIntegrationGameModeBase *mode = AIntegrationGameModeBase::GetFromContext(context); + FlxStreamBuffer &sb = mode->LuaCallGetBuffer(); + CheckNotEmpty(sb); + sb.write_simple_dynamic_tag(SimpleDynamicTag::NUMBER); + sb.write_double(pfloat); } void UlxLuaCallLibrary::LuaCallAddVectorParameter(UObject *context, const FVector &pvector) { - + AIntegrationGameModeBase *mode = AIntegrationGameModeBase::GetFromContext(context); + FlxStreamBuffer &sb = mode->LuaCallGetBuffer(); + CheckNotEmpty(sb); + sb.write_simple_dynamic_tag(SimpleDynamicTag::VECTOR); + sb.write_fvector(pvector); } void UlxLuaCallLibrary::LuaCallAddBooleanParameter(UObject *context, bool pbool) { - + AIntegrationGameModeBase *mode = AIntegrationGameModeBase::GetFromContext(context); + FlxStreamBuffer &sb = mode->LuaCallGetBuffer(); + CheckNotEmpty(sb); + sb.write_simple_dynamic_tag(SimpleDynamicTag::BOOLEAN); + sb.write_bool(pbool); } - + void UlxLuaCallLibrary::LuaCallInvoke(UObject *context, bool background) { - + AIntegrationGameModeBase *mode = AIntegrationGameModeBase::GetFromContext(context); + FlxStreamBuffer &sb = mode->LuaCallGetBuffer(); + CheckNotEmpty(sb); + mode->LuaCallInvoke(true); } + void UlxLuaCallLibrary::InvokeEngioMove(UObject *context, const FString &action, const FVector &xyz, double facing) { AIntegrationGameModeBase *mode = AIntegrationGameModeBase::GetFromContext(context); FlxStreamBuffer &sb = mode->LuaCallGetBuffer();