diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2020-06-12 13:16:14 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2020-06-12 14:30:18 +0200 |
commit | b3bc5aafc5dbe6559534bb1e19093e719afbf52c (patch) | |
tree | 850db91f87f2bd497c3fb0c662d7d3809a53c6fb /core/class_db.cpp | |
parent | 84abf5a979648081a9076ec6b342f5f9d33093d4 (diff) | |
download | redot-engine-b3bc5aafc5dbe6559534bb1e19093e719afbf52c.tar.gz |
Object: Add usage hint to instantiate Object properties in editor
Fixes #36372 as Path2D/Path3D's `curve` property no longer uses a Curve
instance as default value, but instead it gets a (unique) default Curve
instance when created through the editor (CreateDialog).
ClassDB gets a sanity check to ensure that we don't do the same mistake
for other properties in the future, but instead use the dedicated
property usage hint.
Fixes #36372.
Fixes #36650.
Supersedes #36644 and #36656.
Co-authored-by: Thakee Nathees <thakeenathees@gmail.com>
Co-authored-by: simpuid <utkarsh.email@yahoo.com>
Diffstat (limited to 'core/class_db.cpp')
-rw-r--r-- | core/class_db.cpp | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/core/class_db.cpp b/core/class_db.cpp index eed9ec17cb..05c9850c39 100644 --- a/core/class_db.cpp +++ b/core/class_db.cpp @@ -1386,7 +1386,23 @@ Variant ClassDB::class_get_default_property_value(const StringName &p_class, con if (r_valid != nullptr) { *r_valid = true; } - return default_values[p_class][p_property]; + + Variant var = default_values[p_class][p_property]; + +#ifdef DEBUG_ENABLED + // Some properties may have an instantiated Object as default value, + // (like Path2D's `curve` used to have), but that's not a good practice. + // Instead, those properties should use PROPERTY_USAGE_EDITOR_INSTANTIATE_OBJECT + // to be auto-instantiated when created in the editor. + if (var.get_type() == Variant::OBJECT) { + Object *obj = var.get_validated_object(); + if (obj) { + WARN_PRINT(vformat("Instantiated %s used as default value for %s's \"%s\" property.", obj->get_class(), p_class, p_property)); + } + } +#endif + + return var; } RWLock *ClassDB::lock = nullptr; |