Implement LockedWrapper.GetAnimationQueues

This commit is contained in:
2023-09-08 01:52:30 -04:00
parent ee0b37725e
commit d845eab6f5
4 changed files with 57 additions and 8 deletions

View File

@@ -3,6 +3,8 @@
#include "DebugPrint.h"
#include "lpx-drvutil.hpp"
using namespace CommonTypes;
void FLockedWrapper::InitWrapper() {
if (Lockable.Wrapper.play_initialize != nullptr) {
// Already initialized.
@@ -38,9 +40,37 @@ int64 FLockedWrapper::GetActor() {
return Lockable.Wrapper.get_actor_id(Get());
}
FLockedWrapper::IdView FLockedWrapper::GetNear(int64 id, double rx, double ry, double rz) {
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;
}