Jelajahi Sumber

Merge pull request #50484 from reduz/fix-instance-set-binding-on-create

Add ability to set object instance binding on creation
Juan Linietsky 4 tahun lalu
induk
melakukan
28ee24b971
2 mengubah file dengan 14 tambahan dan 1 penghapusan
  1. 11 0
      core/object/object.cpp
  2. 3 1
      core/object/object.h

+ 11 - 0
core/object/object.cpp

@@ -1769,6 +1769,17 @@ uint32_t Object::get_edited_version() const {
 }
 #endif
 
+void Object::set_instance_binding(void *p_token, void *p_binding, const GDNativeInstanceBindingCallbacks *p_callbacks) {
+	// This is only meant to be used on creation by the binder.
+	ERR_FAIL_COND(_instance_bindings != nullptr);
+	_instance_bindings = (InstanceBinding *)memalloc(sizeof(InstanceBinding));
+	_instance_bindings[0].binding = p_binding;
+	_instance_bindings[0].free_callback = p_callbacks->free_callback;
+	_instance_bindings[0].reference_callback = p_callbacks->reference_callback;
+	_instance_bindings[0].token = p_token;
+	_instance_binding_count = 1;
+}
+
 void *Object::get_instance_binding(void *p_token, const GDNativeInstanceBindingCallbacks *p_callbacks) {
 	void *binding = nullptr;
 	_instance_binding_mutex.lock();

+ 3 - 1
core/object/object.h

@@ -804,8 +804,10 @@ public:
 
 #endif
 
-	//used by script languages to store binding data
+	// Used by script languages to store binding data.
 	void *get_instance_binding(void *p_token, const GDNativeInstanceBindingCallbacks *p_callbacks);
+	// Used on creation by binding only.
+	void set_instance_binding(void *p_token, void *p_binding, const GDNativeInstanceBindingCallbacks *p_callbacks);
 
 	void clear_internal_resource_paths();