#pragma once #include "CoreMinimal.h" #include "lpx-enginewrapper.hpp" #include "CommonTypes.h" // Class FlxLockableWrapper // // Contains the EngineWrapper and a Mutex to lock it. // This class has no methods. To access the EngineWrapper, // construct a FlxLockedWrapper, and then dereference it // using operator right arrow. // class FlxLockableWrapper { private: FCriticalSection Mutex; EngineWrapper Wrapper; // Temporary buffers. These are only used // inside wrapper methods. There's nothing // persistent in these. // TArray AQLenBuffer; TArray AQStrBuffer; public: friend class FlxLockedWrapper; }; class FlxLockedWrapper { private: FlxLockableWrapper& Lockable; public: // Import these types into our Namespace. using IdArray = CommonTypes::IdArray; using IdView = CommonTypes::IdView; using StringViewVec = CommonTypes::StringViewVec; public: // The constructor of the FlxLockedWrapper claims the mutex. FlxLockedWrapper(FlxLockableWrapper& w) : Lockable(w) { Lockable.Mutex.Lock(); } // The destructor of the FlxLockedWrapper releases the mutex. ~FlxLockedWrapper() { Lockable.Mutex.Unlock(); } // Operator right arrow accesses the EngineWrapper. EngineWrapper* operator ->() { return &Lockable.Wrapper; } // Get a pointer to the enginewrapper. This is not // very safe because you could keep the pointer after // the LockedWrapper is destroyed. Don't do that. EngineWrapper* Get() { return &Lockable.Wrapper; } // Initialize the engine wrapper if it's not already. // // All this does is open the DLL and hook up all // the function pointers in the wrapper to point into // the DLL. // void InitWrapper(); // Fetch Stdout as a string. // FString FetchStdout(); // Get the current Actor ID. // int64 GetActor(); // Get the list of tangibles near the actor. // // This function is fast but not free. You should fetch this // once per frame and then store the IdView somewhere (like // in the TangibleManager, for example). // IdView GetNear(int64 id, double rx, double ry, double rz); // PlayCallFunction - a thin wrapper around play_call_function. // std::string_view PlayCallFunction(InvocationKind kind, int64 place, std::string_view datapk); // Get animation queues. // // The array returned by this is valid until the // next time you call this. // StringViewVec GetAnimationQueues(IdView ids); };