diff options
| author | Rémi Verschelde <rverschelde@gmail.com> | 2020-06-15 09:30:04 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-06-15 09:30:04 +0200 |
| commit | 152bb86141b1427524df73f9ed3f273a4b76bb8f (patch) | |
| tree | ba5e0515393022776d04bdca2ca53bd5d5b656d6 /core | |
| parent | fdc8b969755f3a4658801a2ebe2c1d975427527e (diff) | |
| parent | b3bc5aafc5dbe6559534bb1e19093e719afbf52c (diff) | |
| download | redot-engine-152bb86141b1427524df73f9ed3f273a4b76bb8f.tar.gz | |
Merge pull request #39479 from akien-mga/classdb-default-property-unique
Object: Add usage hint to instantiate Object properties in editor
Diffstat (limited to 'core')
| -rw-r--r-- | core/class_db.cpp | 18 | ||||
| -rw-r--r-- | core/object.h | 1 |
2 files changed, 18 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; diff --git a/core/object.h b/core/object.h index 95662f6208..5b46a0f93a 100644 --- a/core/object.h +++ b/core/object.h @@ -124,6 +124,7 @@ enum PropertyUsageFlags { PROPERTY_USAGE_RESOURCE_NOT_PERSISTENT = 1 << 24, PROPERTY_USAGE_KEYING_INCREMENTS = 1 << 25, // Used in inspector to increment property when keyed in animation player PROPERTY_USAGE_DEFERRED_SET_RESOURCE = 1 << 26, // when loading, the resource for this property can be set at the end of loading + PROPERTY_USAGE_EDITOR_INSTANTIATE_OBJECT = 1 << 27, // For Object properties, instantiate them when creating in editor. PROPERTY_USAGE_DEFAULT = PROPERTY_USAGE_STORAGE | PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_NETWORK, PROPERTY_USAGE_DEFAULT_INTL = PROPERTY_USAGE_STORAGE | PROPERTY_USAGE_EDITOR | PROPERTY_USAGE_NETWORK | PROPERTY_USAGE_INTERNATIONALIZED, |
