#include "LockedWrapper.h" #include "DebugPrint.h" #include "lpx-drvutil.hpp" using namespace CommonTypes; void FLockedWrapper::InitWrapper() { if (Lockable.Wrapper.play_initialize != nullptr) { // Already initialized. return; } void* DLL = FPlatformProcess::GetDllHandle(TEXT("c:\\Luprex\\build\\visual\\luprexlib.dll")); if (DLL != nullptr) { using InitFn = void (*)(EngineWrapper*); InitFn init = (InitFn)FPlatformProcess::GetDllExport(DLL, TEXT("init_engine_wrapper")); if (init != nullptr) { init(&Lockable.Wrapper); Lockable.Wrapper.hook_dprint(DebugPrint::DPrint); } } } FString FLockedWrapper::FetchStdout() { uint32_t ndata; const char* data; Lockable.Wrapper.get_outgoing(Get(), 0, &ndata, &data); if (ndata == 0) { return FString(); } std::string_view src(data, ndata); int consumed; std::u16string cps = drvutil::utf8_to_ucs2(src, &consumed); Lockable.Wrapper.play_sent_outgoing(Get(), 0, consumed); return FString(cps.size(), (const UCS2CHAR*)(&cps[0])); } int64 FLockedWrapper::GetActor() { return Lockable.Wrapper.get_actor_id(Get()); } IdView FLockedWrapper::GetNear(int64 id, double rx, double ry, double rz) { uint32 size; int64* data; Lockable.Wrapper.get_tangibles_near(Get(), id, rx, ry, rz, &size, &data); return IdView(data, size); } StringViewVec FLockedWrapper::GetAnimationQueues(IdView ids) { // How many animation queues are we fetching? int num = ids.Num(); // Enlarge the static buffers if necessary. // Add a little extra space so we don't have to enlarge // the buffers every time we get a new tangible. if (num > Lockable.AQLenBuffer.Num()) { Lockable.AQLenBuffer.SetNum(num + 1000); Lockable.AQStrBuffer.SetNum(num + 1000); } // Get pointers to the static buffers. uint32* LenBuf = Lockable.AQLenBuffer.GetData(); const char** StrBuf = Lockable.AQStrBuffer.GetData(); // Get the animation queues into the static buffers. Lockable.Wrapper.get_animation_queues(Get(), num, ids.GetData(), LenBuf, StrBuf); // Transfer data from static buffers into an array of string_view StringViewVec result; result.SetNum(num); for (int i = 0; i < num; i++) { result[i] = std::string_view(StrBuf[i], LenBuf[i]); } return result; }