mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 05:31:01 +00:00 
			
		
		
		
	Edit default values. WARNING!!!
Do not merge these changes, default values are not compiled into shaders yet!
This commit is contained in:
		
							parent
							
								
									cbf05355ed
								
							
						
					
					
						commit
						ea448cb779
					
				
					 11 changed files with 890 additions and 401 deletions
				
			
		|  | @ -29,6 +29,7 @@ | |||
| #include "shader_graph_editor_plugin.h" | ||||
| 
 | ||||
| 
 | ||||
| #include "scene/gui/check_box.h" | ||||
| #include "scene/gui/menu_button.h" | ||||
| #include "scene/gui/panel.h" | ||||
| #include "spatial_editor_plugin.h" | ||||
|  | @ -840,6 +841,7 @@ void ShaderGraphView::_xform_input_changed(int p_id, Node *p_button){ | |||
| 	ped_popup->set_pos(tb->get_global_pos()+Vector2(0,tb->get_size().height)); | ||||
| 	ped_popup->set_size(tb->get_size()); | ||||
| 	edited_id=p_id; | ||||
| 	edited_def=-1; | ||||
| 	ped_popup->edit(NULL,"",Variant::TRANSFORM,graph->xform_input_node_get_value(type,p_id),PROPERTY_HINT_NONE,""); | ||||
| 	ped_popup->popup(); | ||||
| 
 | ||||
|  | @ -850,6 +852,7 @@ void ShaderGraphView::_xform_const_changed(int p_id, Node *p_button){ | |||
| 	ped_popup->set_pos(tb->get_global_pos()+Vector2(0,tb->get_size().height)); | ||||
| 	ped_popup->set_size(tb->get_size()); | ||||
| 	edited_id=p_id; | ||||
| 	edited_def=-1; | ||||
| 	ped_popup->edit(NULL,"",Variant::TRANSFORM,graph->xform_const_node_get_value(type,p_id),PROPERTY_HINT_NONE,""); | ||||
| 	ped_popup->popup(); | ||||
| 
 | ||||
|  | @ -879,6 +882,35 @@ void ShaderGraphView::_cube_input_change(int p_id){ | |||
| 
 | ||||
| void ShaderGraphView::_variant_edited() { | ||||
| 
 | ||||
| 	if (edited_def != -1) { | ||||
| 
 | ||||
| 		Variant v = ped_popup->get_variant(); | ||||
| 		Variant v2 = graph->default_get_value(type,edited_id,edited_def); | ||||
| 		if (v2.get_type() == Variant::NIL) | ||||
| 			switch (v.get_type()) { | ||||
| 			case Variant::VECTOR3: | ||||
| 				v2=Vector3(); | ||||
| 				break; | ||||
| 			case Variant::REAL: | ||||
| 				v2=0.0; | ||||
| 				break; | ||||
| 			case Variant::TRANSFORM: | ||||
| 				v2=Transform(); | ||||
| 				break; | ||||
| 			case Variant::COLOR: | ||||
| 				v2=Color(); | ||||
| 				break; | ||||
| 			} | ||||
| 		UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo(); | ||||
| 		ur->create_action("Change default value"); | ||||
| 		ur->add_do_method(graph.ptr(),"default_set_value",type,edited_id,edited_def, v); | ||||
| 		ur->add_undo_method(graph.ptr(),"default_set_value",type,edited_id,edited_def, v2); | ||||
| 		ur->add_do_method(this,"_update_graph"); | ||||
| 		ur->add_undo_method(this,"_update_graph"); | ||||
| 		ur->commit_action(); | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	if (graph->node_get_type(type,edited_id)==ShaderGraph::NODE_XFORM_CONST) { | ||||
| 
 | ||||
| 		UndoRedo *ur=EditorNode::get_singleton()->get_undo_redo(); | ||||
|  | @ -1043,6 +1075,7 @@ void ShaderGraphView::_tex_edited(int p_id,Node* p_button) { | |||
| 	ped_popup->set_pos(tb->get_global_pos()+Vector2(0,tb->get_size().height)); | ||||
| 	ped_popup->set_size(tb->get_size()); | ||||
| 	edited_id=p_id; | ||||
| 	edited_def=-1; | ||||
| 	ped_popup->edit(NULL,"",Variant::OBJECT,graph->texture_input_node_get_value(type,p_id),PROPERTY_HINT_RESOURCE_TYPE,"Texture"); | ||||
| } | ||||
| 
 | ||||
|  | @ -1052,6 +1085,7 @@ void ShaderGraphView::_cube_edited(int p_id,Node* p_button) { | |||
| 	ped_popup->set_pos(tb->get_global_pos()+Vector2(0,tb->get_size().height)); | ||||
| 	ped_popup->set_size(tb->get_size()); | ||||
| 	edited_id=p_id; | ||||
| 	edited_def=-1; | ||||
| 	ped_popup->edit(NULL,"",Variant::OBJECT,graph->cubemap_input_node_get_value(type,p_id),PROPERTY_HINT_RESOURCE_TYPE,"CubeMap"); | ||||
| } | ||||
| 
 | ||||
|  | @ -1260,6 +1294,97 @@ void ShaderGraphView::_delete_nodes_request() | |||
| 
 | ||||
| } | ||||
| 
 | ||||
| void ShaderGraphView::_default_changed(int p_id, Node *p_button, int p_param, int v_type, String p_hint) | ||||
| { | ||||
| 	ToolButton *tb = p_button->cast_to<ToolButton>(); | ||||
| 	ped_popup->set_pos(tb->get_global_pos()+Vector2(0,tb->get_size().height)); | ||||
| 	ped_popup->set_size(tb->get_size()); | ||||
| 	edited_id=p_id; | ||||
| 	edited_def=p_param; | ||||
| 	Variant::Type vt = (Variant::Type)v_type; | ||||
| 	Variant v = graph->default_get_value(type,p_id,edited_def); | ||||
| 	int h=PROPERTY_HINT_NONE; | ||||
| 	if (v.get_type() == Variant::NIL) | ||||
| 		switch (vt) { | ||||
| 		case Variant::VECTOR3: | ||||
| 			v=Vector3(); | ||||
| 			break; | ||||
| 		case Variant::REAL: | ||||
| 			h=PROPERTY_HINT_RANGE; | ||||
| 			v=0.0; | ||||
| 			break; | ||||
| 		case Variant::TRANSFORM: | ||||
| 			v=Transform(); | ||||
| 			break; | ||||
| 		case Variant::COLOR: | ||||
| 			h=PROPERTY_HINT_COLOR_NO_ALPHA; | ||||
| 			v=Color(); | ||||
| 			break; | ||||
| 		} | ||||
| 
 | ||||
| 	ped_popup->edit(NULL,"",vt,v,h,p_hint); | ||||
| 
 | ||||
| 	ped_popup->popup(); | ||||
| } | ||||
| 
 | ||||
| ToolButton *ShaderGraphView::make_label(String text, Variant::Type v_type) { | ||||
| 	ToolButton *l = memnew( ToolButton ); | ||||
| 	l->set_text(text); | ||||
| 	l->set_text_align(ToolButton::ALIGN_LEFT); | ||||
| 	l->add_style_override("hover", l->get_stylebox("normal", "ToolButton")); | ||||
| 	l->add_style_override("pressed", l->get_stylebox("normal", "ToolButton")); | ||||
| 	l->add_style_override("focus", l->get_stylebox("normal", "ToolButton")); | ||||
| 	switch (v_type) { | ||||
| 	case Variant::REAL: | ||||
| 		l->set_icon(ped_popup->get_icon("Real", "EditorIcons")); | ||||
| 		break; | ||||
| 	case Variant::VECTOR3: | ||||
| 		l->set_icon(ped_popup->get_icon("Vector", "EditorIcons")); | ||||
| 		break; | ||||
| 	case Variant::TRANSFORM: | ||||
| 		l->set_icon(ped_popup->get_icon("Matrix", "EditorIcons")); | ||||
| 		break; | ||||
| 	case Variant::COLOR: | ||||
| 		l->set_icon(ped_popup->get_icon("Color", "EditorIcons")); | ||||
| 	} | ||||
| 	return l; | ||||
| } | ||||
| 
 | ||||
| ToolButton *ShaderGraphView::make_editor(String text,GraphNode* gn,int p_id,int param,Variant::Type v_type, String p_hint) { | ||||
| 	ToolButton *edit = memnew( ToolButton ); | ||||
| 	edit->set_text(text); | ||||
| 	edit->set_text_align(ToolButton::ALIGN_LEFT); | ||||
| 	edit->set_flat(false); | ||||
| 	edit->add_style_override("normal", gn->get_stylebox("defaultframe", "GraphNode")); | ||||
| 	edit->add_style_override("hover", gn->get_stylebox("defaultframe", "GraphNode")); | ||||
| 	edit->add_style_override("pressed", gn->get_stylebox("defaultframe", "GraphNode")); | ||||
| 	edit->add_style_override("focus", gn->get_stylebox("defaultfocus", "GraphNode")); | ||||
| 	edit->connect("pressed",this,"_default_changed",varray(p_id,edit,param,v_type,p_hint)); | ||||
| 
 | ||||
| 	switch (v_type) { | ||||
| 	case Variant::REAL: | ||||
| 		edit->set_icon(ped_popup->get_icon("Real", "EditorIcons")); | ||||
| 		break; | ||||
| 	case Variant::VECTOR3: | ||||
| 		edit->set_icon(ped_popup->get_icon("Vector", "EditorIcons")); | ||||
| 		break; | ||||
| 	case Variant::TRANSFORM: | ||||
| 		edit->set_icon(ped_popup->get_icon("Matrix", "EditorIcons")); | ||||
| 		break; | ||||
| 	case Variant::COLOR: | ||||
| 		Image icon_color = Image(15,15,false,Image::FORMAT_RGB); | ||||
| 		Color c = graph->default_get_value(type,p_id,param); | ||||
| 		for (int x=1;x<14;x++) | ||||
| 			for (int y=1;y<14;y++) | ||||
| 				icon_color.put_pixel(x,y,c); | ||||
| 		Ref<ImageTexture> t; | ||||
| 		t.instance(); | ||||
| 		t->create_from_image(icon_color); | ||||
| 		edit->set_icon(t); | ||||
| 		break; | ||||
| 	} | ||||
| 	return edit; | ||||
| } | ||||
| 
 | ||||
| void ShaderGraphView::_create_node(int p_id) { | ||||
| 
 | ||||
|  | @ -1273,6 +1398,9 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 		Color(0,1,1) | ||||
| 	}; | ||||
| 
 | ||||
| 	const String hint_spin = "-65536,65535,0.001"; | ||||
| 	const String hint_slider = "0.0,1.0,0.01,slider"; | ||||
| 
 | ||||
| 
 | ||||
| 	switch(graph->node_get_type(type,p_id)) { | ||||
| 
 | ||||
|  | @ -1377,7 +1505,12 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 		gn->set_title("ScreenTex"); | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("UV"))); | ||||
| 		if (!graph->is_slot_connected(type,p_id,0)) { | ||||
| 			Vector3 v = graph->default_get_value(type, p_id, 0); | ||||
| 			hbc->add_child(make_editor("UV: " + v,gn,p_id,0,Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			hbc->add_child(make_label("UV",Variant::VECTOR3)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		hbc->add_child( memnew(Label("RGB"))); | ||||
| 		gn->add_child(hbc); | ||||
|  | @ -1411,11 +1544,21 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 
 | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("a"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("a",Variant::REAL)); | ||||
| 		} else { | ||||
| 			float v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("a: ")+Variant(v),gn,p_id,0,Variant::REAL,hint_spin)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		hbc->add_child( memnew(Label("out"))); | ||||
| 		gn->add_child(hbc); | ||||
| 		gn->add_child( memnew(Label("b"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 1)) { | ||||
| 			gn->add_child(make_label("b",Variant::REAL)); | ||||
| 		} else { | ||||
| 			float v = graph->default_get_value(type,p_id,1); | ||||
| 			gn->add_child(make_editor(String("b: ")+Variant(v),gn,p_id,1,Variant::REAL,hint_spin)); | ||||
| 		} | ||||
| 
 | ||||
| 		gn->set_slot(1,true,ShaderGraph::SLOT_TYPE_SCALAR,typecol[ShaderGraph::SLOT_TYPE_SCALAR],true,ShaderGraph::SLOT_TYPE_SCALAR,typecol[ShaderGraph::SLOT_TYPE_SCALAR]); | ||||
| 		gn->set_slot(2,true,ShaderGraph::SLOT_TYPE_SCALAR,typecol[ShaderGraph::SLOT_TYPE_SCALAR],false,0,Color()); | ||||
|  | @ -1449,11 +1592,21 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 
 | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("a"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("a",Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("a: ")+v,gn,p_id,0,Variant::VECTOR3)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		hbc->add_child( memnew(Label("out"))); | ||||
| 		gn->add_child(hbc); | ||||
| 		gn->add_child( memnew(Label("b"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 1)) { | ||||
| 			gn->add_child(make_label("b",Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,1); | ||||
| 			gn->add_child(make_editor(String("b: ")+v,gn,p_id,1,Variant::VECTOR3)); | ||||
| 		} | ||||
| 
 | ||||
| 		gn->set_slot(1,true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC],true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC]); | ||||
| 		gn->set_slot(2,true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC],false,0,Color()); | ||||
|  | @ -1481,12 +1634,22 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 
 | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("a"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("a",Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("a: ")+v,gn,p_id,0,Variant::VECTOR3)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		hbc->add_child( memnew(Label("out"))); | ||||
| 		gn->add_child(hbc); | ||||
| 		gn->add_child( memnew(Label("b"))); | ||||
| 
 | ||||
| 		if (graph->is_slot_connected(type, p_id, 1)) { | ||||
| 			gn->add_child(make_label("b",Variant::REAL)); | ||||
| 		} else { | ||||
| 			float v = graph->default_get_value(type,p_id,1); | ||||
| 			gn->add_child(make_editor(String("b: ")+Variant(v),gn,p_id,1,Variant::REAL,hint_spin)); | ||||
| 		} | ||||
| 		gn->set_slot(1,true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC],true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC]); | ||||
| 		gn->set_slot(2,true,ShaderGraph::SLOT_TYPE_SCALAR,typecol[ShaderGraph::SLOT_TYPE_SCALAR],false,0,Color()); | ||||
| 
 | ||||
|  | @ -1519,11 +1682,19 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 
 | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("a"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("a",Variant::COLOR)); | ||||
| 		} else { | ||||
| 			hbc->add_child(make_editor(String("a: "),gn,p_id,0,Variant::COLOR)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		hbc->add_child( memnew(Label("out"))); | ||||
| 		gn->add_child(hbc); | ||||
| 		gn->add_child( memnew(Label("b"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 1)) { | ||||
| 			gn->add_child(make_label("b",Variant::COLOR)); | ||||
| 		} else { | ||||
| 			gn->add_child(make_editor(String("b: "),gn,p_id,1,Variant::COLOR)); | ||||
| 		} | ||||
| 
 | ||||
| 		gn->set_slot(1,true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC],true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC]); | ||||
| 		gn->set_slot(2,true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC],false,0,Color()); | ||||
|  | @ -1533,11 +1704,19 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 
 | ||||
| 		gn->set_title("XFMult"); | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_child( memnew(Label("a"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("a",Variant::TRANSFORM)); | ||||
| 		} else { | ||||
| 			hbc->add_child(make_editor(String("a: edit..."),gn,p_id,0,Variant::TRANSFORM)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		hbc->add_child( memnew(Label("out"))); | ||||
| 		gn->add_child(hbc); | ||||
| 		gn->add_child( memnew(Label("b"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 1)) { | ||||
| 			gn->add_child(make_label("b",Variant::TRANSFORM)); | ||||
| 		} else { | ||||
| 			gn->add_child(make_editor(String("b: edit..."),gn,p_id,1,Variant::TRANSFORM)); | ||||
| 		} | ||||
| 
 | ||||
| 		gn->set_slot(0,true,ShaderGraph::SLOT_TYPE_XFORM,typecol[ShaderGraph::SLOT_TYPE_XFORM],true,ShaderGraph::SLOT_TYPE_XFORM,typecol[ShaderGraph::SLOT_TYPE_XFORM]); | ||||
| 		gn->set_slot(1,true,ShaderGraph::SLOT_TYPE_XFORM,typecol[ShaderGraph::SLOT_TYPE_XFORM],false,0,Color()); | ||||
|  | @ -1548,8 +1727,7 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 
 | ||||
| 		gn->set_title("XFVecMult"); | ||||
| 
 | ||||
| 		Button *button = memnew( Button("RotOnly")); | ||||
| 		button->set_toggle_mode(true); | ||||
| 		CheckBox *button = memnew (CheckBox("RotOnly")); | ||||
| 		button->set_pressed(graph->xform_vec_mult_node_get_no_translation(type,p_id)); | ||||
| 		button->connect("toggled",this,"_xform_inv_rev_changed",varray(p_id)); | ||||
| 
 | ||||
|  | @ -1557,13 +1735,22 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 
 | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("xf"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("xf",Variant::TRANSFORM)); | ||||
| 		} else { | ||||
| 			hbc->add_child(make_editor(String("xf: edit..."),gn,p_id,0,Variant::TRANSFORM)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		Label *l = memnew(Label("out")); | ||||
| 		l->set_align(Label::ALIGN_RIGHT); | ||||
| 		hbc->add_child( l); | ||||
| 		gn->add_child(hbc); | ||||
| 		gn->add_child( memnew(Label("vec"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 1)) { | ||||
| 			gn->add_child(make_label("a",Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,1); | ||||
| 			gn->add_child(make_editor(String("a: ")+v,gn,p_id,1,Variant::VECTOR3)); | ||||
| 		} | ||||
| 
 | ||||
| 		gn->set_slot(1,true,ShaderGraph::SLOT_TYPE_XFORM,typecol[ShaderGraph::SLOT_TYPE_XFORM],true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC]); | ||||
| 		gn->set_slot(2,true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC],false,0,Color()); | ||||
|  | @ -1574,17 +1761,25 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 		gn->set_title("XFVecInvMult"); | ||||
| 
 | ||||
| 
 | ||||
| 		Button *button = memnew( Button("RotOnly")); | ||||
| 		button->set_toggle_mode(true); | ||||
| 		CheckBox *button = memnew( CheckBox("RotOnly")); | ||||
| 		button->set_pressed(graph->xform_vec_mult_node_get_no_translation(type,p_id)); | ||||
| 		button->connect("toggled",this,"_xform_inv_rev_changed",varray(p_id)); | ||||
| 
 | ||||
| 		gn->add_child(button); | ||||
| 
 | ||||
| 		gn->add_child( memnew(Label("vec"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			gn->add_child(make_label("a",Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,0); | ||||
| 			gn->add_child(make_editor(String("a: ")+v,gn,p_id,0,Variant::VECTOR3)); | ||||
| 		} | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("xf"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 1)) { | ||||
| 			hbc->add_child(make_label("xf", Variant::TRANSFORM)); | ||||
| 		} else { | ||||
| 			hbc->add_child(make_editor(String("xf: edit..."),gn,p_id,1,Variant::TRANSFORM)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		Label *l = memnew(Label("out")); | ||||
| 		l->set_align(Label::ALIGN_RIGHT); | ||||
|  | @ -1633,7 +1828,12 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 		gn->add_child(ob); | ||||
| 
 | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_child( memnew(Label("in"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("in", Variant::REAL)); | ||||
| 		} else { | ||||
| 			float v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("in: ")+Variant(v),gn,p_id,0,Variant::REAL,hint_spin)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		hbc->add_child( memnew(Label("out"))); | ||||
| 		gn->add_child(hbc); | ||||
|  | @ -1668,7 +1868,12 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 
 | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("in"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("in", Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("in: ")+v,gn,p_id,0,Variant::VECTOR3)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		hbc->add_child( memnew(Label("out"))); | ||||
| 		gn->add_child(hbc); | ||||
|  | @ -1679,7 +1884,12 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 	case ShaderGraph::NODE_VEC_LEN: { | ||||
| 		gn->set_title("VecLength"); | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_child( memnew(Label("in"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("in", Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("in: ")+v,gn,p_id,0,Variant::VECTOR3)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		hbc->add_child( memnew(Label("len"))); | ||||
| 		gn->add_child(hbc); | ||||
|  | @ -1692,11 +1902,21 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 		gn->set_title("DotProduct"); | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("a"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("a", Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("a: ")+v,gn,p_id,0,Variant::VECTOR3)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		hbc->add_child( memnew(Label("dp"))); | ||||
| 		gn->add_child(hbc); | ||||
| 		gn->add_child( memnew(Label("b"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 1)) { | ||||
| 			gn->add_child(make_label("b", Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,1); | ||||
| 			gn->add_child(make_editor(String("b: ")+v,gn,p_id,1,Variant::VECTOR3)); | ||||
| 		} | ||||
| 
 | ||||
| 		gn->set_slot(0,true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC],true,ShaderGraph::SLOT_TYPE_SCALAR,typecol[ShaderGraph::SLOT_TYPE_SCALAR]); | ||||
| 		gn->set_slot(1,true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC],false,0,Color()); | ||||
|  | @ -1707,7 +1927,12 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 		gn->set_title("Vec2Scalar"); | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("vec"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("vec", Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("vec: ")+v,gn,p_id,0,Variant::VECTOR3)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		Label *l=memnew(Label("x")); | ||||
| 		l->set_align(Label::ALIGN_RIGHT); | ||||
|  | @ -1732,12 +1957,27 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 
 | ||||
| 		gn->set_title("Scalar2Vec"); | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_child( memnew(Label("x"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("x", Variant::REAL)); | ||||
| 		} else { | ||||
| 			float v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("x: ")+Variant(v),gn,p_id,0,Variant::REAL)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		hbc->add_child( memnew(Label("vec"))); | ||||
| 		gn->add_child(hbc); | ||||
| 		gn->add_child( memnew(Label("y"))); | ||||
| 		gn->add_child( memnew(Label("z"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 1)) { | ||||
| 			gn->add_child(make_label("y", Variant::REAL)); | ||||
| 		} else { | ||||
| 			float v = graph->default_get_value(type,p_id,1); | ||||
| 			gn->add_child(make_editor(String("y: ")+Variant(v),gn,p_id,1,Variant::REAL)); | ||||
| 		} | ||||
| 		if (graph->is_slot_connected(type, p_id, 2)) { | ||||
| 			gn->add_child(make_label("in", Variant::REAL)); | ||||
| 		} else { | ||||
| 			float v = graph->default_get_value(type,p_id,2); | ||||
| 			gn->add_child(make_editor(String("in: ")+Variant(v),gn,p_id,2,Variant::REAL)); | ||||
| 		} | ||||
| 
 | ||||
| 		gn->set_slot(0,true,ShaderGraph::SLOT_TYPE_SCALAR,typecol[ShaderGraph::SLOT_TYPE_SCALAR],true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC]); | ||||
| 		gn->set_slot(1,true,ShaderGraph::SLOT_TYPE_SCALAR,typecol[ShaderGraph::SLOT_TYPE_SCALAR],false,0,Color()); | ||||
|  | @ -1749,13 +1989,33 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 		gn->set_title("Vec2XForm"); | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("x"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("x", Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("x: ")+v,gn,p_id,0,Variant::VECTOR3)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		hbc->add_child( memnew(Label("xf"))); | ||||
| 		gn->add_child(hbc); | ||||
| 		gn->add_child( memnew(Label("y"))); | ||||
| 		gn->add_child( memnew(Label("z"))); | ||||
| 		gn->add_child( memnew(Label("ofs"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 1)) { | ||||
| 			gn->add_child(make_label("y", Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,1); | ||||
| 			gn->add_child(make_editor(String("y: ")+v,gn,p_id,1,Variant::VECTOR3)); | ||||
| 		} | ||||
| 		if (graph->is_slot_connected(type, p_id, 2)) { | ||||
| 			gn->add_child(make_label("z", Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,2); | ||||
| 			gn->add_child(make_editor(String("z: ")+v,gn,p_id,2,Variant::VECTOR3)); | ||||
| 		} | ||||
| 		if (graph->is_slot_connected(type, p_id, 3)) { | ||||
| 			gn->add_child(make_label("ofs", Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,3); | ||||
| 			gn->add_child(make_editor(String("ofs: ")+v,gn,p_id,3,Variant::VECTOR3)); | ||||
| 		} | ||||
| 
 | ||||
| 		gn->set_slot(0,true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC],true,ShaderGraph::SLOT_TYPE_XFORM,typecol[ShaderGraph::SLOT_TYPE_XFORM]); | ||||
| 		gn->set_slot(1,true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC],false,0,Color()); | ||||
|  | @ -1769,7 +2029,11 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 
 | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("xf"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("fx", Variant::TRANSFORM)); | ||||
| 		} else { | ||||
| 			hbc->add_child(make_editor(String("fx: edit..."),gn,p_id,0,Variant::TRANSFORM)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		Label *l=memnew(Label("x")); | ||||
| 		l->set_align(Label::ALIGN_RIGHT); | ||||
|  | @ -1796,12 +2060,27 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 		gn->set_title("ScalarInterp"); | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("a"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("a", Variant::REAL)); | ||||
| 		} else { | ||||
| 			float v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("a: ")+Variant(v),gn,p_id,0,Variant::REAL,hint_spin)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		hbc->add_child( memnew(Label("interp"))); | ||||
| 		gn->add_child(hbc); | ||||
| 		gn->add_child( memnew(Label("b"))); | ||||
| 		gn->add_child( memnew(Label("c"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 1)) { | ||||
| 			gn->add_child(make_label("b", Variant::REAL)); | ||||
| 		} else { | ||||
| 			float v = graph->default_get_value(type,p_id,1); | ||||
| 			gn->add_child(make_editor(String("b: ")+Variant(v),gn,p_id,1,Variant::REAL,hint_spin)); | ||||
| 		} | ||||
| 		if (graph->is_slot_connected(type, p_id, 2)) { | ||||
| 			gn->add_child(make_label("c", Variant::REAL)); | ||||
| 		} else { | ||||
| 			float v = graph->default_get_value(type,p_id,2); | ||||
| 			gn->add_child(make_editor(String("c: ")+Variant(v),gn,p_id,2,Variant::REAL,hint_slider)); | ||||
| 		} | ||||
| 
 | ||||
| 		gn->set_slot(0,true,ShaderGraph::SLOT_TYPE_SCALAR,typecol[ShaderGraph::SLOT_TYPE_SCALAR],true,ShaderGraph::SLOT_TYPE_SCALAR,typecol[ShaderGraph::SLOT_TYPE_SCALAR]); | ||||
| 		gn->set_slot(1,true,ShaderGraph::SLOT_TYPE_SCALAR,typecol[ShaderGraph::SLOT_TYPE_SCALAR],false,0,Color()); | ||||
|  | @ -1813,12 +2092,27 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 
 | ||||
| 		gn->set_title("VecInterp"); | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_child( memnew(Label("a"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("a", Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("a: ")+v,gn,p_id,0,Variant::VECTOR3)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		hbc->add_child( memnew(Label("interp"))); | ||||
| 		gn->add_child(hbc); | ||||
| 		gn->add_child( memnew(Label("b"))); | ||||
| 		gn->add_child( memnew(Label("c"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 1)) { | ||||
| 			gn->add_child(make_label("b", Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,1); | ||||
| 			gn->add_child(make_editor(String("b: ")+v,gn,p_id,1,Variant::VECTOR3)); | ||||
| 		} | ||||
| 		if (graph->is_slot_connected(type, p_id, 2)) { | ||||
| 			gn->add_child(make_label("c", Variant::REAL)); | ||||
| 		} else { | ||||
| 			float v = graph->default_get_value(type,p_id,2); | ||||
| 			gn->add_child(make_editor(String("c: ")+Variant(v),gn,p_id,2,Variant::REAL,hint_slider)); | ||||
| 		} | ||||
| 
 | ||||
| 		gn->set_slot(0,true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC],true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC]); | ||||
| 		gn->set_slot(1,true,ShaderGraph::SLOT_TYPE_VEC,typecol[ShaderGraph::SLOT_TYPE_VEC],false,0,Color()); | ||||
|  | @ -1857,7 +2151,12 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 
 | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("c"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("c", Variant::REAL)); | ||||
| 		} else { | ||||
| 			float v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("c: ")+Variant(v),gn,p_id,0,Variant::REAL,hint_slider)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		Label *l=memnew(Label("rgb")); | ||||
| 		l->set_align(Label::ALIGN_RIGHT); | ||||
|  | @ -1902,7 +2201,12 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 
 | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("c"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("c", Variant::REAL)); | ||||
| 		} else { | ||||
| 			float v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("c: ")+Variant(v),gn,p_id,0,Variant::REAL,hint_slider)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		Label *l=memnew(Label("cmap")); | ||||
| 		l->set_align(Label::ALIGN_RIGHT); | ||||
|  | @ -2016,7 +2320,12 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 
 | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("UV"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("UV", Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("UV: ")+v,gn,p_id,0,Variant::VECTOR3)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		Label *l=memnew(Label("RGB")); | ||||
| 		l->set_align(Label::ALIGN_RIGHT); | ||||
|  | @ -2047,7 +2356,12 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 
 | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("UV"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("UV", Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("UV: ")+v,gn,p_id,0,Variant::VECTOR3)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		Label *l=memnew(Label("RGB")); | ||||
| 		l->set_align(Label::ALIGN_RIGHT); | ||||
|  | @ -2067,7 +2381,12 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 		gn->set_title("CanvasItemTex"); | ||||
| 		HBoxContainer *hbc = memnew( HBoxContainer ); | ||||
| 		hbc->add_constant_override("separation",0); | ||||
| 		hbc->add_child( memnew(Label("UV"))); | ||||
| 		if (graph->is_slot_connected(type, p_id, 0)) { | ||||
| 			hbc->add_child(make_label("UV", Variant::VECTOR3)); | ||||
| 		} else { | ||||
| 			Vector3 v = graph->default_get_value(type,p_id,0); | ||||
| 			hbc->add_child(make_editor(String("UV: ")+v,gn,p_id,0,Variant::VECTOR3)); | ||||
| 		} | ||||
| 		hbc->add_spacer(); | ||||
| 		Label *l=memnew(Label("RGB")); | ||||
| 		l->set_align(Label::ALIGN_RIGHT); | ||||
|  | @ -2091,15 +2410,34 @@ void ShaderGraphView::_create_node(int p_id) { | |||
| 		List<ShaderGraph::SlotInfo> si; | ||||
| 		ShaderGraph::get_input_output_node_slot_info(graph->get_mode(),type,&si); | ||||
| 
 | ||||
| 		Array colors; | ||||
| 		colors.push_back("Color"); | ||||
| 		colors.push_back("LightColor"); | ||||
| 		Array reals; | ||||
| 		reals.push_back("Alpha"); | ||||
| 		reals.push_back("NormapMapDepth"); | ||||
| 		reals.push_back("LightAlpha"); | ||||
| 		reals.push_back("PointSize"); | ||||
| 		Array vectors; | ||||
| 		vectors.push_back("Normal"); | ||||
| 		vectors.push_back("NormalMap"); | ||||
| 		vectors.push_back("Vertex"); | ||||
| 		vectors.push_back("UV"); | ||||
| 		vectors.push_back("Var1"); | ||||
| 		vectors.push_back("Var2"); | ||||
| 
 | ||||
| 		int idx=0; | ||||
| 		for (List<ShaderGraph::SlotInfo>::Element *E=si.front();E;E=E->next()) { | ||||
| 			ShaderGraph::SlotInfo& s=E->get(); | ||||
| 			if (s.dir==ShaderGraph::SLOT_OUT) { | ||||
| 
 | ||||
| 				Label *l= memnew( Label ); | ||||
| 				l->set_text(s.name); | ||||
| 				l->set_align(Label::ALIGN_LEFT); | ||||
| 				gn->add_child(l); | ||||
| 				Variant::Type v; | ||||
| 				if (colors.find(s.name)>=0) | ||||
| 					v=Variant::COLOR; | ||||
| 				else if (reals.find(s.name)>=0) | ||||
| 					v=Variant::REAL; | ||||
| 				else if (vectors.find(s.name)>=0) | ||||
| 					v=Variant::VECTOR3; | ||||
| 				gn->add_child(make_label(s.name, v)); | ||||
| 				gn->set_slot(idx,true,s.type,typecol[s.type],false,0,Color()); | ||||
| 				idx++; | ||||
| 			} | ||||
|  | @ -2256,6 +2594,7 @@ void ShaderGraphView::_bind_methods() { | |||
| 	ObjectTypeDB::bind_method("_duplicate_nodes", &ShaderGraphView::_duplicate_nodes); | ||||
| 	ObjectTypeDB::bind_method("_delete_nodes_request", &ShaderGraphView::_delete_nodes_request); | ||||
| 
 | ||||
| 	ObjectTypeDB::bind_method("_default_changed",&ShaderGraphView::_default_changed); | ||||
| 	ObjectTypeDB::bind_method("_scalar_const_changed",&ShaderGraphView::_scalar_const_changed); | ||||
| 	ObjectTypeDB::bind_method("_vec_const_changed",&ShaderGraphView::_vec_const_changed); | ||||
| 	ObjectTypeDB::bind_method("_rgb_const_changed",&ShaderGraphView::_rgb_const_changed); | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Mariano Javier Suligoy
						Mariano Javier Suligoy