فهرست منبع

Expose instance_from_id to GDNative

This function is available to GDScript but not to GDNative. When exposed, it
allows building more ergonomic safe abstractions over the GDNative APIs, and
covers the use cases of the original PR.

Close #28478. Supersedes #28791.

Co-authored-by: Markus Ewald <[email protected]>
toasteater 5 سال پیش
والد
کامیت
677e72d2f6
3فایلهای تغییر یافته به همراه14 افزوده شده و 0 حذف شده
  1. 4 0
      modules/gdnative/gdnative/gdnative.cpp
  2. 7 0
      modules/gdnative/gdnative_api.json
  3. 3 0
      modules/gdnative/include/gdnative/gdnative.h

+ 4 - 0
modules/gdnative/gdnative/gdnative.cpp

@@ -170,6 +170,10 @@ bool GDAPI godot_is_instance_valid(const godot_object *p_object) {
 	return ObjectDB::instance_validate((Object *)p_object);
 }
 
+godot_object GDAPI *godot_instance_from_id(godot_int p_instance_id) {
+	return (godot_object *)ObjectDB::get_instance((ObjectID)p_instance_id);
+}
+
 void *godot_get_class_tag(const godot_string_name *p_class) {
 	StringName class_name = *(StringName *)p_class;
 	ClassDB::ClassInfo *class_info = ClassDB::classes.getptr(class_name);

+ 7 - 0
modules/gdnative/gdnative_api.json

@@ -155,6 +155,13 @@
               ["const godot_object *", "p_object"],
               ["void *", "p_class_tag"]
             ]
+          },
+          {
+            "name": "godot_instance_from_id",
+            "return_type": "godot_object *",
+            "arguments": [
+              ["godot_int", "p_instance_id"]
+            ]
           }
         ]
       },

+ 3 - 0
modules/gdnative/include/gdnative/gdnative.h

@@ -290,6 +290,9 @@ bool GDAPI godot_is_instance_valid(const godot_object *p_object);
 void GDAPI *godot_get_class_tag(const godot_string_name *p_class);
 godot_object GDAPI *godot_object_cast_to(const godot_object *p_object, void *p_class_tag);
 
+// equivalent of GDScript's instance_from_id
+godot_object GDAPI *godot_instance_from_id(godot_int p_instance_id);
+
 #ifdef __cplusplus
 }
 #endif