|
@@ -294,6 +294,8 @@ struct ObjectNativeExtension {
|
|
|
GDNativeExtensionClassGet get;
|
|
|
GDNativeExtensionClassGetPropertyList get_property_list;
|
|
|
GDNativeExtensionClassFreePropertyList free_property_list;
|
|
|
+ GDNativeExtensionClassPropertyCanRevert property_can_revert;
|
|
|
+ GDNativeExtensionClassPropertyGetRevert property_get_revert;
|
|
|
GDNativeExtensionClassNotification notification;
|
|
|
GDNativeExtensionClassToString to_string;
|
|
|
GDNativeExtensionClassReference reference;
|
|
@@ -469,6 +471,28 @@ protected:
|
|
|
m_inherits::_get_property_listv(p_list, p_reversed); \
|
|
|
} \
|
|
|
} \
|
|
|
+ _FORCE_INLINE_ bool (Object::*_get_property_can_revert() const)(const StringName &p_name) const { \
|
|
|
+ return (bool(Object::*)(const StringName &) const) & m_class::_property_can_revert; \
|
|
|
+ } \
|
|
|
+ virtual bool _property_can_revertv(const StringName &p_name) const override { \
|
|
|
+ if (m_class::_get_property_can_revert() != m_inherits::_get_property_can_revert()) { \
|
|
|
+ if (_property_can_revert(p_name)) { \
|
|
|
+ return true; \
|
|
|
+ } \
|
|
|
+ } \
|
|
|
+ return m_inherits::_property_can_revertv(p_name); \
|
|
|
+ } \
|
|
|
+ _FORCE_INLINE_ bool (Object::*_get_property_get_revert() const)(const StringName &p_name, Variant &) const { \
|
|
|
+ return (bool(Object::*)(const StringName &, Variant &) const) & m_class::_property_get_revert; \
|
|
|
+ } \
|
|
|
+ virtual bool _property_get_revertv(const StringName &p_name, Variant &r_ret) const override { \
|
|
|
+ if (m_class::_get_property_get_revert() != m_inherits::_get_property_get_revert()) { \
|
|
|
+ if (_property_get_revert(p_name, r_ret)) { \
|
|
|
+ return true; \
|
|
|
+ } \
|
|
|
+ } \
|
|
|
+ return m_inherits::_property_get_revertv(p_name, r_ret); \
|
|
|
+ } \
|
|
|
_FORCE_INLINE_ void (Object::*_get_notification() const)(int) { \
|
|
|
return (void(Object::*)(int)) & m_class::_notification; \
|
|
|
} \
|
|
@@ -613,12 +637,16 @@ protected:
|
|
|
virtual bool _setv(const StringName &p_name, const Variant &p_property) { return false; };
|
|
|
virtual bool _getv(const StringName &p_name, Variant &r_property) const { return false; };
|
|
|
virtual void _get_property_listv(List<PropertyInfo> *p_list, bool p_reversed) const {};
|
|
|
+ virtual bool _property_can_revertv(const StringName &p_name) const { return false; };
|
|
|
+ virtual bool _property_get_revertv(const StringName &p_name, Variant &r_property) const { return false; };
|
|
|
virtual void _notificationv(int p_notification, bool p_reversed) {}
|
|
|
|
|
|
static void _bind_methods();
|
|
|
bool _set(const StringName &p_name, const Variant &p_property) { return false; };
|
|
|
bool _get(const StringName &p_name, Variant &r_property) const { return false; };
|
|
|
void _get_property_list(List<PropertyInfo> *p_list) const {};
|
|
|
+ bool _property_can_revert(const StringName &p_name) const { return false; };
|
|
|
+ bool _property_get_revert(const StringName &p_name, Variant &r_property) const { return false; };
|
|
|
void _notification(int p_notification) {}
|
|
|
|
|
|
_FORCE_INLINE_ static void (*_get_bind_methods())() {
|
|
@@ -633,6 +661,12 @@ protected:
|
|
|
_FORCE_INLINE_ void (Object::*_get_get_property_list() const)(List<PropertyInfo> *p_list) const {
|
|
|
return &Object::_get_property_list;
|
|
|
}
|
|
|
+ _FORCE_INLINE_ bool (Object::*_get_property_can_revert() const)(const StringName &p_name) const {
|
|
|
+ return &Object::_property_can_revert;
|
|
|
+ }
|
|
|
+ _FORCE_INLINE_ bool (Object::*_get_property_get_revert() const)(const StringName &p_name, Variant &) const {
|
|
|
+ return &Object::_property_get_revert;
|
|
|
+ }
|
|
|
_FORCE_INLINE_ void (Object::*_get_notification() const)(int) {
|
|
|
return &Object::_notification;
|
|
|
}
|
|
@@ -757,6 +791,8 @@ public:
|
|
|
Variant get_indexed(const Vector<StringName> &p_names, bool *r_valid = nullptr) const;
|
|
|
|
|
|
void get_property_list(List<PropertyInfo> *p_list, bool p_reversed = false) const;
|
|
|
+ bool property_can_revert(const String &p_name) const;
|
|
|
+ Variant property_get_revert(const String &p_name) const;
|
|
|
|
|
|
bool has_method(const StringName &p_method) const;
|
|
|
void get_method_list(List<MethodInfo> *p_list) const;
|