Color parameters and RGBA generic outputs

Also added default value to float, boolean and enum parameters
This commit is contained in:
Rodolphe Suescun 2018-10-28 17:06:42 +01:00
parent 5d80d9db63
commit 78bb4551a8
10 changed files with 107 additions and 15 deletions

View File

@ -80,6 +80,8 @@ func update_node(data):
control.selected = 0 if !p.has("default") else p.default control.selected = 0 if !p.has("default") else p.default
elif p.type == "boolean": elif p.type == "boolean":
control = CheckBox.new() control = CheckBox.new()
elif p.type == "color":
control = ColorPickerButton.new()
if control != null: if control != null:
var label = p.name var label = p.name
control.name = label control.name = label
@ -108,6 +110,9 @@ func update_node(data):
if output.has("rgb"): if output.has("rgb"):
enable_right = true enable_right = true
color_right = Color(0.5, 0.5, 1.0) color_right = Color(0.5, 0.5, 1.0)
elif output.has("rgba"):
enable_right = true
color_right = Color(0.0, 0.5, 0.0, 0.5)
elif output.has("f"): elif output.has("f"):
enable_right = true enable_right = true
set_slot(i, false, 0, color_right, enable_right, 0, color_right) set_slot(i, false, 0, color_right, enable_right, 0, color_right)
@ -132,6 +137,8 @@ func subst(string, uv = ""):
value_string = "%.9f" % pow(2, value+p.first) value_string = "%.9f" % pow(2, value+p.first)
elif p.type == "enum": elif p.type == "enum":
value_string = p.values[value].value value_string = p.values[value].value
elif p.type == "color":
value_string = "vec4(%.9f, %.9f, %.9f, %.9f)" % [ value.r, value.g, value.b, value.a ]
if value_string != null: if value_string != null:
string = string.replace("$(%s)" % p.name, value_string) string = string.replace("$(%s)" % p.name, value_string)
return string return string
@ -147,10 +154,14 @@ func _get_shader_code(uv, slot = 0):
if variant_index == -1: if variant_index == -1:
variant_index = generated_variants.size() variant_index = generated_variants.size()
generated_variants.append(variant_string) generated_variants.append(variant_string)
if output.has("rgba"):
rv.code += "vec4 %s_%d_%d_rgba = %s;\n" % [ name, slot, variant_index, subst(output.rgba, uv) ]
if output.has("rgb"): if output.has("rgb"):
rv.code += "vec3 %s_%d_%d_rgb = %s;\n" % [ name, slot, variant_index, subst(output.rgb, uv) ] rv.code += "vec3 %s_%d_%d_rgb = %s;\n" % [ name, slot, variant_index, subst(output.rgb, uv) ]
if output.has("f"): if output.has("f"):
rv.code += "float %s_%d_%d_f = %s;\n" % [ name, slot, variant_index, subst(output.f, uv) ] rv.code += "float %s_%d_%d_f = %s;\n" % [ name, slot, variant_index, subst(output.f, uv) ]
if output.has("rgba"):
rv.rgba = "%s_%d_%d_rgba" % [ name, slot, variant_index ]
if output.has("rgb"): if output.has("rgb"):
rv.rgb = "%s_%d_%d_rgb" % [ name, slot, variant_index ] rv.rgb = "%s_%d_%d_rgb" % [ name, slot, variant_index ]
if output.has("f"): if output.has("f"):

View File

@ -7,16 +7,21 @@ func _ready():
func set_model_data(data): func set_model_data(data):
if data.has("rgb"): if data.has("rgb"):
$Type.selected = 1 $Type.selected = 1
$Default.text = data.rgb $Value.text = data.rgb
elif data.has("rgba"):
$Type.selected = 2
$Value.text = data.rgba
elif data.has("f"): elif data.has("f"):
$Type.selected = 0 $Type.selected = 0
$Default.text = data.f $Value.text = data.f
func get_model_data(): func get_model_data():
if $Type.selected == 1: if $Type.selected == 1:
return { rgb=$Default.text } return { rgb=$Value.text }
elif $Type.selected == 2:
return { rgba=$Value.text }
else: else:
return { f=$Default.text } return { f=$Value.text }
func _on_Delete_pressed(): func _on_Delete_pressed():
queue_free() queue_free()

View File

@ -3,7 +3,7 @@
[ext_resource path="res://addons/material_maker/widgets/node_editor/output.gd" type="Script" id=1] [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] [ext_resource path="res://addons/material_maker/icons/minus.png" type="Texture" id=2]
[node name="Output" type="HBoxContainer"] [node name="Output" type="HBoxContainer" index="0"]
anchor_left = 0.0 anchor_left = 0.0
anchor_top = 0.0 anchor_top = 0.0
@ -70,11 +70,11 @@ group = null
text = "GreyScale" text = "GreyScale"
flat = false flat = false
align = 0 align = 0
items = [ "GreyScale", null, false, 0, null, "Color", null, false, 1, null ] items = [ "GreyScale", null, false, 0, null, "Color", null, false, 1, null, "RGBA", null, false, -1, null ]
selected = 0 selected = 0
_sections_unfolded = [ "Focus", "Hint", "Rect" ] _sections_unfolded = [ "Focus", "Hint", "Rect" ]
[node name="Default" type="LineEdit" parent="." index="2"] [node name="Value" type="LineEdit" parent="." index="2"]
anchor_left = 0.0 anchor_left = 0.0
anchor_top = 0.0 anchor_top = 0.0

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=7 format=2] [gd_scene load_steps=8 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/widgets/node_editor/parameter.gd" type="Script" id=1]
[ext_resource path="res://addons/material_maker/icons/minus.png" type="Texture" id=2] [ext_resource path="res://addons/material_maker/icons/minus.png" type="Texture" id=2]
@ -6,6 +6,7 @@
[ext_resource path="res://addons/material_maker/widgets/node_editor/parameter_size.tscn" type="PackedScene" id=4] [ext_resource path="res://addons/material_maker/widgets/node_editor/parameter_size.tscn" type="PackedScene" id=4]
[ext_resource path="res://addons/material_maker/widgets/node_editor/parameter_enum.tscn" type="PackedScene" id=5] [ext_resource path="res://addons/material_maker/widgets/node_editor/parameter_enum.tscn" type="PackedScene" id=5]
[ext_resource path="res://addons/material_maker/widgets/node_editor/parameter_boolean.tscn" type="PackedScene" id=6] [ext_resource path="res://addons/material_maker/widgets/node_editor/parameter_boolean.tscn" type="PackedScene" id=6]
[ext_resource path="res://addons/material_maker/widgets/node_editor/parameter_color.tscn" type="PackedScene" id=7]
[node name="Parameter" type="HBoxContainer" index="0"] [node name="Parameter" type="HBoxContainer" index="0"]
@ -106,7 +107,7 @@ anchor_top = 0.0
anchor_right = 0.0 anchor_right = 0.0
anchor_bottom = 0.0 anchor_bottom = 0.0
margin_left = 180.0 margin_left = 180.0
margin_right = 250.0 margin_right = 247.0
margin_bottom = 24.0 margin_bottom = 24.0
rect_pivot_offset = Vector2( 0, 0 ) rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false rect_clip_content = false
@ -120,10 +121,10 @@ action_mode = 0
enabled_focus_mode = 2 enabled_focus_mode = 2
shortcut = null shortcut = null
group = null group = null
text = "Float" text = "float"
flat = false flat = false
align = 0 align = 0
items = [ ] items = [ "float", null, false, -1, null, "size", null, false, -1, null, "enum", null, false, -1, null, "boolean", null, false, -1, null ]
selected = 0 selected = 0
[node name="Types" type="HBoxContainer" parent="." index="4"] [node name="Types" type="HBoxContainer" parent="." index="4"]
@ -132,8 +133,8 @@ 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 = 254.0 margin_left = 251.0
margin_right = 254.0 margin_right = 251.0
margin_bottom = 24.0 margin_bottom = 24.0
rect_pivot_offset = Vector2( 0, 0 ) rect_pivot_offset = Vector2( 0, 0 )
rect_clip_content = false rect_clip_content = false
@ -164,6 +165,12 @@ margin_right = 839.0
margin_left = 843.0 margin_left = 843.0
margin_right = 917.0 margin_right = 917.0
[node name="color" parent="Types" index="4" instance=ExtResource( 7 )]
visible = false
margin_left = 551.0
margin_right = 563.0
[connection signal="pressed" from="Delete" to="." method="_on_Delete_pressed"] [connection signal="pressed" from="Delete" to="." method="_on_Delete_pressed"]
[connection signal="item_selected" from="Type" to="." method="_on_Type_item_selected"] [connection signal="item_selected" from="Type" to="." method="_on_Type_item_selected"]

View File

@ -6,7 +6,9 @@ func _ready():
func get_model_data(): func get_model_data():
var data = {} var data = {}
data.default = $Default.pressed
return data return data
func set_model_data(data): func set_model_data(data):
pass if data.has("default"):
$Default.pressed = data.default

View File

@ -4,7 +4,6 @@
[node name="boolean" type="HBoxContainer"] [node name="boolean" type="HBoxContainer"]
editor/display_folded = true
visible = false visible = false
anchor_left = 0.0 anchor_left = 0.0
anchor_top = 0.0 anchor_top = 0.0

View File

@ -0,0 +1,15 @@
tool
extends HBoxContainer
func _ready():
pass
func get_model_data():
var data = {}
var default = $Default.color
data.default = { r=default.r, g=default.g, b=default.b, a=default.a}
return data
func set_model_data(data):
if data.has("default"):
$Default.color = Color(data.default.r, data.default.g, data.default.b, data.default.a)

View File

@ -0,0 +1,48 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/material_maker/widgets/node_editor/parameter_color.gd" type="Script" id=1]
[node name="color" type="HBoxContainer" index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_right = 74.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="Default" type="ColorPickerButton" parent="." index="0"]
anchor_left = 0.0
anchor_top = 0.0
anchor_right = 0.0
anchor_bottom = 0.0
margin_right = 100.0
margin_bottom = 24.0
rect_min_size = Vector2( 100, 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
flat = false
align = 1
color = Color( 1, 1, 1, 1 )
edit_alpha = true
_sections_unfolded = [ "Rect" ]

View File

@ -16,10 +16,12 @@ func _ready():
func get_model_data(): func get_model_data():
var data = {} var data = {}
data.values = enum_values data.values = enum_values
data.default = enum_current
return data return data
func set_model_data(data): func set_model_data(data):
enum_values = data.values.duplicate() enum_values = data.values.duplicate()
enum_current = data.default
update_enum_list() update_enum_list()
func update_enum_list(): func update_enum_list():

View File

@ -9,6 +9,7 @@ func get_model_data():
data.min = $Min.value data.min = $Min.value
data.max = $Max.value data.max = $Max.value
data.step = $Step.value data.step = $Step.value
data.default = $Default.value
if $SpinBox.pressed: if $SpinBox.pressed:
data.widget = "spinbox" data.widget = "spinbox"
return data return data
@ -20,4 +21,6 @@ func set_model_data(data):
$Max.value = data.max $Max.value = data.max
if data.has("step"): if data.has("step"):
$Step.value = data.step $Step.value = data.step
if data.has("default"):
$Default.value = data.default
$SpinBox.pressed = ( data.has("widget") && data.widget == "spinbox" ) $SpinBox.pressed = ( data.has("widget") && data.widget == "spinbox" )