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>
This commit is contained in:
parent
84abf5a979
commit
b3bc5aafc5
7 changed files with 54 additions and 30 deletions
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue