Skip to content

Commit

Permalink
ALTV-426 refactore for api changes
Browse files Browse the repository at this point in the history
  • Loading branch information
Doxoh committed Oct 4, 2024
1 parent 0ca29f9 commit 6e34f77
Show file tree
Hide file tree
Showing 6 changed files with 147 additions and 236 deletions.
5 changes: 3 additions & 2 deletions client/src/bindings/ClientBindingsMain.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
v8LocalPed, v8LocalVehicle, v8Font, v8WeaponObject, v8AudioOutput, v8AudioOutputFrontend, v8AudioOutputWorld, v8AudioOutputAttached, v8AudioCategory, v8Interior, v8InteriorRoom;
extern V8Module altModule("alt",
&sharedModule,
{ v8Player,
Expand Down Expand Up @@ -1409,7 +1409,8 @@ extern V8Module altModule("alt",
v8AudioOutputWorld,
v8AudioOutputAttached,
v8AudioCategory,
v8Interior },
v8Interior,
v8InteriorRoom },
[](v8::Local<v8::Context> ctx, v8::Local<v8::Object> exports)
{
v8::Isolate* isolate = ctx->GetIsolate();
Expand Down
303 changes: 70 additions & 233 deletions client/src/bindings/Interior.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,305 +4,142 @@
static void Constructor(const v8::FunctionCallbackInfo<v8::Value>& 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<alt::IInterior> interior = alt::ICore::Instance().GetInterior(interiorId);
V8_CHECK(interior, "interior doesn't exist");
V8_CHECK(interior, "interior doesn't exist")

v8::Local<v8::External> interiorRef = v8::External::New(isolate, new std::weak_ptr<alt::IInterior>(interior));

v8::Persistent<v8::Object> persistent(isolate, info.This());
persistent.SetWeak();

info.This()->SetInternalField(1, interiorRef);
V8Helpers::SetObjectClass(info.GetIsolate(), info.This(), V8Class::ObjectClass::INTERIOR);
info.This()->SetInternalField(1, info[0]);
}

static void GetForInteriorID(const v8::FunctionCallbackInfo<v8::Value>& 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<v8::Local<v8::Value>> args{ V8Helpers::JSValue(interiorId) };

extern V8Class v8Interior;
V8_RETURN(v8Interior.New(isolate->GetEnteredOrMicrotaskContext(), args));
}

static void GetRoomIndexByHash(const v8::FunctionCallbackInfo<v8::Value>& info)
static void RoomCountGetter(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);
V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId)

V8_CHECK_ARGS_LEN(1);
V8_ARG_TO_UINT(1, hash);
auto interior = alt::ICore::Instance().GetInterior(interiorId);
V8_CHECK(interior, "interior doesn't exist")

V8_RETURN_INT(interior->GetRoomIndexByHash(hash));
V8_RETURN_UINT(interior->GetRoomCount());
}

static void GetRoomName(const v8::FunctionCallbackInfo<v8::Value>& info)
static void PortalCountGetter(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);
V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId)

V8_CHECK_ARGS_LEN(1);
V8_ARG_TO_UINT(1, roomIndex);
auto interior = alt::ICore::Instance().GetInterior(interiorId);
V8_CHECK(interior, "interior doesn't exist")

V8_RETURN_STRING(interior->GetRoomName(roomIndex));
V8_RETURN_UINT(interior->GetPortalCount());
}

static void GetRoomFlag(const v8::FunctionCallbackInfo<v8::Value>& info)
static void PositionGetter(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);
V8_GET_ISOLATE_CONTEXT_RESOURCE()
V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId)

V8_CHECK_ARGS_LEN(1);
V8_ARG_TO_UINT(1, roomIndex);
auto interior = alt::ICore::Instance().GetInterior(interiorId);
V8_CHECK(interior, "interior doesn't exist")

V8_RETURN_INT(interior->GetRoomFlag(roomIndex));
V8_RETURN_VECTOR3(interior->GetPosition());
}

static void SetRoomFlag(const v8::FunctionCallbackInfo<v8::Value>& info)
static void RotationGetter(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);
V8_GET_ISOLATE_CONTEXT_RESOURCE()
V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId)

V8_CHECK_ARGS_LEN(2);
V8_ARG_TO_UINT(1, roomIndex);
V8_ARG_TO_UINT(1, roomFlag);
auto interior = alt::ICore::Instance().GetInterior(interiorId);
V8_CHECK(interior, "interior doesn't exist")

interior->SetRoomFlag(roomIndex, roomFlag);
V8_RETURN_VECTOR3(interior->GetRotation());
}

static void GetRoomExtents(const v8::FunctionCallbackInfo<v8::Value>& info)
static void EntitiesExtentsGetter(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT_RESOURCE();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);
V8_GET_ISOLATE_CONTEXT_RESOURCE()
V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId)

V8_CHECK_ARGS_LEN(1);
V8_ARG_TO_UINT(1, roomId);
auto interior = alt::ICore::Instance().GetInterior(interiorId);
V8_CHECK(interior, "interior doesn't exist")

auto extentInfo = interior->GetRoomExtents(roomId);
auto extentInfo = interior->GetEntitiesExtents();

v8::Local<v8::Object> 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));
V8_RETURN(obj);
}

static void SetRoomExtents(const v8::FunctionCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT_RESOURCE();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);

V8_CHECK_ARGS_LEN(3);
V8_ARG_TO_UINT(1, roomIndex);
V8_ARG_TO_VECTOR3(2, min);
V8_ARG_TO_VECTOR3(3, max);

interior->SetRoomExtents(roomIndex, { min, max });
}

static void GetRoomTimecycle(const v8::FunctionCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT_RESOURCE();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);

V8_CHECK_ARGS_LEN(1);
V8_ARG_TO_UINT(1, roomIndex);

V8_RETURN_UINT(interior->GetRoomTimecycle(roomIndex));
}

static void SetRoomTimecycle(const v8::FunctionCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT_RESOURCE();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);

V8_CHECK_ARGS_LEN(2);
V8_ARG_TO_UINT(1, roomIndex);
V8_ARG_TO_UINT(2, timecycleHash);

interior->SetRoomTimecycle(roomIndex, timecycleHash);
}

static void GetPortalCornerPosition(const v8::FunctionCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT_RESOURCE();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);

V8_CHECK_ARGS_LEN(2);
V8_ARG_TO_UINT(1, portalIndex);
V8_ARG_TO_UINT(2, cornerIndex);

V8_RETURN_VECTOR3(interior->GetPortalCornerPosition(portalIndex, cornerIndex));
}

static void SetPortalCornerPosition(const v8::FunctionCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT_RESOURCE();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);

V8_CHECK_ARGS_LEN(3);
V8_ARG_TO_UINT(1, portalIndex);
V8_ARG_TO_UINT(2, cornerIndex);
V8_ARG_TO_VECTOR3(3, position);

interior->SetPortalCornerPosition(portalIndex, cornerIndex, position);
}

static void GetPortalRoomFrom(const v8::FunctionCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT_RESOURCE();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);

V8_CHECK_ARGS_LEN(1);
V8_ARG_TO_UINT(1, portalIndex);

V8_RETURN_INT(interior->GetPortalRoomFrom(portalIndex));
}

static void SetPortalRoomFrom(const v8::FunctionCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT_RESOURCE();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);

V8_CHECK_ARGS_LEN(2);
V8_ARG_TO_UINT(1, portalIndex);
V8_ARG_TO_INT(2, roomFrom);

interior->SetPortalRoomFrom(portalIndex, roomFrom);
}

static void GetPortalRoomTo(const v8::FunctionCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT_RESOURCE();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);

V8_CHECK_ARGS_LEN(1);
V8_ARG_TO_UINT(1, portalIndex);

V8_RETURN_INT(interior->GetPortalRoomTo(portalIndex));
}

static void SetPortalRoomTo(const v8::FunctionCallbackInfo<v8::Value>& info)
static void GetRoomByHash(const v8::FunctionCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);
V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId)

V8_CHECK_ARGS_LEN(2);
V8_ARG_TO_UINT(1, portalIndex);
V8_ARG_TO_INT(2, roomTo);
auto interior = alt::ICore::Instance().GetInterior(interiorId);
V8_CHECK(interior, "interior doesn't exist")

interior->SetPortalRoomTo(portalIndex, roomTo);
}
V8_CHECK_ARGS_LEN(1)
V8_ARG_TO_UINT(1, roomHash)

static void GetPortalFlag(const v8::FunctionCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);
std::vector<v8::Local<v8::Value>> args{ V8Helpers::JSValue(interiorId), V8Helpers::JSValue(roomHash), V8Helpers::JSValue(false) };

V8_CHECK_ARGS_LEN(1);
V8_ARG_TO_UINT(1, portalIndex);

V8_RETURN_INT(interior->GetPortalFlag(portalIndex));
extern V8Class v8InteriorRoom;
V8_RETURN(v8InteriorRoom.New(isolate->GetEnteredOrMicrotaskContext(), args));
}

static void SetPortalFlag(const v8::FunctionCallbackInfo<v8::Value>& info)
static void GetRoomByIndex(const v8::FunctionCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);

V8_CHECK_ARGS_LEN(2);
V8_ARG_TO_UINT(1, portalIndex);
V8_ARG_TO_INT(2, flag);

interior->SetPortalFlag(portalIndex, flag);
}

static void RoomCountGetter(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);

V8_RETURN_UINT(interior->GetRoomCount());
}

static void PortalCountGetter(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);

V8_RETURN_UINT(interior->GetPortalCount());
}
V8_GET_THIS_INTERNAL_FIELD_UINT32(1, interiorId)

static void PositionGetter(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT_RESOURCE();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);
auto interior = alt::ICore::Instance().GetInterior(interiorId);
V8_CHECK(interior, "interior doesn't exist")

V8_RETURN_VECTOR3(interior->GetPosition());
}
V8_CHECK_ARGS_LEN(1)
V8_ARG_TO_UINT(1, roomIndex)

static void RotationGetter(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT_RESOURCE();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);
std::vector<v8::Local<v8::Value>> args{ V8Helpers::JSValue(interiorId), V8Helpers::JSValue(roomIndex), V8Helpers::JSValue(true) };

V8_RETURN_VECTOR3(interior->GetRotation());
extern V8Class v8InteriorRoom;
V8_RETURN(v8InteriorRoom.New(isolate->GetEnteredOrMicrotaskContext(), args));
}

static void EntitiesExtentsGetter(v8::Local<v8::String>, const v8::PropertyCallbackInfo<v8::Value>& info)
{
V8_GET_ISOLATE_CONTEXT_RESOURCE();
V8_GET_THIS_INTERNAL_FIELD_EXTERNAL(1, interior, alt::IInterior);

auto extentInfo = interior->GetEntitiesExtents();

v8::Local<v8::Object> 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));
V8_RETURN(obj);
}

extern V8Class v8Interior("Interior", Constructor, [](v8::Local<v8::FunctionTemplate> tpl) {
v8::Isolate* isolate = v8::Isolate::GetCurrent();

tpl->InstanceTemplate()->SetInternalFieldCount(static_cast<int>(V8Class::InternalFields::COUNT));

V8Helpers::SetMethod(isolate, tpl, "getRoomIndexByHash", &GetRoomIndexByHash);
V8Helpers::SetMethod(isolate, tpl, "getRoomName", &GetRoomName);

V8Helpers::SetMethod(isolate, tpl, "getRoomFlag", &GetRoomFlag);
V8Helpers::SetMethod(isolate, tpl, "setRoomFlag", &SetRoomFlag);

V8Helpers::SetMethod(isolate, tpl, "getRoomExtents", &GetRoomExtents);
V8Helpers::SetMethod(isolate, tpl, "setRoomExtents", &SetRoomExtents);

V8Helpers::SetMethod(isolate, tpl, "getRoomTimecycle", &GetRoomTimecycle);
V8Helpers::SetMethod(isolate, tpl, "setRoomTimecycle", &SetRoomTimecycle);

V8Helpers::SetMethod(isolate, tpl, "getPortalCornerPosition", &GetPortalCornerPosition);
V8Helpers::SetMethod(isolate, tpl, "setPortalCornerPosition", &SetPortalCornerPosition);

V8Helpers::SetMethod(isolate, tpl, "getPortalRoomFrom", &GetPortalRoomFrom);
V8Helpers::SetMethod(isolate, tpl, "setPortalRoomFrom", &SetPortalRoomFrom);
extern V8Class v8Interior("Interior",
Constructor,
[](v8::Local<v8::FunctionTemplate> tpl)
{
v8::Isolate* isolate = v8::Isolate::GetCurrent();

V8Helpers::SetMethod(isolate, tpl, "getPortalRoomTo", &GetPortalRoomTo);
V8Helpers::SetMethod(isolate, tpl, "setPortalRoomTo", &SetPortalRoomTo);
tpl->InstanceTemplate()->SetInternalFieldCount(static_cast<int>(V8Class::InternalFields::COUNT));

V8Helpers::SetMethod(isolate, tpl, "getPortalFlag", &GetPortalFlag);
V8Helpers::SetMethod(isolate, tpl, "setPortalFlag", &SetPortalFlag);
V8Helpers::SetMethod(isolate, tpl, "getRoomByHash", &GetRoomByHash);
V8Helpers::SetMethod(isolate, tpl, "getRoomByIndex", &GetRoomByIndex);
//V8Helpers::SetMethod(isolate, tpl, "getPortalByIndex", &GetPortalByIndex);

V8Helpers::SetAccessor(isolate, tpl, "roomCount", &RoomCountGetter);
V8Helpers::SetAccessor(isolate, tpl, "portalCount", &PortalCountGetter);
V8Helpers::SetAccessor(isolate, tpl, "pos", &PositionGetter);
V8Helpers::SetAccessor(isolate, tpl, "rot", &RotationGetter);
V8Helpers::SetAccessor(isolate, tpl, "entitiesExtents", &EntitiesExtentsGetter);
V8Helpers::SetAccessor(isolate, tpl, "roomCount", &RoomCountGetter);
V8Helpers::SetAccessor(isolate, tpl, "portalCount", &PortalCountGetter);
V8Helpers::SetAccessor(isolate, tpl, "pos", &PositionGetter);
V8Helpers::SetAccessor(isolate, tpl, "rot", &RotationGetter);
V8Helpers::SetAccessor(isolate, tpl, "entitiesExtents", &EntitiesExtentsGetter);

V8Helpers::SetStaticMethod(isolate, tpl, "getForInteriorID", &GetForInteriorID);
});
V8Helpers::SetStaticMethod(isolate, tpl, "getForInteriorID", &GetForInteriorID);
});
Loading

0 comments on commit 6e34f77

Please sign in to comment.