diff --git a/include/godot_cpp/classes/ref.hpp b/include/godot_cpp/classes/ref.hpp index b5fec34..71c8d88 100644 --- a/include/godot_cpp/classes/ref.hpp +++ b/include/godot_cpp/classes/ref.hpp @@ -35,6 +35,7 @@ #include #include +#include #include #include @@ -236,6 +237,48 @@ public: } }; +template +struct PtrToArg> { + _FORCE_INLINE_ static Ref convert(const void *p_ptr) { + return Ref(godot::internal::interface->object_get_instance_binding((void *)p_ptr, godot::internal::token, &T::___binding_callbacks)); + } + + typedef Ref EncodeT; + + _FORCE_INLINE_ static void encode(Ref p_val, const void *p_ptr) { + *(void **)p_ptr = p_val->_owner; + } +}; + +template +struct PtrToArg &> { + typedef Ref EncodeT; + + _FORCE_INLINE_ static Ref convert(const void *p_ptr) { + return Ref(godot::internal::interface->object_get_instance_binding((void *)p_ptr, godot::internal::token, &T::___binding_callbacks)); + } +}; + +template +struct GetTypeInfo, typename EnableIf::value>::type> { + static const GDNativeVariantType VARIANT_TYPE = GDNATIVE_VARIANT_TYPE_OBJECT; + static const GDNativeExtensionClassMethodArgumentMetadata METADATA = GDNATIVE_EXTENSION_METHOD_ARGUMENT_METADATA_NONE; + + static inline PropertyInfo get_class_info() { + return PropertyInfo(GDNATIVE_VARIANT_TYPE_OBJECT, T::get_class_static()); + } +}; + +template +struct GetTypeInfo &, typename EnableIf::value>::type> { + static const GDNativeVariantType VARIANT_TYPE = GDNATIVE_VARIANT_TYPE_OBJECT; + static const GDNativeExtensionClassMethodArgumentMetadata METADATA = GDNATIVE_EXTENSION_METHOD_ARGUMENT_METADATA_NONE; + + static inline PropertyInfo get_class_info() { + return PropertyInfo(GDNATIVE_VARIANT_TYPE_OBJECT, T::get_class_static()); + } +}; + } // namespace godot #endif // ! GODOT_CPP_REF_HPP