summaryrefslogtreecommitdiffstats
path: root/core/object
diff options
context:
space:
mode:
authorkobewi <kobewi4e@gmail.com>2023-04-07 14:01:57 +0200
committerkobewi <kobewi4e@gmail.com>2023-08-28 15:18:48 +0200
commit67db4693ebdc972eae2395fecd39dc174045b980 (patch)
tree54bd2a4097fd2b744459e45f3f14a66895a46cb2 /core/object
parent713bfaf5eac1eb8a770e5ee825db29de99f3d0f7 (diff)
downloadredot-engine-67db4693ebdc972eae2395fecd39dc174045b980.tar.gz
Expose _validate_property() for scripting
Diffstat (limited to 'core/object')
-rw-r--r--core/object/object.cpp6
-rw-r--r--core/object/script_language.h2
-rw-r--r--core/object/script_language_extension.h3
3 files changed, 11 insertions, 0 deletions
diff --git a/core/object/object.cpp b/core/object/object.cpp
index 4ae0ecdefd..b803d57cd9 100644
--- a/core/object/object.cpp
+++ b/core/object/object.cpp
@@ -526,6 +526,10 @@ void Object::get_property_list(List<PropertyInfo> *p_list, bool p_reversed) cons
void Object::validate_property(PropertyInfo &p_property) const {
_validate_propertyv(p_property);
+
+ if (script_instance) { // Call it last to allow user altering already validated properties.
+ script_instance->validate_property(p_property);
+ }
}
bool Object::property_can_revert(const StringName &p_name) const {
@@ -1604,6 +1608,8 @@ void Object::_bind_methods() {
plget.return_val.hint_string = "Dictionary";
BIND_OBJ_CORE_METHOD(plget);
+ BIND_OBJ_CORE_METHOD(MethodInfo(Variant::NIL, "_validate_property", PropertyInfo(Variant::DICTIONARY, "property")));
+
BIND_OBJ_CORE_METHOD(MethodInfo(Variant::BOOL, "_property_can_revert", PropertyInfo(Variant::STRING_NAME, "property")));
MethodInfo mipgr("_property_get_revert", PropertyInfo(Variant::STRING_NAME, "property"));
mipgr.return_val.name = "Variant";
diff --git a/core/object/script_language.h b/core/object/script_language.h
index 3ea6a6e4c3..1661e97c95 100644
--- a/core/object/script_language.h
+++ b/core/object/script_language.h
@@ -179,6 +179,7 @@ public:
virtual bool get(const StringName &p_name, Variant &r_ret) const = 0;
virtual void get_property_list(List<PropertyInfo> *p_properties) const = 0;
virtual Variant::Type get_property_type(const StringName &p_name, bool *r_is_valid = nullptr) const = 0;
+ virtual void validate_property(PropertyInfo &p_property) const = 0;
virtual bool property_can_revert(const StringName &p_name) const = 0;
virtual bool property_get_revert(const StringName &p_name, Variant &r_ret) const = 0;
@@ -462,6 +463,7 @@ public:
virtual bool get(const StringName &p_name, Variant &r_ret) const override;
virtual void get_property_list(List<PropertyInfo> *p_properties) const override;
virtual Variant::Type get_property_type(const StringName &p_name, bool *r_is_valid = nullptr) const override;
+ virtual void validate_property(PropertyInfo &p_property) const override {}
virtual bool property_can_revert(const StringName &p_name) const override { return false; };
virtual bool property_get_revert(const StringName &p_name, Variant &r_ret) const override { return false; };
diff --git a/core/object/script_language_extension.h b/core/object/script_language_extension.h
index 1a0ec29479..1aa3350de4 100644
--- a/core/object/script_language_extension.h
+++ b/core/object/script_language_extension.h
@@ -675,6 +675,9 @@ public:
}
return Variant::NIL;
}
+ virtual void validate_property(PropertyInfo &p_property) const override {
+ // TODO
+ }
virtual bool property_can_revert(const StringName &p_name) const override {
if (native_info->property_can_revert_func) {