Updated custom node and associated editor

Custom nodes now support outputs and basic (float) parameters, and are serialized/deserialized correctly.
This commit is contained in:
RodZill4 2018-10-09 07:24:44 +02:00
parent ee0bc96f30
commit 0d85cd5aef
20 changed files with 1557 additions and 37 deletions

View File

@ -117,7 +117,7 @@ func create_nodes(data, position = null):
return return
if data.has("type"): if data.has("type"):
var node = null 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 = preload("res://addons/material_maker/nodes/node_generic.gd").new()
node.model = data.type node.model = data.type
else: else:

View File

@ -48,9 +48,9 @@
borderopacity="1.0" borderopacity="1.0"
inkscape:pageopacity="0.0" inkscape:pageopacity="0.0"
inkscape:pageshadow="2" inkscape:pageshadow="2"
inkscape:zoom="2.8" inkscape:zoom="1.1274425"
inkscape:cx="161.54776" inkscape:cx="116.41955"
inkscape:cy="928.95264" inkscape:cy="914.64295"
inkscape:document-units="mm" inkscape:document-units="mm"
inkscape:current-layer="layer1" inkscape:current-layer="layer1"
showgrid="true" showgrid="true"
@ -205,5 +205,70 @@
id="rect874" 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" /> 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" />
</g> </g>
<g
style="fill:#18ff09;fill-opacity:1"
transform="matrix(0.00708854,0.93703452,-0.93703452,-0.00708854,131.56263,7.7603075)"
id="g849"
inkscape:export-filename="plus.png"
inkscape:export-xdpi="16.531826"
inkscape:export-ydpi="16.531826">
<rect
ry="0"
y="8.604167"
x="10.583333"
height="26.458334"
width="5.2916665"
id="rect844"
style="opacity:1;fill:#18ff09;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" />
<rect
ry="0"
y="19.1875"
x="0"
height="5.2916665"
width="26.458332"
id="rect847"
style="opacity:1;fill:#18ff09;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" />
</g>
<g
inkscape:export-ydpi="16.531826"
inkscape:export-xdpi="16.531826"
inkscape:export-filename="minus.png"
id="g856"
transform="matrix(0.00708854,0.93703452,-0.93703452,-0.00708854,162.38808,7.2064523)"
style="fill:#ff0909;fill-opacity:1">
<rect
style="opacity:1;fill:#ff0909;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"
id="rect851"
width="5.2916665"
height="26.458334"
x="10.583333"
y="8.604167"
ry="0" />
</g>
<g
id="g868"
inkscape:export-filename="load.png"
inkscape:export-xdpi="13.499794"
inkscape:export-ydpi="13.499794">
<path
id="rect849"
transform="scale(0.26458333)"
d="M 330 152.51953 L 330 262.51953 L 420 262.51953 L 420 169.94531 L 402.57227 152.51953 L 330 152.51953 z "
style="opacity:1;fill:#ffed46;fill-opacity:1;stroke:#c7b115;stroke-width:3.77952761;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke;stroke-linejoin:round" />
<path
id="path855"
transform="scale(0.26458333)"
d="M 403 152.94727 L 403 169.51953 L 419.57422 169.51953 L 403 152.94727 z "
style="opacity:1;fill:#ffed46;fill-opacity:1;stroke:#c7b115;stroke-width:3.77952761;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke;stroke-linejoin:round" />
<rect
transform="rotate(-90)"
ry="2.5431327e-006"
y="84.666664"
x="-57.552082"
height="29.104166"
width="5.2916665"
id="rect863"
style="opacity:0;fill:#ffed46;fill-opacity:1;stroke:#c7b115;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:fill markers stroke" />
</g>
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 285 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 B

View File

@ -210,6 +210,10 @@
"tree_item":"Miscellaneous/Switch", "tree_item":"Miscellaneous/Switch",
"type":"switch" "type":"switch"
}, },
{
"tree_item":"Miscellaneous/Custom",
"type":"custom"
},
{ {
"tree_item":"Miscellaneous/Remote", "tree_item":"Miscellaneous/Remote",
"type":"remote" "type":"remote"

View File

@ -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/widgets/tabs.gd" type="Script" id=4]
[ext_resource path="res://addons/material_maker/renderer.tscn" type="PackedScene" id=5] [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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0

View File

@ -2,7 +2,52 @@ tool
extends "res://addons/material_maker/nodes/node_generic.gd" extends "res://addons/material_maker/nodes/node_generic.gd"
func _on_Edit_pressed(): 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(): 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

View File

@ -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/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/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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
anchor_right = 0.0 anchor_right = 0.0
anchor_bottom = 0.0 anchor_bottom = 0.0
margin_left = 385.0 margin_left = 1.0
margin_top = 287.0 margin_top = 2.0
margin_right = 479.0 margin_right = 95.0
margin_bottom = 338.0 margin_bottom = 53.0
rect_pivot_offset = Vector2( 0, 0 ) rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false rect_clip_content = false
mouse_filter = 1 mouse_filter = 1
@ -34,6 +35,7 @@ slot/0/right_enabled = false
slot/0/right_type = 0 slot/0/right_type = 0
slot/0/right_color = Color( 1, 1, 1, 1 ) slot/0/right_color = Color( 1, 1, 1, 1 )
script = ExtResource( 1 ) script = ExtResource( 1 )
model = null
[node name="CustomNodeButtons" type="HBoxContainer" parent="." index="0"] [node name="CustomNodeButtons" type="HBoxContainer" parent="." index="0"]
@ -43,7 +45,7 @@ anchor_right = 0.0
anchor_bottom = 0.0 anchor_bottom = 0.0
margin_left = 16.0 margin_left = 16.0
margin_top = 24.0 margin_top = 24.0
margin_right = 78.0 margin_right = 107.0
margin_bottom = 46.0 margin_bottom = 46.0
rect_pivot_offset = Vector2( 0, 0 ) rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false rect_clip_content = false
@ -76,7 +78,7 @@ icon = ExtResource( 2 )
flat = true flat = true
align = 1 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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -100,8 +102,34 @@ icon = ExtResource( 3 )
flat = true flat = true
align = 1 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/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"] [connection signal="pressed" from="CustomNodeButtons/Save" to="." method="_on_Save_pressed"]

View File

@ -14,7 +14,7 @@ func set_model(m):
var file = File.new() var file = File.new()
var file_name = m var file_name = m
if !file.file_exists(file_name): 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.file_exists(file_name):
if file.open(file_name, File.READ) != OK: if file.open(file_name, File.READ) != OK:
return return
@ -33,6 +33,16 @@ func update_node(data):
return return
if !data.has("name"): if !data.has("name"):
return 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 title = data.name
model_data = data model_data = data
uses_seed = false uses_seed = false
@ -99,6 +109,8 @@ func update_node(data):
set_slot(i, false, 0, color_right, enable_right, 0, color_right) set_slot(i, false, 0, color_right, enable_right, 0, color_right)
else: else:
model_data.outputs = [] model_data.outputs = []
if custom_node_buttons != null:
move_child(custom_node_buttons, get_child_count()-1)
func subst(string, uv = ""): func subst(string, uv = ""):
string = string.replace("$(name)", name) string = string.replace("$(name)", name)

View File

@ -0,0 +1,8 @@
tool
extends HBoxContainer
func _ready():
pass
func _on_Delete_pressed():
queue_free()

View File

@ -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"]

View File

@ -1,16 +1,62 @@
tool
extends WindowDialog extends WindowDialog
var model_data var model_data = null
func _init(data): const ParameterEditor = preload("res://addons/material_maker/widgets/node_editor/parameter.tscn")
model_data = data 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(): signal node_changed
# Called when the node is added to the scene for the first time.
# Initialization here
pass
#func _process(delta): func add_item(parent, scene):
# # Called every frame. Delta is time since last frame. var object = scene.instance()
# # Update game logic here. parent.add_child(object)
# pass 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()

View File

@ -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/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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
anchor_right = 0.0 anchor_right = 0.0
anchor_bottom = 0.0 anchor_bottom = 0.0
margin_right = 469.0 margin_right = 726.0
margin_bottom = 373.0 margin_bottom = 399.0
rect_pivot_offset = Vector2( 0, 0 ) rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false rect_clip_content = false
mouse_filter = 0 mouse_filter = 0
mouse_default_cursor_shape = 0 mouse_default_cursor_shape = 0
size_flags_horizontal = 1 size_flags_horizontal = 1
size_flags_vertical = 1 size_flags_vertical = 1
popup_exclusive = false popup_exclusive = true
window_title = "Node Editor" window_title = "Node Editor"
resizable = false resizable = false
script = ExtResource( 1 ) 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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -29,15 +31,368 @@ anchor_right = 1.0
anchor_bottom = 1.0 anchor_bottom = 1.0
rect_pivot_offset = Vector2( 0, 0 ) rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false 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_filter = 0
mouse_default_cursor_shape = 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_horizontal = 1
size_flags_vertical = 1 size_flags_vertical = 1
tab_align = 0 alignment = 0
tabs_visible = true
[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_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
anchor_right = 1.0 anchor_right = 1.0
@ -70,4 +425,117 @@ caret_blink = false
caret_blink_speed = 0.65 caret_blink_speed = 0.65
caret_moving_by_right_click = true 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"]

View File

@ -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()

View File

@ -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"]

View File

@ -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

View File

@ -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"]