From 0d85cd5aef702a52ac46a91c694d8cbe9a830ff2 Mon Sep 17 00:00:00 2001 From: RodZill4 Date: Tue, 9 Oct 2018 07:24:44 +0200 Subject: [PATCH] Updated custom node and associated editor Custom nodes now support outputs and basic (float) parameters, and are serialized/deserialized correctly. --- addons/material_maker/graph_edit.gd | 2 +- addons/material_maker/icons/icons.svg | 71 ++- addons/material_maker/icons/load.png | Bin 0 -> 285 bytes addons/material_maker/icons/minus.png | Bin 0 -> 193 bytes addons/material_maker/icons/plus.png | Bin 0 -> 298 bytes addons/material_maker/library/base.json | 4 + addons/material_maker/main_window.tscn | 2 +- .../nodes/{bricks.json => bricks.mmn} | 0 addons/material_maker/nodes/custom/custom.gd | 49 +- .../material_maker/nodes/custom/custom.tscn | 46 +- addons/material_maker/nodes/node_generic.gd | 14 +- .../nodes/{noise.json => noise.mmn} | 0 .../widgets/node_editor/input.gd | 8 + .../widgets/node_editor/input.tscn | 159 ++++++ .../widgets/node_editor/node_editor.gd | 68 ++- .../widgets/node_editor/node_editor.tscn | 486 ++++++++++++++++- .../widgets/node_editor/output.gd | 22 + .../widgets/node_editor/output.tscn | 105 ++++ .../widgets/node_editor/parameter.gd | 60 +++ .../widgets/node_editor/parameter.tscn | 498 ++++++++++++++++++ 20 files changed, 1557 insertions(+), 37 deletions(-) create mode 100644 addons/material_maker/icons/load.png create mode 100644 addons/material_maker/icons/minus.png create mode 100644 addons/material_maker/icons/plus.png rename addons/material_maker/nodes/{bricks.json => bricks.mmn} (100%) rename addons/material_maker/nodes/{noise.json => noise.mmn} (100%) create mode 100644 addons/material_maker/widgets/node_editor/input.gd create mode 100644 addons/material_maker/widgets/node_editor/input.tscn create mode 100644 addons/material_maker/widgets/node_editor/output.gd create mode 100644 addons/material_maker/widgets/node_editor/output.tscn create mode 100644 addons/material_maker/widgets/node_editor/parameter.gd create mode 100644 addons/material_maker/widgets/node_editor/parameter.tscn diff --git a/addons/material_maker/graph_edit.gd b/addons/material_maker/graph_edit.gd index eab0249..f79bcb9 100644 --- a/addons/material_maker/graph_edit.gd +++ b/addons/material_maker/graph_edit.gd @@ -117,7 +117,7 @@ func create_nodes(data, position = null): return if data.has("type"): var node = null - if File.new().file_exists("res://addons/material_maker/nodes/"+data.type+".json"): + if File.new().file_exists("res://addons/material_maker/nodes/"+data.type+".mmn"): node = preload("res://addons/material_maker/nodes/node_generic.gd").new() node.model = data.type else: diff --git a/addons/material_maker/icons/icons.svg b/addons/material_maker/icons/icons.svg index 54563e2..61805a8 100644 --- a/addons/material_maker/icons/icons.svg +++ b/addons/material_maker/icons/icons.svg @@ -48,9 +48,9 @@ borderopacity="1.0" inkscape:pageopacity="0.0" inkscape:pageshadow="2" - inkscape:zoom="2.8" - inkscape:cx="161.54776" - inkscape:cy="928.95264" + inkscape:zoom="1.1274425" + inkscape:cx="116.41955" + inkscape:cy="914.64295" inkscape:document-units="mm" inkscape:current-layer="layer1" showgrid="true" @@ -205,5 +205,70 @@ id="rect874" style="opacity:1;fill:#afafaf;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" /> + + + + + + + + + + + + diff --git a/addons/material_maker/icons/load.png b/addons/material_maker/icons/load.png new file mode 100644 index 0000000000000000000000000000000000000000..a30d97e7b7c16839ca035674a179b73e875fecc2 GIT binary patch literal 285 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf4nJ zFbRV&9gP2NC6ei@^ovPN=)8|G8vnF#H9An#ga{b3ILi^3+9j>J;wtw-hi{<<6W}VAx&w4F6d{UE5 zz;(HQi-^SB>H`{)Tb{pfisw{zmC$6!-+k|@w|LFkRV-5<=(E^0Z1$7?_B?s!;>~`{ aHjDgcyqV(DCY@~pS>^xl@ zLpWyko;KuaFc4rkXsLX{^w4nJ zFqMHY?H}15NgnxK`u@`12Zl$CJFW|C&pqyX>5Y|>Svj$qdUbOfDC{!3cUHx3vIVCg!0KbQIUjP6A literal 0 HcmV?d00001 diff --git a/addons/material_maker/library/base.json b/addons/material_maker/library/base.json index 4f95e00..9765c5b 100644 --- a/addons/material_maker/library/base.json +++ b/addons/material_maker/library/base.json @@ -210,6 +210,10 @@ "tree_item":"Miscellaneous/Switch", "type":"switch" }, + { + "tree_item":"Miscellaneous/Custom", + "type":"custom" + }, { "tree_item":"Miscellaneous/Remote", "type":"remote" diff --git a/addons/material_maker/main_window.tscn b/addons/material_maker/main_window.tscn index c488d39..12b560e 100644 --- a/addons/material_maker/main_window.tscn +++ b/addons/material_maker/main_window.tscn @@ -6,7 +6,7 @@ [ext_resource path="res://addons/material_maker/widgets/tabs.gd" type="Script" id=4] [ext_resource path="res://addons/material_maker/renderer.tscn" type="PackedScene" id=5] -[node name="MainWindow" type="Panel" index="0"] +[node name="MainWindow" type="Panel"] anchor_left = 0.0 anchor_top = 0.0 diff --git a/addons/material_maker/nodes/bricks.json b/addons/material_maker/nodes/bricks.mmn similarity index 100% rename from addons/material_maker/nodes/bricks.json rename to addons/material_maker/nodes/bricks.mmn diff --git a/addons/material_maker/nodes/custom/custom.gd b/addons/material_maker/nodes/custom/custom.gd index 760164c..0549671 100644 --- a/addons/material_maker/nodes/custom/custom.gd +++ b/addons/material_maker/nodes/custom/custom.gd @@ -2,7 +2,52 @@ tool extends "res://addons/material_maker/nodes/node_generic.gd" func _on_Edit_pressed(): - pass # replace with function body + var edit_window = load("res://addons/material_maker/widgets/node_editor/node_editor.tscn").instance() + if model_data != null: + edit_window.set_model_data(model_data) + edit_window.connect("node_changed", self, "update_node") + add_child(edit_window) + edit_window.popup_centered() + +func _on_Load_pressed(): + var dialog = FileDialog.new() + add_child(dialog) + dialog.rect_min_size = Vector2(500, 500) + dialog.access = FileDialog.ACCESS_FILESYSTEM + dialog.mode = FileDialog.MODE_OPEN_FILE + dialog.add_filter("*.mmn;Material Maker Node") + dialog.connect("file_selected", self, "do_load_node") + dialog.popup_centered() + +func do_load_node(file_name): + set_model(file_name) func _on_Save_pressed(): - pass # replace with function body + var dialog = FileDialog.new() + add_child(dialog) + dialog.rect_min_size = Vector2(500, 500) + dialog.access = FileDialog.ACCESS_FILESYSTEM + dialog.mode = FileDialog.MODE_SAVE_FILE + dialog.add_filter("*.mmn;Material Maker Node") + dialog.connect("file_selected", self, "do_save_node") + dialog.popup_centered() + +func do_save_node(file_name): + var file = File.new() + if file.open(file_name, File.WRITE) == OK: + file.store_string(to_json(model_data)) + file.close() + model = file_name + +func deserialize(data): + if data.has("model_data"): + update_node(data.model_data) + .deserialize(data) + +func serialize(): + var file = model + model = "custom" + var return_value = .serialize() + model = file + return_value.model_data = model_data + return return_value diff --git a/addons/material_maker/nodes/custom/custom.tscn b/addons/material_maker/nodes/custom/custom.tscn index 0b08856..407d493 100644 --- a/addons/material_maker/nodes/custom/custom.tscn +++ b/addons/material_maker/nodes/custom/custom.tscn @@ -1,19 +1,20 @@ -[gd_scene load_steps=4 format=2] +[gd_scene load_steps=5 format=2] [ext_resource path="res://addons/material_maker/nodes/custom/custom.gd" type="Script" id=1] [ext_resource path="res://addons/material_maker/icons/edit.png" type="Texture" id=2] -[ext_resource path="res://addons/material_maker/icons/save.png" type="Texture" id=3] +[ext_resource path="res://addons/material_maker/icons/load.png" type="Texture" id=3] +[ext_resource path="res://addons/material_maker/icons/save.png" type="Texture" id=4] -[node name="Custom" type="GraphNode" index="0"] +[node name="Custom" type="GraphNode"] anchor_left = 0.0 anchor_top = 0.0 anchor_right = 0.0 anchor_bottom = 0.0 -margin_left = 385.0 -margin_top = 287.0 -margin_right = 479.0 -margin_bottom = 338.0 +margin_left = 1.0 +margin_top = 2.0 +margin_right = 95.0 +margin_bottom = 53.0 rect_pivot_offset = Vector2( 0, 0 ) rect_clip_content = false mouse_filter = 1 @@ -34,6 +35,7 @@ slot/0/right_enabled = false slot/0/right_type = 0 slot/0/right_color = Color( 1, 1, 1, 1 ) script = ExtResource( 1 ) +model = null [node name="CustomNodeButtons" type="HBoxContainer" parent="." index="0"] @@ -43,7 +45,7 @@ anchor_right = 0.0 anchor_bottom = 0.0 margin_left = 16.0 margin_top = 24.0 -margin_right = 78.0 +margin_right = 107.0 margin_bottom = 46.0 rect_pivot_offset = Vector2( 0, 0 ) rect_clip_content = false @@ -76,7 +78,7 @@ icon = ExtResource( 2 ) flat = true align = 1 -[node name="Save" type="Button" parent="CustomNodeButtons" index="1"] +[node name="Load" type="Button" parent="CustomNodeButtons" index="1"] anchor_left = 0.0 anchor_top = 0.0 @@ -100,8 +102,34 @@ icon = ExtResource( 3 ) flat = true align = 1 +[node name="Save" type="Button" parent="CustomNodeButtons" index="2"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 63.0 +margin_right = 91.0 +margin_bottom = 22.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +group = null +icon = ExtResource( 4 ) +flat = true +align = 1 + [connection signal="pressed" from="CustomNodeButtons/Edit" to="." method="_on_Edit_pressed"] +[connection signal="pressed" from="CustomNodeButtons/Load" to="." method="_on_Load_pressed"] + [connection signal="pressed" from="CustomNodeButtons/Save" to="." method="_on_Save_pressed"] diff --git a/addons/material_maker/nodes/node_generic.gd b/addons/material_maker/nodes/node_generic.gd index 4dba772..9dd6de1 100644 --- a/addons/material_maker/nodes/node_generic.gd +++ b/addons/material_maker/nodes/node_generic.gd @@ -14,7 +14,7 @@ func set_model(m): var file = File.new() var file_name = m if !file.file_exists(file_name): - file_name = "res://addons/material_maker/nodes/%s.json" % [ m ] + file_name = "res://addons/material_maker/nodes/%s.mmn" % [ m ] if file.file_exists(file_name): if file.open(file_name, File.READ) != OK: return @@ -33,6 +33,16 @@ func update_node(data): return if !data.has("name"): return + # Clean node + parameters = {} + var custom_node_buttons = null + for c in get_children(): + if c.name != "CustomNodeButtons": + remove_child(c) + c.queue_free() + else: + custom_node_buttons = c + # Rebuild node title = data.name model_data = data uses_seed = false @@ -99,6 +109,8 @@ func update_node(data): set_slot(i, false, 0, color_right, enable_right, 0, color_right) else: model_data.outputs = [] + if custom_node_buttons != null: + move_child(custom_node_buttons, get_child_count()-1) func subst(string, uv = ""): string = string.replace("$(name)", name) diff --git a/addons/material_maker/nodes/noise.json b/addons/material_maker/nodes/noise.mmn similarity index 100% rename from addons/material_maker/nodes/noise.json rename to addons/material_maker/nodes/noise.mmn diff --git a/addons/material_maker/widgets/node_editor/input.gd b/addons/material_maker/widgets/node_editor/input.gd new file mode 100644 index 0000000..110290e --- /dev/null +++ b/addons/material_maker/widgets/node_editor/input.gd @@ -0,0 +1,8 @@ +tool +extends HBoxContainer + +func _ready(): + pass + +func _on_Delete_pressed(): + queue_free() diff --git a/addons/material_maker/widgets/node_editor/input.tscn b/addons/material_maker/widgets/node_editor/input.tscn new file mode 100644 index 0000000..595861a --- /dev/null +++ b/addons/material_maker/widgets/node_editor/input.tscn @@ -0,0 +1,159 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://addons/material_maker/widgets/node_editor/input.gd" type="Script" id=1] +[ext_resource path="res://addons/material_maker/icons/minus.png" type="Texture" id=2] + +[node name="Parameter" type="HBoxContainer"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 201.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +alignment = 0 +script = ExtResource( 1 ) + +[node name="Delete" type="Button" parent="." index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 28.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +group = null +icon = ExtResource( 2 ) +flat = true +align = 1 + +[node name="Name" type="LineEdit" parent="." index="1"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 32.0 +margin_right = 102.0 +margin_bottom = 24.0 +rect_min_size = Vector2( 70, 0 ) +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +hint_tooltip = "Input name" +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 1 +size_flags_horizontal = 1 +size_flags_vertical = 1 +text = "name" +focus_mode = 2 +context_menu_enabled = true +placeholder_alpha = 0.6 +caret_blink = false +caret_blink_speed = 0.65 +caret_position = 0 +_sections_unfolded = [ "Hint", "Rect" ] + +[node name="Label" type="LineEdit" parent="." index="2"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 106.0 +margin_right = 176.0 +margin_bottom = 24.0 +rect_min_size = Vector2( 70, 0 ) +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +hint_tooltip = "Input Label" +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 1 +size_flags_horizontal = 1 +size_flags_vertical = 1 +text = "Label" +focus_mode = 2 +context_menu_enabled = true +placeholder_alpha = 0.6 +caret_blink = false +caret_blink_speed = 0.65 +caret_position = 0 +_sections_unfolded = [ "Hint", "Rect" ] + +[node name="Type" type="OptionButton" parent="." index="3"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 180.0 +margin_right = 282.0 +margin_bottom = 24.0 +rect_min_size = Vector2( 102, 0 ) +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +hint_tooltip = "Input flag" +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = false +action_mode = 0 +enabled_focus_mode = 2 +shortcut = null +group = null +text = "GreyScale" +flat = false +align = 0 +items = [ "GreyScale", null, false, 0, null, "Color", null, false, 1, null ] +selected = 0 +_sections_unfolded = [ "Focus", "Hint", "Rect" ] + +[node name="Default" type="LineEdit" parent="." index="4"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 286.0 +margin_right = 356.0 +margin_bottom = 24.0 +rect_min_size = Vector2( 70, 0 ) +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +hint_tooltip = "Default value" +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 1 +size_flags_horizontal = 1 +size_flags_vertical = 1 +text = "0.0" +focus_mode = 2 +context_menu_enabled = true +placeholder_alpha = 0.6 +caret_blink = false +caret_blink_speed = 0.65 +caret_position = 0 +_sections_unfolded = [ "Hint", "Rect" ] + +[connection signal="pressed" from="Delete" to="." method="_on_Delete_pressed"] + + diff --git a/addons/material_maker/widgets/node_editor/node_editor.gd b/addons/material_maker/widgets/node_editor/node_editor.gd index 7655466..f47cb34 100644 --- a/addons/material_maker/widgets/node_editor/node_editor.gd +++ b/addons/material_maker/widgets/node_editor/node_editor.gd @@ -1,16 +1,62 @@ +tool extends WindowDialog -var model_data +var model_data = null -func _init(data): - model_data = data +const ParameterEditor = preload("res://addons/material_maker/widgets/node_editor/parameter.tscn") +const InputEditor = preload("res://addons/material_maker/widgets/node_editor/input.tscn") +const OutputEditor = preload("res://addons/material_maker/widgets/node_editor/output.tscn") -func _ready(): - # Called when the node is added to the scene for the first time. - # Initialization here - pass +signal node_changed -#func _process(delta): -# # Called every frame. Delta is time since last frame. -# # Update game logic here. -# pass +func add_item(parent, scene): + var object = scene.instance() + parent.add_child(object) + parent.move_child(object, parent.get_child_count()-2) + return object + +func set_model_data(data): + if data.has("name"): + $Sizer/Tabs/General/Name/Name.text = data.name + if data.has("parameters"): + for p in data.parameters: + add_item($Sizer/Tabs/General/Parameters/Sizer, ParameterEditor).set_model_data(p) + if data.has("outputs"): + for o in data.outputs: + add_item($Sizer/Tabs/General/Outputs/Sizer, OutputEditor).set_model_data(o) + if data.has("global"): + $Sizer/Tabs/Global.text = data.global + if data.has("instance"): + $Sizer/Tabs/Instance.text = data.instance + +func get_model_data(): + var data = { + name=$Sizer/Tabs/General/Name/Name.text, + global=$Sizer/Tabs/Global.text, + instance=$Sizer/Tabs/Instance.text, + } + data.parameters = [] + for p in $Sizer/Tabs/General/Parameters/Sizer.get_children(): + if p.has_method("get_model_data"): + data.parameters.append(p.get_model_data()) + data.outputs = [] + for o in $Sizer/Tabs/General/Outputs/Sizer.get_children(): + if o.has_method("get_model_data"): + data.outputs.append(o.get_model_data()) + return data + +func _on_AddParameter_pressed(): + add_item($Sizer/Tabs/General/Parameters/Sizer, ParameterEditor) + +func _on_AddInput_pressed(): + add_item($Sizer/Tabs/General/Inputs/Sizer, InputEditor) + +func _on_AddOutput_pressed(): + add_item($Sizer/Tabs/General/Outputs/Sizer, OutputEditor) + +func _on_OK_pressed(): + emit_signal("node_changed", get_model_data()) + queue_free() + +func _on_Cancel_pressed(): + queue_free() diff --git a/addons/material_maker/widgets/node_editor/node_editor.tscn b/addons/material_maker/widgets/node_editor/node_editor.tscn index ffc7dcd..6992718 100644 --- a/addons/material_maker/widgets/node_editor/node_editor.tscn +++ b/addons/material_maker/widgets/node_editor/node_editor.tscn @@ -1,27 +1,29 @@ -[gd_scene load_steps=2 format=2] +[gd_scene load_steps=3 format=2] [ext_resource path="res://addons/material_maker/widgets/node_editor/node_editor.gd" type="Script" id=1] +[ext_resource path="res://addons/material_maker/icons/plus.png" type="Texture" id=2] -[node name="NodeEditor" type="WindowDialog" index="0"] +[node name="NodeEditor" type="WindowDialog"] anchor_left = 0.0 anchor_top = 0.0 anchor_right = 0.0 anchor_bottom = 0.0 -margin_right = 469.0 -margin_bottom = 373.0 +margin_right = 726.0 +margin_bottom = 399.0 rect_pivot_offset = Vector2( 0, 0 ) rect_clip_content = false mouse_filter = 0 mouse_default_cursor_shape = 0 size_flags_horizontal = 1 size_flags_vertical = 1 -popup_exclusive = false +popup_exclusive = true window_title = "Node Editor" resizable = false script = ExtResource( 1 ) +_sections_unfolded = [ "Popup" ] -[node name="Tabs" type="TabContainer" parent="." index="1"] +[node name="Sizer" type="VBoxContainer" parent="." index="0"] anchor_left = 0.0 anchor_top = 0.0 @@ -29,15 +31,368 @@ anchor_right = 1.0 anchor_bottom = 1.0 rect_pivot_offset = Vector2( 0, 0 ) rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +alignment = 0 +_sections_unfolded = [ "Size Flags" ] + +[node name="Tabs" type="TabContainer" parent="Sizer" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 726.0 +margin_bottom = 375.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false mouse_filter = 0 mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +tab_align = 0 +tabs_visible = true +_sections_unfolded = [ "Size Flags" ] + +[node name="General" type="VBoxContainer" parent="Sizer/Tabs" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 4.0 +margin_top = 32.0 +margin_right = -4.0 +margin_bottom = -4.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 size_flags_horizontal = 1 size_flags_vertical = 1 -tab_align = 0 -tabs_visible = true +alignment = 0 -[node name="Global" type="TextEdit" parent="Tabs" index="0"] +[node name="Name" type="HBoxContainer" parent="Sizer/Tabs/General" index="0"] +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 718.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +alignment = 0 +_sections_unfolded = [ "Size Flags" ] + +[node name="LabelName" type="Label" parent="Sizer/Tabs/General/Name" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 5.0 +margin_right = 42.0 +margin_bottom = 19.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 2 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 4 +text = "Name:" +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 +_sections_unfolded = [ "Size Flags" ] + +[node name="Name" type="LineEdit" parent="Sizer/Tabs/General/Name" index="1"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 46.0 +margin_right = 718.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 1 +size_flags_horizontal = 3 +size_flags_vertical = 1 +focus_mode = 2 +context_menu_enabled = true +placeholder_alpha = 0.6 +caret_blink = false +caret_blink_speed = 0.65 +caret_position = 0 +_sections_unfolded = [ "Size Flags" ] + +[node name="LabelParameters" type="Label" parent="Sizer/Tabs/General" index="1"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 28.0 +margin_right = 718.0 +margin_bottom = 42.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 2 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 4 +text = "Parameters:" +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 +_sections_unfolded = [ "Size Flags" ] + +[node name="Parameters" type="ScrollContainer" parent="Sizer/Tabs/General" index="2"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 46.0 +margin_right = 718.0 +margin_bottom = 181.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = true +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +scroll_horizontal_enabled = false +scroll_horizontal = 0 +scroll_vertical_enabled = true +scroll_vertical = 0 +scroll_deadzone = 0 +_sections_unfolded = [ "Size Flags" ] + +[node name="Sizer" type="VBoxContainer" parent="Sizer/Tabs/General/Parameters" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 718.0 +margin_bottom = 22.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +alignment = 0 +_sections_unfolded = [ "Size Flags" ] + +[node name="AddParameter" type="Button" parent="Sizer/Tabs/General/Parameters/Sizer" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 28.0 +margin_bottom = 22.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 0 +size_flags_vertical = 1 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +group = null +icon = ExtResource( 2 ) +flat = true +align = 1 +_sections_unfolded = [ "Size Flags" ] + +[node name="LabelInputs" type="Label" parent="Sizer/Tabs/General" index="3"] + +visible = false +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 176.0 +margin_right = 718.0 +margin_bottom = 190.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 2 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 4 +text = "Inputs:" +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 +_sections_unfolded = [ "Size Flags" ] + +[node name="Inputs" type="ScrollContainer" parent="Sizer/Tabs/General" index="4"] + +visible = false +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 139.0 +margin_right = 718.0 +margin_bottom = 228.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = true +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +scroll_horizontal_enabled = false +scroll_horizontal = 0 +scroll_vertical_enabled = true +scroll_vertical = 0 +scroll_deadzone = 0 +_sections_unfolded = [ "Scroll", "Size Flags" ] + +[node name="Sizer" type="VBoxContainer" parent="Sizer/Tabs/General/Inputs" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 718.0 +margin_bottom = 22.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +alignment = 0 +_sections_unfolded = [ "Size Flags" ] + +[node name="AddInput" type="Button" parent="Sizer/Tabs/General/Inputs/Sizer" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 28.0 +margin_bottom = 22.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 0 +size_flags_vertical = 1 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +group = null +icon = ExtResource( 2 ) +flat = true +align = 1 +_sections_unfolded = [ "Size Flags" ] + +[node name="LabelOutputs" type="Label" parent="Sizer/Tabs/General" index="5"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 185.0 +margin_right = 718.0 +margin_bottom = 199.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 2 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 4 +text = "Outputs:" +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 +_sections_unfolded = [ "Size Flags" ] + +[node name="Outputs" type="ScrollContainer" parent="Sizer/Tabs/General" index="6"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 203.0 +margin_right = 718.0 +margin_bottom = 339.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = true +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +scroll_horizontal_enabled = false +scroll_horizontal = 0 +scroll_vertical_enabled = true +scroll_vertical = 0 +scroll_deadzone = 0 +_sections_unfolded = [ "Size Flags" ] + +[node name="Sizer" type="VBoxContainer" parent="Sizer/Tabs/General/Outputs" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 718.0 +margin_bottom = 22.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +alignment = 0 +_sections_unfolded = [ "Size Flags" ] + +[node name="AddOutput" type="Button" parent="Sizer/Tabs/General/Outputs/Sizer" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 28.0 +margin_bottom = 22.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 0 +size_flags_vertical = 1 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +group = null +icon = ExtResource( 2 ) +flat = true +align = 1 +_sections_unfolded = [ "Size Flags" ] + +[node name="Global" type="TextEdit" parent="Sizer/Tabs" index="1"] + +visible = false anchor_left = 0.0 anchor_top = 0.0 anchor_right = 1.0 @@ -70,4 +425,117 @@ caret_blink = false caret_blink_speed = 0.65 caret_moving_by_right_click = true +[node name="Instance" type="TextEdit" parent="Sizer/Tabs" index="2"] + +visible = false +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 4.0 +margin_top = 32.0 +margin_right = -4.0 +margin_bottom = -4.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +text = "" +readonly = false +highlight_current_line = false +syntax_highlighting = false +show_line_numbers = false +highlight_all_occurrences = false +override_selected_font_color = false +context_menu_enabled = true +smooth_scrolling = false +v_scroll_speed = 80.0 +hiding_enabled = 0 +wrap_lines = false +caret_block_mode = false +caret_blink = false +caret_blink_speed = 0.65 +caret_moving_by_right_click = true + +[node name="HBoxContainer" type="HBoxContainer" parent="Sizer" index="1"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 291.0 +margin_top = 379.0 +margin_right = 435.0 +margin_bottom = 399.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 4 +size_flags_vertical = 1 +alignment = 0 +_sections_unfolded = [ "Size Flags" ] + +[node name="OK" type="Button" parent="Sizer/HBoxContainer" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 70.0 +margin_bottom = 20.0 +rect_min_size = Vector2( 70, 0 ) +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +group = null +text = "OK" +flat = false +align = 1 + +[node name="Cancel" type="Button" parent="Sizer/HBoxContainer" index="1"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 74.0 +margin_right = 144.0 +margin_bottom = 20.0 +rect_min_size = Vector2( 70, 0 ) +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +group = null +text = "Cancel" +flat = false +align = 1 + +[connection signal="pressed" from="Sizer/Tabs/General/Parameters/Sizer/AddParameter" to="." method="_on_AddParameter_pressed"] + +[connection signal="pressed" from="Sizer/Tabs/General/Inputs/Sizer/AddInput" to="." method="_on_AddInput_pressed"] + +[connection signal="pressed" from="Sizer/Tabs/General/Outputs/Sizer/AddOutput" to="." method="_on_AddOutput_pressed"] + +[connection signal="pressed" from="Sizer/HBoxContainer/OK" to="." method="_on_OK_pressed"] + +[connection signal="pressed" from="Sizer/HBoxContainer/Cancel" to="." method="_on_Cancel_pressed"] + diff --git a/addons/material_maker/widgets/node_editor/output.gd b/addons/material_maker/widgets/node_editor/output.gd new file mode 100644 index 0000000..71c9972 --- /dev/null +++ b/addons/material_maker/widgets/node_editor/output.gd @@ -0,0 +1,22 @@ +tool +extends HBoxContainer + +func _ready(): + pass + +func set_model_data(data): + if data.has("rgb"): + $Type.selected = 1 + $Default.text = data.rgb + elif data.has("f"): + $Type.selected = 0 + $Default.text = data.f + +func get_model_data(): + if $Type.selected == 1: + return { rgb=$Default.text } + else: + return { f=$Default.text } + +func _on_Delete_pressed(): + queue_free() diff --git a/addons/material_maker/widgets/node_editor/output.tscn b/addons/material_maker/widgets/node_editor/output.tscn new file mode 100644 index 0000000..3be4c3e --- /dev/null +++ b/addons/material_maker/widgets/node_editor/output.tscn @@ -0,0 +1,105 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://addons/material_maker/widgets/node_editor/output.gd" type="Script" id=1] +[ext_resource path="res://addons/material_maker/icons/minus.png" type="Texture" id=2] + +[node name="Output" type="HBoxContainer"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 201.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 +size_flags_vertical = 1 +alignment = 0 +script = ExtResource( 1 ) +_sections_unfolded = [ "Size Flags" ] + +[node name="Delete" type="Button" parent="." index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 28.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +group = null +icon = ExtResource( 2 ) +flat = true +align = 1 + +[node name="Type" type="OptionButton" parent="." index="1"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 32.0 +margin_right = 134.0 +margin_bottom = 24.0 +rect_min_size = Vector2( 102, 0 ) +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +hint_tooltip = "Input flag" +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = false +action_mode = 0 +enabled_focus_mode = 2 +shortcut = null +group = null +text = "GreyScale" +flat = false +align = 0 +items = [ "GreyScale", null, false, 0, null, "Color", null, false, 1, null ] +selected = 0 +_sections_unfolded = [ "Focus", "Hint", "Rect" ] + +[node name="Default" type="LineEdit" parent="." index="2"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 138.0 +margin_right = 201.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +hint_tooltip = "Default value" +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 1 +size_flags_horizontal = 3 +size_flags_vertical = 1 +text = "0.0" +focus_mode = 2 +context_menu_enabled = true +placeholder_alpha = 0.6 +caret_blink = false +caret_blink_speed = 0.65 +caret_position = 0 +_sections_unfolded = [ "Hint", "Rect", "Size Flags" ] + +[connection signal="pressed" from="Delete" to="." method="_on_Delete_pressed"] + + diff --git a/addons/material_maker/widgets/node_editor/parameter.gd b/addons/material_maker/widgets/node_editor/parameter.gd new file mode 100644 index 0000000..9024680 --- /dev/null +++ b/addons/material_maker/widgets/node_editor/parameter.gd @@ -0,0 +1,60 @@ +tool +extends HBoxContainer + +const PARAMETER_TYPE = [ "float", "size", "enum", "boolean" ] + +func _ready(): + pass + +func set_model_data(data): + if data.has("name"): + $Name.text = data.name + if data.has("label"): + $Label.text = data.label + if !data.has("type"): + return + for t in $Types.get_children(): + t.visible = false + var w = null + if data.type == "float": + $Type.selected = 0 + w = $Types/T0 + if data.has("min"): + $Types/T0/Min.value = data.min + if data.has("max"): + $Types/T0/Max.value = data.max + if data.has("step"): + $Types/T0/Step.value = data.step + $Types/T0/SpinBox.pressed = ( data.has("widget") && data.widget == "spinbox" ) + elif data.type == "size": + $Type.selected = 1 + w = $Types/T1 + elif data.type == "enum": + $Type.selected = 2 + w = $Types/T2 + elif data.type == "boolean": + $Type.selected = 3 + w = $Types/T3 + if w != null: + w.visible = true + +func get_model_data(): + var data = { + name=$Name.text, + label=$Label.text, + type=PARAMETER_TYPE[$Type.selected], + } + if $Type.selected == 0: + data.min = $Types/T0/Min.value + data.max = $Types/T0/Max.value + data.step = $Types/T0/Step.value + if $Types/T0/SpinBox.pressed: + data.widget = "spinbox" + return data + +func _on_Delete_pressed(): + queue_free() + +func _on_OptionButton_item_selected(ID): + for c in $Types.get_children(): + c.visible = "T"+str(ID) == c.name diff --git a/addons/material_maker/widgets/node_editor/parameter.tscn b/addons/material_maker/widgets/node_editor/parameter.tscn new file mode 100644 index 0000000..81ae5bc --- /dev/null +++ b/addons/material_maker/widgets/node_editor/parameter.tscn @@ -0,0 +1,498 @@ +[gd_scene load_steps=3 format=2] + +[ext_resource path="res://addons/material_maker/widgets/node_editor/parameter.gd" type="Script" id=1] +[ext_resource path="res://addons/material_maker/icons/minus.png" type="Texture" id=2] + +[node name="Parameter" type="HBoxContainer" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 201.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +alignment = 0 +script = ExtResource( 1 ) + +[node name="Delete" type="Button" parent="." index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 28.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +group = null +icon = ExtResource( 2 ) +flat = true +align = 1 + +[node name="Name" type="LineEdit" parent="." index="1"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 32.0 +margin_right = 102.0 +margin_bottom = 24.0 +rect_min_size = Vector2( 70, 0 ) +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 1 +size_flags_horizontal = 1 +size_flags_vertical = 1 +text = "name" +focus_mode = 2 +context_menu_enabled = true +placeholder_alpha = 0.6 +caret_blink = false +caret_blink_speed = 0.65 +caret_position = 0 +_sections_unfolded = [ "Rect" ] + +[node name="Label" type="LineEdit" parent="." index="2"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 106.0 +margin_right = 176.0 +margin_bottom = 24.0 +rect_min_size = Vector2( 70, 0 ) +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 1 +size_flags_horizontal = 1 +size_flags_vertical = 1 +text = "Label" +focus_mode = 2 +context_menu_enabled = true +placeholder_alpha = 0.6 +caret_blink = false +caret_blink_speed = 0.65 +caret_position = 0 +_sections_unfolded = [ "Rect" ] + +[node name="Type" type="OptionButton" parent="." index="3"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 180.0 +margin_right = 250.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = false +action_mode = 0 +enabled_focus_mode = 2 +shortcut = null +group = null +text = "Float" +flat = false +align = 0 +items = [ "Float", null, false, 0, null, "Size", null, false, 1, null, "Enum", null, false, 2, null, "Boolean", null, false, 3, null ] +selected = 0 + +[node name="Types" type="HBoxContainer" parent="." index="4"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 254.0 +margin_right = 669.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +alignment = 0 + +[node name="T0" type="HBoxContainer" parent="Types" index="0"] + +editor/display_folded = true +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 415.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +alignment = 0 +_sections_unfolded = [ "Visibility" ] + +[node name="LabelMin" type="Label" parent="Types/T0" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 5.0 +margin_right = 28.0 +margin_bottom = 19.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 2 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 4 +text = "Min:" +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 + +[node name="Min" type="SpinBox" parent="Types/T0" index="1"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 32.0 +margin_right = 106.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +min_value = -65536.0 +max_value = 65535.0 +step = 0.0 +page = 0.0 +value = 0.0 +exp_edit = false +rounded = false +editable = true +prefix = "" +suffix = "" + +[node name="LabelMax" type="Label" parent="Types/T0" index="2"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 110.0 +margin_top = 5.0 +margin_right = 140.0 +margin_bottom = 19.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 2 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 4 +text = "Max:" +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 + +[node name="Max" type="SpinBox" parent="Types/T0" index="3"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 144.0 +margin_right = 218.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +min_value = -65536.0 +max_value = 65535.0 +step = 0.0 +page = 0.0 +value = 0.0 +exp_edit = false +rounded = false +editable = true +prefix = "" +suffix = "" + +[node name="LabelStep" type="Label" parent="Types/T0" index="4"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 222.0 +margin_top = 5.0 +margin_right = 254.0 +margin_bottom = 19.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 2 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 4 +text = "Step:" +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 + +[node name="Step" type="SpinBox" parent="Types/T0" index="5"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 258.0 +margin_right = 332.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +min_value = 0.0 +max_value = 65535.0 +step = 0.0 +page = 0.0 +value = 0.0 +exp_edit = false +rounded = false +editable = true +prefix = "" +suffix = "" + +[node name="SpinBox" type="CheckBox" parent="Types/T0" index="6"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 336.0 +margin_right = 415.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = true +enabled_focus_mode = 2 +shortcut = null +group = null +text = "SpinBox" +flat = false +align = 0 + +[node name="T1" type="HBoxContainer" parent="Types" index="1"] + +editor/display_folded = true +visible = false +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 148.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +alignment = 0 + +[node name="LabelMin" type="Label" parent="Types/T1" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 5.0 +margin_right = 28.0 +margin_bottom = 19.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 2 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 4 +text = "Min:" +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 + +[node name="Min" type="OptionButton" parent="Types/T1" index="1"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 32.0 +margin_right = 71.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = false +action_mode = 0 +enabled_focus_mode = 2 +shortcut = null +group = null +flat = false +align = 0 +items = [ ] +selected = -1 + +[node name="LabelMax" type="Label" parent="Types/T1" index="2"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 75.0 +margin_top = 5.0 +margin_right = 105.0 +margin_bottom = 19.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 2 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 4 +text = "Max:" +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 + +[node name="Max" type="OptionButton" parent="Types/T1" index="3"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 109.0 +margin_right = 148.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = false +action_mode = 0 +enabled_focus_mode = 2 +shortcut = null +group = null +flat = false +align = 0 +items = [ ] +selected = -1 + +[node name="T2" type="HBoxContainer" parent="Types" index="2"] + +editor/display_folded = true +visible = false +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 39.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +alignment = 0 + +[node name="OptionButton" type="OptionButton" parent="Types/T2" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_right = 39.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = false +action_mode = 0 +enabled_focus_mode = 2 +shortcut = null +group = null +flat = false +align = 0 +items = [ ] +selected = -1 + +[node name="T3" type="HBoxContainer" parent="Types" index="3"] + +visible = false +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +alignment = 0 + +[connection signal="pressed" from="Delete" to="." method="_on_Delete_pressed"] + +[connection signal="item_selected" from="Type" to="." method="_on_OptionButton_item_selected"] + +