Improve easing inspector usability
- Add `positive_only` property hint to disallow using negative presets. These values are clamped in several places in the editor already, so this avoids displaying presets that don't work. - Move the Zero preset at the end of the positive list to match the custom property editor. It's also used less often than Linear, Ease In and Ease Out. - Rename presets to be consistent between the easing property editor and custom property editor. - Remove unused `inout` hint which was redundant since it was already the default.
This commit is contained in:
parent
5ecd61a315
commit
6059a9b624
@ -50,7 +50,7 @@ enum PropertyHint {
|
||||
PROPERTY_HINT_RANGE, ///< hint_text = "min,max[,step][,or_greater][,or_lesser][,no_slider][,radians][,degrees][,exp][,suffix:<keyword>] range.
|
||||
PROPERTY_HINT_ENUM, ///< hint_text= "val1,val2,val3,etc"
|
||||
PROPERTY_HINT_ENUM_SUGGESTION, ///< hint_text= "val1,val2,val3,etc"
|
||||
PROPERTY_HINT_EXP_EASING, /// exponential easing function (Math::ease) use "attenuation" hint string to revert (flip h), "full" to also include in/out. (ie: "attenuation,inout")
|
||||
PROPERTY_HINT_EXP_EASING, /// exponential easing function (Math::ease) use "attenuation" hint string to revert (flip h), "positive_only" to exclude in-out and out-in. (ie: "attenuation,positive_only")
|
||||
PROPERTY_HINT_LINK,
|
||||
PROPERTY_HINT_FLAGS, ///< hint_text= "flag1,flag2,etc" (as bit flags)
|
||||
PROPERTY_HINT_LAYERS_2D_RENDER,
|
||||
|
@ -1580,6 +1580,11 @@ void EditorPropertyEasing::_spin_value_changed(double p_value) {
|
||||
// which can cause crashes and other issues.
|
||||
p_value = CLAMP(p_value, -1'000'000, 1'000'000);
|
||||
|
||||
if (positive_only) {
|
||||
// Force a positive or zero value if a negative value was manually entered by double-clicking.
|
||||
p_value = MAX(0.0, p_value);
|
||||
}
|
||||
|
||||
emit_changed(get_edited_property(), p_value);
|
||||
_spin_focus_exited();
|
||||
}
|
||||
@ -1591,9 +1596,9 @@ void EditorPropertyEasing::_spin_focus_exited() {
|
||||
easing_draw->update();
|
||||
}
|
||||
|
||||
void EditorPropertyEasing::setup(bool p_full, bool p_flip) {
|
||||
void EditorPropertyEasing::setup(bool p_positive_only, bool p_flip) {
|
||||
flip = p_flip;
|
||||
full = p_full;
|
||||
positive_only = p_positive_only;
|
||||
}
|
||||
|
||||
void EditorPropertyEasing::_notification(int p_what) {
|
||||
@ -1601,13 +1606,13 @@ void EditorPropertyEasing::_notification(int p_what) {
|
||||
case NOTIFICATION_THEME_CHANGED:
|
||||
case NOTIFICATION_ENTER_TREE: {
|
||||
preset->clear();
|
||||
preset->add_icon_item(get_theme_icon(SNAME("CurveConstant"), SNAME("EditorIcons")), "Zero", EASING_ZERO);
|
||||
preset->add_icon_item(get_theme_icon(SNAME("CurveLinear"), SNAME("EditorIcons")), "Linear", EASING_LINEAR);
|
||||
preset->add_icon_item(get_theme_icon(SNAME("CurveIn"), SNAME("EditorIcons")), "In", EASING_IN);
|
||||
preset->add_icon_item(get_theme_icon(SNAME("CurveOut"), SNAME("EditorIcons")), "Out", EASING_OUT);
|
||||
if (full) {
|
||||
preset->add_icon_item(get_theme_icon(SNAME("CurveInOut"), SNAME("EditorIcons")), "In-Out", EASING_IN_OUT);
|
||||
preset->add_icon_item(get_theme_icon(SNAME("CurveOutIn"), SNAME("EditorIcons")), "Out-In", EASING_OUT_IN);
|
||||
preset->add_icon_item(get_theme_icon(SNAME("CurveIn"), SNAME("EditorIcons")), "Ease In", EASING_IN);
|
||||
preset->add_icon_item(get_theme_icon(SNAME("CurveOut"), SNAME("EditorIcons")), "Ease Out", EASING_OUT);
|
||||
preset->add_icon_item(get_theme_icon(SNAME("CurveConstant"), SNAME("EditorIcons")), "Zero", EASING_ZERO);
|
||||
if (!positive_only) {
|
||||
preset->add_icon_item(get_theme_icon(SNAME("CurveInOut"), SNAME("EditorIcons")), "Ease In-Out", EASING_IN_OUT);
|
||||
preset->add_icon_item(get_theme_icon(SNAME("CurveOutIn"), SNAME("EditorIcons")), "Ease Out-In", EASING_OUT_IN);
|
||||
}
|
||||
easing_draw->set_custom_minimum_size(Size2(0, get_theme_font(SNAME("font"), SNAME("Label"))->get_height(get_theme_font_size(SNAME("font_size"), SNAME("Label"))) * 2));
|
||||
} break;
|
||||
@ -4105,20 +4110,20 @@ EditorProperty *EditorInspectorDefaultPlugin::get_editor_for_property(Object *p_
|
||||
case Variant::FLOAT: {
|
||||
if (p_hint == PROPERTY_HINT_EXP_EASING) {
|
||||
EditorPropertyEasing *editor = memnew(EditorPropertyEasing);
|
||||
bool full = true;
|
||||
bool positive_only = false;
|
||||
bool flip = false;
|
||||
Vector<String> hints = p_hint_text.split(",");
|
||||
const Vector<String> hints = p_hint_text.split(",");
|
||||
for (int i = 0; i < hints.size(); i++) {
|
||||
String h = hints[i].strip_edges();
|
||||
if (h == "attenuation") {
|
||||
const String hint = hints[i].strip_edges();
|
||||
if (hint == "attenuation") {
|
||||
flip = true;
|
||||
}
|
||||
if (h == "inout") {
|
||||
full = true;
|
||||
if (hint == "positive_only") {
|
||||
positive_only = true;
|
||||
}
|
||||
}
|
||||
|
||||
editor->setup(full, flip);
|
||||
editor->setup(positive_only, flip);
|
||||
return editor;
|
||||
|
||||
} else {
|
||||
|
@ -443,6 +443,7 @@ class EditorPropertyEasing : public EditorProperty {
|
||||
bool dragging = false;
|
||||
bool full = false;
|
||||
bool flip = false;
|
||||
bool positive_only = false;
|
||||
|
||||
enum {
|
||||
EASING_ZERO,
|
||||
@ -471,7 +472,7 @@ protected:
|
||||
|
||||
public:
|
||||
virtual void update_property() override;
|
||||
void setup(bool p_full, bool p_flip);
|
||||
void setup(bool p_positive_only, bool p_flip);
|
||||
EditorPropertyEasing();
|
||||
};
|
||||
|
||||
|
@ -445,8 +445,8 @@ bool CustomPropertyEditor::edit(Object *p_owner, const String &p_name, Variant::
|
||||
type_button->get_popup()->add_item(TTR("Ease Out"), EASING_EASE_OUT);
|
||||
if (hint_text != "attenuation") {
|
||||
type_button->get_popup()->add_item(TTR("Zero"), EASING_ZERO);
|
||||
type_button->get_popup()->add_item(TTR("Easing In-Out"), EASING_IN_OUT);
|
||||
type_button->get_popup()->add_item(TTR("Easing Out-In"), EASING_OUT_IN);
|
||||
type_button->get_popup()->add_item(TTR("Ease In-Out"), EASING_IN_OUT);
|
||||
type_button->get_popup()->add_item(TTR("Ease Out-In"), EASING_OUT_IN);
|
||||
}
|
||||
|
||||
type_button->show();
|
||||
|
@ -1249,8 +1249,8 @@ void Environment::_bind_methods() {
|
||||
ADD_GROUP("SSR", "ssr_");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "ssr_enabled"), "set_ssr_enabled", "is_ssr_enabled");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::INT, "ssr_max_steps", PROPERTY_HINT_RANGE, "1,512,1"), "set_ssr_max_steps", "get_ssr_max_steps");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssr_fade_in", PROPERTY_HINT_EXP_EASING), "set_ssr_fade_in", "get_ssr_fade_in");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssr_fade_out", PROPERTY_HINT_EXP_EASING), "set_ssr_fade_out", "get_ssr_fade_out");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssr_fade_in", PROPERTY_HINT_EXP_EASING, "positive_only"), "set_ssr_fade_in", "get_ssr_fade_in");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssr_fade_out", PROPERTY_HINT_EXP_EASING, "positive_only"), "set_ssr_fade_out", "get_ssr_fade_out");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssr_depth_tolerance", PROPERTY_HINT_RANGE, "0.01,128,0.1"), "set_ssr_depth_tolerance", "get_ssr_depth_tolerance");
|
||||
|
||||
// SSAO
|
||||
@ -1277,7 +1277,7 @@ void Environment::_bind_methods() {
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "ssao_enabled"), "set_ssao_enabled", "is_ssao_enabled");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssao_radius", PROPERTY_HINT_RANGE, "0.01,16,0.01,or_greater"), "set_ssao_radius", "get_ssao_radius");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssao_intensity", PROPERTY_HINT_RANGE, "0,16,0.01,or_greater"), "set_ssao_intensity", "get_ssao_intensity");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssao_power", PROPERTY_HINT_EXP_EASING), "set_ssao_power", "get_ssao_power");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssao_power", PROPERTY_HINT_EXP_EASING, "positive_only"), "set_ssao_power", "get_ssao_power");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssao_detail", PROPERTY_HINT_RANGE, "0,5,0.01"), "set_ssao_detail", "get_ssao_detail");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssao_horizon", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_ssao_horizon", "get_ssao_horizon");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "ssao_sharpness", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_ssao_sharpness", "get_ssao_sharpness");
|
||||
@ -1462,7 +1462,7 @@ void Environment::_bind_methods() {
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "volumetric_fog_gi_inject", PROPERTY_HINT_RANGE, "0.0,16,0.01,exp"), "set_volumetric_fog_gi_inject", "get_volumetric_fog_gi_inject");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "volumetric_fog_anisotropy", PROPERTY_HINT_RANGE, "-0.9,0.9,0.01"), "set_volumetric_fog_anisotropy", "get_volumetric_fog_anisotropy");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "volumetric_fog_length", PROPERTY_HINT_RANGE, "0,1024,0.01,or_greater"), "set_volumetric_fog_length", "get_volumetric_fog_length");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "volumetric_fog_detail_spread", PROPERTY_HINT_EXP_EASING), "set_volumetric_fog_detail_spread", "get_volumetric_fog_detail_spread");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "volumetric_fog_detail_spread", PROPERTY_HINT_EXP_EASING, "positive_only"), "set_volumetric_fog_detail_spread", "get_volumetric_fog_detail_spread");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "volumetric_fog_ambient_inject", PROPERTY_HINT_RANGE, "0.0,16,0.01,exp"), "set_volumetric_fog_ambient_inject", "get_volumetric_fog_ambient_inject");
|
||||
ADD_SUBGROUP("Temporal Reprojection", "volumetric_fog_temporal_reprojection_");
|
||||
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "volumetric_fog_temporal_reprojection_enabled"), "set_volumetric_fog_temporal_reprojection_enabled", "is_volumetric_fog_temporal_reprojection_enabled");
|
||||
|
Loading…
Reference in New Issue
Block a user