From 3a5c2670fd952b48f8a352b036aed204c152d259 Mon Sep 17 00:00:00 2001 From: deluvas1911 <69921315+deluvas1911@users.noreply.github.com> Date: Thu, 27 Jul 2023 13:09:43 +0200 Subject: [PATCH] server: add entityAndAnimHashPairs to startSyncedScene event (#291) * server: add entityAndAnimHashPairs to startSyncedScene event * server: fix wrong used value --- server/src/events/Main.cpp | 13 +++++++++++++ shared/helpers/Macros.h | 2 ++ 2 files changed, 15 insertions(+) diff --git a/server/src/events/Main.cpp b/server/src/events/Main.cpp index fe3c1700..b4364d22 100644 --- a/server/src/events/Main.cpp +++ b/server/src/events/Main.cpp @@ -186,12 +186,25 @@ V8_LOCAL_EVENT_HANDLER startSyncedScene(EventType::START_SYNCED_SCENE, { auto ev = static_cast(e); v8::Isolate* isolate = resource->GetIsolate(); + const auto ctx = resource->GetContext(); args.push_back(resource->GetBaseObjectOrNull(ev->GetSource())); args.push_back(V8Helpers::JSValue(ev->GetSceneID())); args.push_back(resource->CreateVector3(ev->GetStartPosition())); args.push_back(resource->CreateVector3(ev->GetStartRotation())); args.push_back(V8Helpers::JSValue(ev->GetAnimDictHash())); + + const auto entityAndAnimHashPairs = ev->GetEntityAndAnimHashPairs(); + const auto animHashArray = v8::Array::New(isolate, entityAndAnimHashPairs.size()); + auto idx = 0; + for (auto [entity, animHash] : entityAndAnimHashPairs) + { + V8_NEW_OBJECT(entityAnimPair) + V8_OBJECT_SET_BASE_OBJECT(entityAnimPair, "entity", entity.get()) + V8_OBJECT_SET_UINT(entityAnimPair, "animHash", animHash) + animHashArray->Set(ctx, idx++, entityAnimPair); + } + args.push_back(animHashArray); }); V8_LOCAL_EVENT_HANDLER stopSyncedScene(EventType::STOP_SYNCED_SCENE, diff --git a/shared/helpers/Macros.h b/shared/helpers/Macros.h index 220f5bfb..b5517b92 100644 --- a/shared/helpers/Macros.h +++ b/shared/helpers/Macros.h @@ -193,6 +193,8 @@ #define V8_OBJECT_SET_NULL(v8Val, prop) (v8Val)->Set(ctx, v8::String::NewFromUtf8(isolate, prop).ToLocalChecked(), v8::Null(isolate)); +#define V8_OBJECT_SET_BASE_OBJECT(v8Val, prop, val) (v8Val)->Set(ctx, v8::String::NewFromUtf8(isolate, prop).ToLocalChecked(), resource->GetBaseObjectOrNull(val)); + #define V8_NEW_OBJECT(val) v8::Local val = v8::Object::New(isolate); #define V8_NEW_ARGS(val) std::vector> val;