From 214ba4e2772c1960719da438abcfbd4c1aadc36b Mon Sep 17 00:00:00 2001 From: xshady Date: Wed, 9 Oct 2024 20:30:02 +0300 Subject: [PATCH] add interior bindings --- client/src/bindings/ClientBindingsMain.cpp | 5 +- client/src/bindings/Interior.cpp | 81 ++++++---- client/src/bindings/InteriorPortal.cpp | 177 +++++++++++++++++++++ client/src/bindings/InteriorRoom.cpp | 123 ++++++++++---- shared/deps/cpp-sdk | 2 +- shared/helpers/Macros.h | 23 +++ 6 files changed, 344 insertions(+), 67 deletions(-) create mode 100644 client/src/bindings/InteriorPortal.cpp diff --git a/client/src/bindings/ClientBindingsMain.cpp b/client/src/bindings/ClientBindingsMain.cpp index 9f1b96b8..95a9d08c 100644 --- a/client/src/bindings/ClientBindingsMain.cpp +++ b/client/src/bindings/ClientBindingsMain.cpp @@ -1360,7 +1360,7 @@ extern V8Module sharedModule; extern V8Class v8Player, v8Player, v8Vehicle, v8WebView, v8HandlingData, v8LocalStorage, v8MemoryBuffer, v8MapZoomData, v8Discord, v8Voice, v8WebSocketClient, v8Checkpoint, v8HttpClient, v8Audio, v8LocalPlayer, v8Profiler, v8Worker, v8RmlDocument, v8RmlElement, v8WeaponData, v8FocusData, v8LocalObject, v8TextEncoder, v8TextDecoder, v8Object, v8VirtualEntityGroup, v8VirtualEntity, v8AudioFilter, v8Marker, v8Ped, v8Colshape, v8ColshapeCylinder, v8ColshapeSphere, v8ColshapeCircle, v8ColshapeCuboid, v8ColshapeRectangle, v8ColshapePolygon, v8TextLabel, - v8LocalPed, v8LocalVehicle, v8Font, v8WeaponObject, v8AudioOutput, v8AudioOutputFrontend, v8AudioOutputWorld, v8AudioOutputAttached, v8AudioCategory, v8Interior, v8InteriorRoom; + v8LocalPed, v8LocalVehicle, v8Font, v8WeaponObject, v8AudioOutput, v8AudioOutputFrontend, v8AudioOutputWorld, v8AudioOutputAttached, v8AudioCategory, v8Interior, v8InteriorRoom, v8InteriorPortal; extern V8Module altModule("alt", &sharedModule, { v8Player, @@ -1410,7 +1410,8 @@ extern V8Module altModule("alt", v8AudioOutputAttached, v8AudioCategory, v8Interior, - v8InteriorRoom }, + v8InteriorRoom, + v8InteriorPortal }, [](v8::Local ctx, v8::Local exports) { v8::Isolate* isolate = ctx->GetIsolate(); diff --git a/client/src/bindings/Interior.cpp b/client/src/bindings/Interior.cpp index a494b99a..08c1f8b1 100644 --- a/client/src/bindings/Interior.cpp +++ b/client/src/bindings/Interior.cpp @@ -4,13 +4,13 @@ static void Constructor(const v8::FunctionCallbackInfo& info) { V8_GET_ISOLATE_CONTEXT(); - V8_CHECK_CONSTRUCTOR() + V8_CHECK_CONSTRUCTOR(); - V8_CHECK_ARGS_LEN(1) - V8_ARG_TO_UINT(1, interiorId) + V8_CHECK_ARGS_LEN(1); + V8_ARG_TO_UINT(1, interiorId); std::shared_ptr interior = alt::ICore::Instance().GetInterior(interiorId); - V8_CHECK(interior, "interior doesn't exist") + V8_CHECK(interior, "interior doesn't exist"); V8Helpers::SetObjectClass(info.GetIsolate(), info.This(), V8Class::ObjectClass::INTERIOR); info.This()->SetInternalField(1, info[0]); @@ -20,9 +20,8 @@ static void GetForInteriorID(const v8::FunctionCallbackInfo& info) { V8_GET_ISOLATE_CONTEXT(); - V8_CHECK_ARGS_LEN(1) - V8_ARG_TO_UINT(1, interiorId) - + V8_CHECK_ARGS_LEN(1); + V8_ARG_TO_UINT(1, interiorId); std::vector> args{ V8Helpers::JSValue(interiorId) }; extern V8Class v8Interior; @@ -32,10 +31,10 @@ static void GetForInteriorID(const v8::FunctionCallbackInfo& info) static void RoomCountGetter(v8::Local, const v8::PropertyCallbackInfo& info) { V8_GET_ISOLATE_CONTEXT(); - V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId) + V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId); auto interior = alt::ICore::Instance().GetInterior(interiorId); - V8_CHECK(interior, "interior doesn't exist") + V8_CHECK(interior, "interior doesn't exist"); V8_RETURN_UINT(interior->GetRoomCount()); } @@ -43,63 +42,61 @@ static void RoomCountGetter(v8::Local, const v8::PropertyCallbackInf static void PortalCountGetter(v8::Local, const v8::PropertyCallbackInfo& info) { V8_GET_ISOLATE_CONTEXT(); - V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId) + V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId); auto interior = alt::ICore::Instance().GetInterior(interiorId); - V8_CHECK(interior, "interior doesn't exist") + V8_CHECK(interior, "interior doesn't exist"); V8_RETURN_UINT(interior->GetPortalCount()); } static void PositionGetter(v8::Local, const v8::PropertyCallbackInfo& info) { - V8_GET_ISOLATE_CONTEXT_RESOURCE() - V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId) + V8_GET_ISOLATE_CONTEXT_RESOURCE(); + V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId); auto interior = alt::ICore::Instance().GetInterior(interiorId); - V8_CHECK(interior, "interior doesn't exist") + V8_CHECK(interior, "interior doesn't exist"); V8_RETURN_VECTOR3(interior->GetPosition()); } static void RotationGetter(v8::Local, const v8::PropertyCallbackInfo& info) { - V8_GET_ISOLATE_CONTEXT_RESOURCE() - V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId) + V8_GET_ISOLATE_CONTEXT_RESOURCE(); + V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId); auto interior = alt::ICore::Instance().GetInterior(interiorId); - V8_CHECK(interior, "interior doesn't exist") + V8_CHECK(interior, "interior doesn't exist"); V8_RETURN_VECTOR3(interior->GetRotation()); } static void EntitiesExtentsGetter(v8::Local, const v8::PropertyCallbackInfo& info) { - V8_GET_ISOLATE_CONTEXT_RESOURCE() - V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId) + V8_GET_ISOLATE_CONTEXT_RESOURCE(); + V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId); auto interior = alt::ICore::Instance().GetInterior(interiorId); - V8_CHECK(interior, "interior doesn't exist") + V8_CHECK(interior, "interior doesn't exist"); auto extentInfo = interior->GetEntitiesExtents(); - - v8::Local obj = v8::Object::New(isolate); - obj->Set(ctx, V8Helpers::JSValue("min"), resource->CreateVector3(extentInfo.min)); - obj->Set(ctx, V8Helpers::JSValue("max"), resource->CreateVector3(extentInfo.max)); + INTERIOR_EXTENT_TO_OBJECT(extentInfo, obj); V8_RETURN(obj); } static void GetRoomByHash(const v8::FunctionCallbackInfo& info) { V8_GET_ISOLATE_CONTEXT(); - V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId) + V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId); auto interior = alt::ICore::Instance().GetInterior(interiorId); - V8_CHECK(interior, "interior doesn't exist") + V8_CHECK(interior, "interior doesn't exist"); - V8_CHECK_ARGS_LEN(1) - V8_ARG_TO_UINT(1, roomHash) + V8_CHECK_ARGS_LEN(1); + V8_ARG_TO_UINT(1, roomHash); + // 3 args: (interiorId: uint, value: uint, valueIsRoomIndex: bool) std::vector> args{ V8Helpers::JSValue(interiorId), V8Helpers::JSValue(roomHash), V8Helpers::JSValue(false) }; extern V8Class v8InteriorRoom; @@ -109,20 +106,38 @@ static void GetRoomByHash(const v8::FunctionCallbackInfo& info) static void GetRoomByIndex(const v8::FunctionCallbackInfo& info) { V8_GET_ISOLATE_CONTEXT(); - V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId) + V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId); auto interior = alt::ICore::Instance().GetInterior(interiorId); - V8_CHECK(interior, "interior doesn't exist") + V8_CHECK(interior, "interior doesn't exist"); - V8_CHECK_ARGS_LEN(1) - V8_ARG_TO_UINT(1, roomIndex) + V8_CHECK_ARGS_LEN(1); + V8_ARG_TO_UINT(1, roomIndex); + // 3 args: (interiorId: uint, value: uint, valueIsRoomIndex: bool) std::vector> args{ V8Helpers::JSValue(interiorId), V8Helpers::JSValue(roomIndex), V8Helpers::JSValue(true) }; extern V8Class v8InteriorRoom; V8_RETURN(v8InteriorRoom.New(isolate->GetEnteredOrMicrotaskContext(), args)); } +static void GetPortalByIndex(const v8::FunctionCallbackInfo& info) +{ + V8_GET_ISOLATE_CONTEXT(); + V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId); + + auto interior = alt::ICore::Instance().GetInterior(interiorId); + V8_CHECK(interior, "interior doesn't exist"); + + V8_CHECK_ARGS_LEN(1); + V8_ARG_TO_UINT(1, portalIndex); + + std::vector> args{ V8Helpers::JSValue(interiorId), V8Helpers::JSValue(portalIndex) }; + + extern V8Class v8InteriorPortal; + V8_RETURN(v8InteriorPortal.New(isolate->GetEnteredOrMicrotaskContext(), args)); +} + extern V8Class v8Interior("Interior", Constructor, [](v8::Local tpl) @@ -133,7 +148,7 @@ extern V8Class v8Interior("Interior", V8Helpers::SetMethod(isolate, tpl, "getRoomByHash", &GetRoomByHash); V8Helpers::SetMethod(isolate, tpl, "getRoomByIndex", &GetRoomByIndex); - //V8Helpers::SetMethod(isolate, tpl, "getPortalByIndex", &GetPortalByIndex); + V8Helpers::SetMethod(isolate, tpl, "getPortalByIndex", &GetPortalByIndex); V8Helpers::SetAccessor(isolate, tpl, "roomCount", &RoomCountGetter); V8Helpers::SetAccessor(isolate, tpl, "portalCount", &PortalCountGetter); diff --git a/client/src/bindings/InteriorPortal.cpp b/client/src/bindings/InteriorPortal.cpp new file mode 100644 index 00000000..0bb929b5 --- /dev/null +++ b/client/src/bindings/InteriorPortal.cpp @@ -0,0 +1,177 @@ +#include "../CV8Resource.h" +#include "V8Class.h" +#include "cpp-sdk/script-objects/IInteriorPortal.h" + +static void Constructor(const v8::FunctionCallbackInfo& info) +{ + V8_GET_ISOLATE_CONTEXT(); + V8_CHECK_CONSTRUCTOR() + + V8_CHECK_ARGS_LEN(3) + V8_ARG_TO_UINT(1, interiorId) + V8_ARG_TO_UINT(2, portalIndex) + + std::shared_ptr interior = alt::ICore::Instance().GetInterior(interiorId); + V8_CHECK(interior, "interior doesn't exist") + + std::shared_ptr portal = interior->GetPortalByIndex(portalIndex); + V8_CHECK(portal, "interior portal doesn't exist"); + + V8Helpers::SetObjectClass(info.GetIsolate(), info.This(), V8Class::ObjectClass::INTERIOR_PORTAL); + info.This()->SetInternalField(1, info[0]); + info.This()->SetInternalField(2, info[1]); +} + +static void IndexGetter(v8::Local, const v8::PropertyCallbackInfo& info) +{ + V8_GET_ISOLATE_CONTEXT(); + V8_GET_THIS_INTERNAL_FIELD_UINT32(2, portalIndex); + V8_RETURN_UINT(portalIndex); +} + +static void RoomFromGetter(v8::Local, const v8::PropertyCallbackInfo& info) +{ + GET_THIS_INTERIOR_PORTAL(portal); + + // TODO: is is expected that it returns uint but setter takes int? (and same for RoomTo, same for Flag) + V8_RETURN_INT(portal->GetRoomFrom()); +} + +static void RoomFromSetter(v8::Local, v8::Local value, const v8::PropertyCallbackInfo& info) +{ + GET_THIS_INTERIOR_PORTAL(portal); + + V8_TO_UINT(value, roomFrom); + portal->SetRoomFrom(roomFrom); +} + +static void RoomToGetter(v8::Local, const v8::PropertyCallbackInfo& info) +{ + GET_THIS_INTERIOR_PORTAL(portal); + + V8_RETURN_INT(portal->GetRoomTo()); +} + +static void RoomToSetter(v8::Local, v8::Local value, const v8::PropertyCallbackInfo& info) +{ + GET_THIS_INTERIOR_PORTAL(portal); + + V8_TO_UINT(value, roomTo); + portal->SetRoomTo(roomTo); +} + +static void FlagGetter(v8::Local, const v8::PropertyCallbackInfo& info) +{ + GET_THIS_INTERIOR_PORTAL(portal); + + V8_RETURN_INT(portal->GetFlag()); +} + +static void FlagSetter(v8::Local, v8::Local value, const v8::PropertyCallbackInfo& info) +{ + GET_THIS_INTERIOR_PORTAL(portal); + + V8_TO_UINT(value, flag); + portal->SetFlag(flag); +} + +static void CornerCountGetter(v8::Local, const v8::PropertyCallbackInfo& info) +{ + GET_THIS_INTERIOR_PORTAL(portal); + + V8_RETURN_UINT(portal->GetCornerCount()); +} + +static void GetEntityArchetype(const v8::FunctionCallbackInfo& info) +{ + GET_THIS_INTERIOR_PORTAL(portal); + + V8_CHECK_ARGS_LEN(1); + V8_ARG_TO_UINT(1, entityIndex); + V8_RETURN_UINT(portal->GetEntityArcheType(entityIndex)); +} + +static void GetEntityFlag(const v8::FunctionCallbackInfo& info) +{ + GET_THIS_INTERIOR_PORTAL(portal); + + V8_CHECK_ARGS_LEN(1); + V8_ARG_TO_INT(1, entityIndex); + V8_RETURN_INT(portal->GetEntityFlag(entityIndex)); +} + +static void SetEntityFlag(const v8::FunctionCallbackInfo& info) +{ + GET_THIS_INTERIOR_PORTAL(portal); + + V8_CHECK_ARGS_LEN(2); + V8_ARG_TO_INT(1, entityIndex); + V8_ARG_TO_INT(2, flag); + portal->SetEntityFlag(entityIndex, flag); +} + +static void GetEntityPos(const v8::FunctionCallbackInfo& info) +{ + GET_THIS_INTERIOR_PORTAL(portal); + + V8_CHECK_ARGS_LEN(1); + V8_ARG_TO_INT(1, entityIndex); + V8_GET_RESOURCE(); + V8_RETURN_VECTOR3(portal->GetEntityPosition(entityIndex)); +} + +static void GetEntityRot(const v8::FunctionCallbackInfo& info) +{ + GET_THIS_INTERIOR_PORTAL(portal); + + V8_CHECK_ARGS_LEN(1); + V8_ARG_TO_INT(1, entityIndex); + V8_GET_RESOURCE(); + V8_RETURN_VECTOR3(portal->GetEntityRotation(entityIndex)); +} + +static void GetCornerPos(const v8::FunctionCallbackInfo& info) +{ + GET_THIS_INTERIOR_PORTAL(portal); + + V8_CHECK_ARGS_LEN(1); + V8_ARG_TO_UINT(1, cornerIndex); + V8_GET_RESOURCE(); + V8_RETURN_VECTOR3(portal->GetCornerPosition(cornerIndex)); +} + + +static void SetCornerPos(const v8::FunctionCallbackInfo& info) +{ + GET_THIS_INTERIOR_PORTAL(portal); + + V8_CHECK_ARGS_LEN(2); + V8_ARG_TO_INT(1, cornerIndex); + V8_ARG_TO_VECTOR3(2, pos); + portal->SetCornerPosition(cornerIndex, pos); +} + +extern V8Class v8InteriorPortal("InteriorPortal", + Constructor, + [](v8::Local tpl) + { + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + + // TODO: not sure about this one + tpl->InstanceTemplate()->SetInternalFieldCount(3); + + V8Helpers::SetAccessor(isolate, tpl, "index", &IndexGetter); + V8Helpers::SetAccessor(isolate, tpl, "cornerCount", &CornerCountGetter); + V8Helpers::SetAccessor(isolate, tpl, "roomFrom", &RoomFromGetter, &RoomFromSetter); + V8Helpers::SetAccessor(isolate, tpl, "roomTo", &RoomToGetter, &RoomToSetter); + V8Helpers::SetAccessor(isolate, tpl, "flag", &FlagGetter, &FlagSetter); + + V8Helpers::SetMethod(isolate, tpl, "getCornerPos", &GetCornerPos); + V8Helpers::SetMethod(isolate, tpl, "getEntityArchetype", &GetEntityArchetype); + V8Helpers::SetMethod(isolate, tpl, "getEntityFlag", &GetEntityFlag); + V8Helpers::SetMethod(isolate, tpl, "setEntityFlag", &SetEntityFlag); + V8Helpers::SetMethod(isolate, tpl, "getEntityPos", &GetEntityPos); + V8Helpers::SetMethod(isolate, tpl, "getEntityRot", &GetEntityRot); + + V8Helpers::SetMethod(isolate, tpl, "setCornerPos", &SetCornerPos); + }); diff --git a/client/src/bindings/InteriorRoom.cpp b/client/src/bindings/InteriorRoom.cpp index de1e7be5..ef19a595 100644 --- a/client/src/bindings/InteriorRoom.cpp +++ b/client/src/bindings/InteriorRoom.cpp @@ -5,63 +5,124 @@ static void Constructor(const v8::FunctionCallbackInfo& info) { V8_GET_ISOLATE_CONTEXT(); - V8_CHECK_CONSTRUCTOR() + V8_CHECK_CONSTRUCTOR(); - V8_CHECK_ARGS_LEN(3) - V8_ARG_TO_UINT(1, interiorId) - V8_ARG_TO_UINT(2, value) - V8_ARG_TO_BOOLEAN(3, isIndex) + V8_CHECK_ARGS_LEN(3); + V8_ARG_TO_UINT(1, interiorId); + V8_ARG_TO_UINT(2, value); + V8_ARG_TO_BOOLEAN(3, isIndex); std::shared_ptr interior = alt::ICore::Instance().GetInterior(interiorId); - V8_CHECK(interior, "interior doesn't exist") + V8_CHECK(interior, "interior doesn't exist"); + std::shared_ptr room; if(isIndex) { - std::shared_ptr room = interior->GetRoomByIndex(value); - V8_CHECK(interior, "room doesn't exist") + room = interior->GetRoomByIndex(value); + V8_CHECK(room, "interior room doesn't exist"); } else { - std::shared_ptr room = interior->GetRoomByHash(value); - V8_CHECK(interior, "room doesn't exist") + room = interior->GetRoomByHash(value); } + V8_CHECK(room, "interior room doesn't exist"); + + uint32_t roomIndex = room->GetIndex(); V8Helpers::SetObjectClass(info.GetIsolate(), info.This(), V8Class::ObjectClass::INTERIOR_ROOM); info.This()->SetInternalField(1, info[0]); - info.This()->SetInternalField(2, info[1]); - info.This()->SetInternalField(3, info[2]); + info.This()->SetInternalField(2, V8Helpers::JSValue(roomIndex)); } -static void GetRoomName(v8::Local, const v8::PropertyCallbackInfo& info) +static void IndexGetter(v8::Local, const v8::PropertyCallbackInfo& info) { V8_GET_ISOLATE_CONTEXT(); - V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId) - V8_GET_THIS_INTERNAL_FIELD_UINT32(2, value) - V8_GET_THIS_INTERNAL_FIELD_BOOLEAN(3, isIndex) + V8_GET_THIS_INTERNAL_FIELD_UINT32(2, roomIndex); + V8_RETURN_UINT(roomIndex); +} - auto interior = alt::ICore::Instance().GetInterior(interiorId); - V8_CHECK(interior, "interior doesn't exist") - std::shared_ptr room; - if(isIndex) - { - room = interior->GetRoomByIndex(value); - V8_CHECK(interior, "room doesn't exist") - } - else - { - room = interior->GetRoomByHash(value); - V8_CHECK(interior, "room doesn't exist") - } +static void NameGetter(v8::Local, const v8::PropertyCallbackInfo& info) +{ + GET_THIS_INTERIOR_ROOM(room); V8_RETURN_STRING(room->GetName()); } +static void NameHashGetter(v8::Local, const v8::PropertyCallbackInfo& info) +{ + GET_THIS_INTERIOR_ROOM(room); + + V8_RETURN_UINT(room->GetNameHash()); +} + +static void FlagGetter(v8::Local, const v8::PropertyCallbackInfo& info) +{ + GET_THIS_INTERIOR_ROOM(room); + + V8_RETURN_INT(room->GetFlag()); +} + +static void FlagSetter(v8::Local, v8::Local value, const v8::PropertyCallbackInfo& info) +{ + GET_THIS_INTERIOR_ROOM(room); + + V8_TO_UINT(value, flag); + room->SetFlag(flag); +} + +static void TimecycleGetter(v8::Local, const v8::PropertyCallbackInfo& info) +{ + GET_THIS_INTERIOR_ROOM(room); + + V8_RETURN_UINT(room->GetTimecycle()); +} + +static void TimecycleSetter(v8::Local, v8::Local value, const v8::PropertyCallbackInfo& info) +{ + GET_THIS_INTERIOR_ROOM(room); + + V8_TO_UINT(value, timecycle); + room->SetTimecycle(timecycle); +} + +static void ExtentsGetter(v8::Local, const v8::PropertyCallbackInfo& info) +{ + GET_THIS_INTERIOR_ROOM(room); + + auto extentInfo = room->GetExtents(); + V8_GET_RESOURCE(); + INTERIOR_EXTENT_TO_OBJECT(extentInfo, obj); + V8_RETURN(obj); +} + +static void ExtentsSetter(v8::Local, v8::Local value, const v8::PropertyCallbackInfo& info) +{ + GET_THIS_INTERIOR_ROOM(room); + + V8_TO_OBJECT(value, extentInfo); + + auto minRaw = extentInfo->Get(ctx, v8::String::NewFromUtf8(isolate, "min").ToLocalChecked()).ToLocalChecked(); + V8_TO_VECTOR3(minRaw, min); + + auto maxRaw = extentInfo->Get(ctx, v8::String::NewFromUtf8(isolate, "max").ToLocalChecked()).ToLocalChecked(); + V8_TO_VECTOR3(maxRaw, max); + + room->SetExtents({ min, max }); +} + extern V8Class v8InteriorRoom("InteriorRoom", Constructor, [](v8::Local tpl) { v8::Isolate* isolate = v8::Isolate::GetCurrent(); - tpl->InstanceTemplate()->SetInternalFieldCount(4); - V8Helpers::SetAccessor(isolate, tpl, "name", &GetRoomName); + // TODO: not sure about this one + tpl->InstanceTemplate()->SetInternalFieldCount(3); + + V8Helpers::SetAccessor(isolate, tpl, "index", &IndexGetter); + V8Helpers::SetAccessor(isolate, tpl, "name", &NameGetter); + V8Helpers::SetAccessor(isolate, tpl, "nameHash", &NameHashGetter); + V8Helpers::SetAccessor(isolate, tpl, "flag", &FlagGetter, FlagSetter); + V8Helpers::SetAccessor(isolate, tpl, "timecycle", &TimecycleGetter, TimecycleSetter); + V8Helpers::SetAccessor(isolate, tpl, "extents", &ExtentsGetter, ExtentsSetter); }); diff --git a/shared/deps/cpp-sdk b/shared/deps/cpp-sdk index aaa0a1c4..f713e288 160000 --- a/shared/deps/cpp-sdk +++ b/shared/deps/cpp-sdk @@ -1 +1 @@ -Subproject commit aaa0a1c40cf7a1cbb9e4043b9f157159d9727009 +Subproject commit f713e288b5fa34fb6407ed0ff090519bb17fc60c diff --git a/shared/helpers/Macros.h b/shared/helpers/Macros.h index 26f965a4..68d21e3e 100644 --- a/shared/helpers/Macros.h +++ b/shared/helpers/Macros.h @@ -376,3 +376,26 @@ Log::Warning << V8Helpers::SourceLocation::GetCurrent(isolate, resource).ToString(isolate) << " " << oldName << " is deprecated and will be removed in future versions. Consider using " \ << newName << " instead" << Log::Endl; \ } + +#define GET_THIS_INTERIOR_PORTAL(val) \ + V8_GET_ISOLATE_CONTEXT(); \ + V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId); \ + V8_GET_THIS_INTERNAL_FIELD_UINT32(2, portalIndex); \ + auto interior = alt::ICore::Instance().GetInterior(interiorId); \ + V8_CHECK(interior, "interior doesn't exist"); \ + std::shared_ptr portal = interior->GetPortalByIndex(portalIndex); \ + V8_CHECK(portal, "interior portal doesn't exist") + +#define GET_THIS_INTERIOR_ROOM(val) \ + V8_GET_ISOLATE_CONTEXT(); \ + V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId); \ + V8_GET_THIS_INTERNAL_FIELD_UINT32(2, roomIndex); \ + auto interior = alt::ICore::Instance().GetInterior(interiorId); \ + V8_CHECK(interior, "interior doesn't exist"); \ + std::shared_ptr val = interior->GetRoomByIndex(roomIndex); \ + V8_CHECK(val, "interior room doesn't exist") + +#define INTERIOR_EXTENT_TO_OBJECT(extentInfo, val) \ + v8::Local val = v8::Object::New(isolate); \ + val->Set(ctx, V8Helpers::JSValue("min"), resource->CreateVector3(extentInfo.min)); \ + val->Set(ctx, V8Helpers::JSValue("max"), resource->CreateVector3(extentInfo.max)); \