From 5b3afa6080f36f48e2b04bc8accf40a25cfac52e Mon Sep 17 00:00:00 2001 From: Linden <65407488+thelindat@users.noreply.github.com> Date: Thu, 19 Dec 2024 21:29:18 +1100 Subject: [PATCH] feat(scripting/v8): support unpacking Lua vectors --- data/shared/citizen/scripting/v8/main.js | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/data/shared/citizen/scripting/v8/main.js b/data/shared/citizen/scripting/v8/main.js index cfba3db175..9c90052b43 100644 --- a/data/shared/citizen/scripting/v8/main.js +++ b/data/shared/citizen/scripting/v8/main.js @@ -3,6 +3,9 @@ const EXT_FUNCREF = 10; const EXT_LOCALFUNCREF = 11; +const EXT_VECTOR2 = 20; +const EXT_VECTOR3 = 21; +const EXT_VECTOR4 = 22; (function (global) { let boundaryIdx = 1; @@ -49,6 +52,30 @@ const EXT_LOCALFUNCREF = 11; const pack = data => msgpack.encode(data, { codec }); const unpack = data => msgpack.decode(data, { codec }); + + const vectorUnpacker = (data) => { + const buffer = Buffer.from(data); + + return Array.from( + new Float32Array(buffer.buffer, buffer.byteOffset, buffer.length / 4), + (value) => Number(value.toPrecision(7)) + ); + }; + + addExtension({ + type: EXT_VECTOR2, + unpack: vectorUnpacker, + }); + + addExtension({ + type: EXT_VECTOR3, + unpack: vectorUnpacker, + }); + + addExtension({ + type: EXT_VECTOR4, + unpack: vectorUnpacker, + }); // store for use by natives.js global.msgpack_pack = pack;