summaryrefslogtreecommitdiff
path: root/editor/plugins
diff options
context:
space:
mode:
authorYuri Roubinsky <chaosus89@gmail.com>2021-10-13 15:25:12 +0300
committerYuri Roubinsky <chaosus89@gmail.com>2021-10-13 15:25:12 +0300
commite270644b2061fa43c61c6b8c3e4218b95dcd4d74 (patch)
tree8f3e1eae548c367a24ae0eec0be2463445bbca40 /editor/plugins
parent3be18d3d3796550ecb13cdec579bbbfeb3f529f9 (diff)
Add a default input parameter field to CurveTexture (in visual shaders)
Diffstat (limited to 'editor/plugins')
-rw-r--r--editor/plugins/visual_shader_editor_plugin.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/editor/plugins/visual_shader_editor_plugin.cpp b/editor/plugins/visual_shader_editor_plugin.cpp
index 48f64e041c..0a067dfc17 100644
--- a/editor/plugins/visual_shader_editor_plugin.cpp
+++ b/editor/plugins/visual_shader_editor_plugin.cpp
@@ -491,6 +491,35 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id) {
bool is_curve = curve.is_valid() || curve_xyz.is_valid();
if (is_curve) {
+ // a default value handling
+ {
+ Variant default_value;
+ bool port_left_used = false;
+
+ for (const VisualShader::Connection &E : connections) {
+ if (E.to_node == p_id && E.to_port == 0) {
+ port_left_used = true;
+ break;
+ }
+ }
+
+ if (!port_left_used) {
+ default_value = vsnode->get_input_port_default_value(0);
+ }
+
+ Button *button = memnew(Button);
+ custom_editor->add_child(button);
+ register_default_input_button(p_id, 0, button);
+ custom_editor->move_child(button, 0);
+
+ button->connect("pressed", callable_mp(VisualShaderEditor::get_singleton(), &VisualShaderEditor::_edit_port_default_input), varray(button, p_id, 0));
+ if (default_value.get_type() != Variant::NIL) {
+ set_input_port_default_value(p_type, p_id, 0, default_value);
+ } else {
+ button->hide();
+ }
+ }
+
VisualShaderEditor::get_singleton()->graph->add_child(node);
VisualShaderEditor::get_singleton()->_update_created_node(node);
@@ -643,6 +672,7 @@ void VisualShaderGraphPlugin::add_node(VisualShader::Type p_type, int p_id) {
for (const VisualShader::Connection &E : connections) {
if (E.to_node == p_id && E.to_port == j) {
port_left_used = true;
+ break;
}
}
}