Merge pull request #95175 from KoBeWi/bruh_can_revert
Fix implementation of `property_can_revert()` in various classes
This commit is contained in:
commit
9d5a7321a5
6 changed files with 32 additions and 65 deletions
|
@ -1167,22 +1167,16 @@ bool ProjectSettings::is_project_loaded() const {
|
|||
}
|
||||
|
||||
bool ProjectSettings::_property_can_revert(const StringName &p_name) const {
|
||||
if (!props.has(p_name)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return props[p_name].initial != props[p_name].variant;
|
||||
return props.has(p_name);
|
||||
}
|
||||
|
||||
bool ProjectSettings::_property_get_revert(const StringName &p_name, Variant &r_property) const {
|
||||
if (!props.has(p_name)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Duplicate so that if value is array or dictionary, changing the setting will not change the stored initial value.
|
||||
r_property = props[p_name].initial.duplicate();
|
||||
|
||||
const RBMap<StringName, ProjectSettings::VariantContainer>::Element *value = props.find(p_name);
|
||||
if (value) {
|
||||
r_property = value->value().initial.duplicate();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ProjectSettings::set_setting(const String &p_setting, const Variant &p_value) {
|
||||
|
|
|
@ -1424,24 +1424,20 @@ Variant _EDITOR_GET(const String &p_setting) {
|
|||
}
|
||||
|
||||
bool EditorSettings::_property_can_revert(const StringName &p_name) const {
|
||||
if (!props.has(p_name)) {
|
||||
return false;
|
||||
const VariantContainer *property = props.getptr(p_name);
|
||||
if (property) {
|
||||
return property->has_default_value;
|
||||
}
|
||||
|
||||
if (!props[p_name].has_default_value) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return props[p_name].initial != props[p_name].variant;
|
||||
}
|
||||
|
||||
bool EditorSettings::_property_get_revert(const StringName &p_name, Variant &r_property) const {
|
||||
if (!props.has(p_name) || !props[p_name].has_default_value) {
|
||||
return false;
|
||||
}
|
||||
|
||||
r_property = props[p_name].initial;
|
||||
const VariantContainer *value = props.getptr(p_name);
|
||||
if (value && value->has_default_value) {
|
||||
r_property = value->initial;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void EditorSettings::add_property_hint(const PropertyInfo &p_hint) {
|
||||
|
|
|
@ -186,25 +186,9 @@ bool MultiNodeEdit::_property_can_revert(const StringName &p_name) const {
|
|||
}
|
||||
|
||||
if (ClassDB::has_property(get_edited_class_name(), p_name)) {
|
||||
StringName class_name;
|
||||
for (const NodePath &E : nodes) {
|
||||
Node *node = es->get_node_or_null(E);
|
||||
if (!node) {
|
||||
continue;
|
||||
}
|
||||
|
||||
class_name = node->get_class_name();
|
||||
}
|
||||
|
||||
Variant default_value = ClassDB::class_get_default_property_value(class_name, p_name);
|
||||
for (const NodePath &E : nodes) {
|
||||
Node *node = es->get_node_or_null(E);
|
||||
if (!node) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (node->get(p_name) != default_value) {
|
||||
// A node that doesn't have the default value has been found, so show the revert button.
|
||||
if (node) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -121,13 +121,8 @@ bool EditorPropertyFontOTObject::_property_can_revert(const StringName &p_name)
|
|||
|
||||
if (name.begins_with("keys")) {
|
||||
int key = name.get_slicec('/', 1).to_int();
|
||||
if (defaults_dict.has(key) && dict.has(key)) {
|
||||
int value = dict[key];
|
||||
Vector3i range = defaults_dict[key];
|
||||
return range.z != value;
|
||||
return defaults_dict.has(key) && dict.has(key);
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -142,7 +137,6 @@ bool EditorPropertyFontOTObject::_property_get_revert(const StringName &p_name,
|
|||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
|
@ -1181,15 +1181,16 @@ void Node3D::_validate_property(PropertyInfo &p_property) const {
|
|||
}
|
||||
|
||||
bool Node3D::_property_can_revert(const StringName &p_name) const {
|
||||
if (p_name == "basis") {
|
||||
const String sname = p_name;
|
||||
if (sname == "basis") {
|
||||
return true;
|
||||
} else if (p_name == "scale") {
|
||||
} else if (sname == "scale") {
|
||||
return true;
|
||||
} else if (p_name == "quaternion") {
|
||||
} else if (sname == "quaternion") {
|
||||
return true;
|
||||
} else if (p_name == "rotation") {
|
||||
} else if (sname == "rotation") {
|
||||
return true;
|
||||
} else if (p_name == "position") {
|
||||
} else if (sname == "position") {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
@ -1198,35 +1199,36 @@ bool Node3D::_property_can_revert(const StringName &p_name) const {
|
|||
bool Node3D::_property_get_revert(const StringName &p_name, Variant &r_property) const {
|
||||
bool valid = false;
|
||||
|
||||
if (p_name == "basis") {
|
||||
const String sname = p_name;
|
||||
if (sname == "basis") {
|
||||
Variant variant = PropertyUtils::get_property_default_value(this, "transform", &valid);
|
||||
if (valid && variant.get_type() == Variant::Type::TRANSFORM3D) {
|
||||
r_property = Transform3D(variant).get_basis();
|
||||
} else {
|
||||
r_property = Basis();
|
||||
}
|
||||
} else if (p_name == "scale") {
|
||||
} else if (sname == "scale") {
|
||||
Variant variant = PropertyUtils::get_property_default_value(this, "transform", &valid);
|
||||
if (valid && variant.get_type() == Variant::Type::TRANSFORM3D) {
|
||||
r_property = Transform3D(variant).get_basis().get_scale();
|
||||
} else {
|
||||
r_property = Vector3(1.0, 1.0, 1.0);
|
||||
}
|
||||
} else if (p_name == "quaternion") {
|
||||
} else if (sname == "quaternion") {
|
||||
Variant variant = PropertyUtils::get_property_default_value(this, "transform", &valid);
|
||||
if (valid && variant.get_type() == Variant::Type::TRANSFORM3D) {
|
||||
r_property = Quaternion(Transform3D(variant).get_basis().get_rotation_quaternion());
|
||||
} else {
|
||||
r_property = Quaternion();
|
||||
}
|
||||
} else if (p_name == "rotation") {
|
||||
} else if (sname == "rotation") {
|
||||
Variant variant = PropertyUtils::get_property_default_value(this, "transform", &valid);
|
||||
if (valid && variant.get_type() == Variant::Type::TRANSFORM3D) {
|
||||
r_property = Transform3D(variant).get_basis().get_euler_normalized(data.euler_rotation_order);
|
||||
} else {
|
||||
r_property = Vector3();
|
||||
}
|
||||
} else if (p_name == "position") {
|
||||
} else if (sname == "position") {
|
||||
Variant variant = PropertyUtils::get_property_default_value(this, "transform", &valid);
|
||||
if (valid) {
|
||||
r_property = Transform3D(variant).get_origin();
|
||||
|
|
|
@ -382,14 +382,11 @@ void ShaderMaterial::_get_property_list(List<PropertyInfo> *p_list) const {
|
|||
|
||||
bool ShaderMaterial::_property_can_revert(const StringName &p_name) const {
|
||||
if (shader.is_valid()) {
|
||||
const StringName *pr = remap_cache.getptr(p_name);
|
||||
if (pr) {
|
||||
Variant default_value = RenderingServer::get_singleton()->shader_get_parameter_default(shader->get_rid(), *pr);
|
||||
Variant current_value = get_shader_parameter(*pr);
|
||||
return default_value.get_type() != Variant::NIL && default_value != current_value;
|
||||
} else if (p_name == "render_priority" || p_name == "next_pass") {
|
||||
if (remap_cache.has(p_name)) {
|
||||
return true;
|
||||
}
|
||||
const String sname = p_name;
|
||||
return sname == "render_priority" || sname == "next_pass";
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue