diff --git a/project.md b/project.md index 25d0466..a779f05 100644 --- a/project.md +++ b/project.md @@ -4,6 +4,9 @@ Todo - [ ] save/load preferences - [ ] load custom image - [ ] flip panel for more options +- [o] piece + - [X] rounded corners + - [ ] thickness - [ ] highlight hints - [ ] art generator - [ ] properly align widgets @@ -33,3 +36,4 @@ Inspiration ----------- - [ZHED](playzhed.com) - [adrena...line](managore.itch.io/adrena-line) +- [pet putt](http://petputt.com/) diff --git a/src/Main.tscn b/src/Main.tscn index b1a90bd..1b876fd 100644 --- a/src/Main.tscn +++ b/src/Main.tscn @@ -39,6 +39,9 @@ margin_right = 540.0 margin_bottom = 560.0 rows = 4 columns = 4 +width = 512 +height = 512 +current_state = 0 [node name="VSplitContainer" type="VBoxContainer" parent="HSplitContainer"] margin_left = 548.0 diff --git a/src/Piece.tscn b/src/Piece.tscn index d69571c..96df301 100644 --- a/src/Piece.tscn +++ b/src/Piece.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=13 format=2] +[gd_scene load_steps=14 format=2] [ext_resource path="res://src/Piece.gd" type="Script" id=1] [ext_resource path="res://assets/escher_lizards.jpg" type="Texture" id=2] @@ -6,6 +6,16 @@ [sub_resource type="VisualShaderNodeVec3Constant" id=1] constant = Vector3( 0.3, 0.3, 0 ) +[sub_resource type="VisualShaderNodeExpression" id=12] +output_port_for_preview = 0 +size = Vector2( 620, 395 ) +expression = "// https://iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm +vec2 rel_p = input.xy - vec2(0.5, 0.5); +float box = 0.4; +vec2 d = abs(rel_p) - vec2(box, box); // mirroring +float dist = length(max(d, 0.0)) + min(max(d.x,d.y), 0.0); +alpha_mask = dist < (0.5 - box);" + [sub_resource type="VisualShaderNodeTexture" id=2] output_port_for_preview = 0 texture = ExtResource( 2 ) @@ -38,6 +48,7 @@ uniform vec3 offset; uniform sampler2D tex_frg_3; + void vertex() { // Output:0 @@ -45,34 +56,40 @@ void vertex() { void fragment() { // Input:4 - vec3 n_out4p0; - n_out4p0 = vec3(UV,0.0); + vec3 n_out4p0 = vec3(UV, 0.0); // VectorUniform:7 - vec3 n_out7p0; - n_out7p0 = scale; + vec3 n_out7p0 = scale; // VectorOp:5 - vec3 n_out5p0; - n_out5p0 = n_out4p0 * n_out7p0; + vec3 n_out5p0 = n_out4p0 * n_out7p0; // VectorUniform:8 - vec3 n_out8p0; - n_out8p0 = offset; + vec3 n_out8p0 = offset; // VectorOp:6 - vec3 n_out6p0; - n_out6p0 = n_out5p0 + n_out8p0; + vec3 n_out6p0 = n_out5p0 + n_out8p0; // Texture:3 - vec3 n_out3p0; - float n_out3p1; - vec4 tex_frg_3_read = texture( tex_frg_3 , n_out6p0.xy ); - n_out3p0 = tex_frg_3_read.rgb; - n_out3p1 = tex_frg_3_read.a; + vec4 tex_frg_3_read = texture(tex_frg_3, n_out6p0.xy); + vec3 n_out3p0 = tex_frg_3_read.rgb; + float n_out3p1 = tex_frg_3_read.a; + +// Expression:13 + bool n_out13p0; + n_out13p0 = false; + { + // https://iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm + vec2 rel_p = n_out4p0.xy - vec2(0.5, 0.5); + float box = 0.4; + vec2 d = abs(rel_p) - vec2(box, box); // mirroring + float dist = length(max(d, 0.0)) + min(max(d.x,d.y), 0.0); + n_out13p0 = dist < (0.5 - box); + } // Output:0 COLOR.rgb = n_out3p0; + COLOR.a = n_out13p0 ? 1.0 : 0.0; } @@ -81,27 +98,38 @@ void light() { } " -graph_offset = Vector2( 0, 75 ) +graph_offset = Vector2( -213.196, 77.3248 ) mode = 1 flags/light_only = false -nodes/fragment/0/position = Vector2( 1080, 160 ) +nodes/fragment/0/position = Vector2( 1120, 360 ) nodes/fragment/3/node = SubResource( 2 ) nodes/fragment/3/position = Vector2( 820, 120 ) nodes/fragment/4/node = SubResource( 3 ) -nodes/fragment/4/position = Vector2( 40, 60 ) +nodes/fragment/4/position = Vector2( -120, 360 ) nodes/fragment/5/node = SubResource( 4 ) nodes/fragment/5/position = Vector2( 360, 80 ) nodes/fragment/6/node = SubResource( 5 ) nodes/fragment/6/position = Vector2( 620, 240 ) nodes/fragment/7/node = SubResource( 6 ) -nodes/fragment/7/position = Vector2( 40, 240 ) +nodes/fragment/7/position = Vector2( 80, 60 ) nodes/fragment/8/node = SubResource( 7 ) -nodes/fragment/8/position = Vector2( 360, 380 ) +nodes/fragment/8/position = Vector2( 380, 340 ) nodes/fragment/9/node = SubResource( 8 ) -nodes/fragment/9/position = Vector2( 40, 300 ) +nodes/fragment/9/position = Vector2( -80, 120 ) nodes/fragment/11/node = SubResource( 1 ) -nodes/fragment/11/position = Vector2( 360, 440 ) -nodes/fragment/connections = PoolIntArray( 3, 0, 0, 0, 4, 0, 5, 0, 5, 0, 6, 0, 6, 0, 3, 0, 7, 0, 5, 1, 8, 0, 6, 1 ) +nodes/fragment/11/position = Vector2( 220, 400 ) +nodes/fragment/13/node = SubResource( 12 ) +nodes/fragment/13/position = Vector2( 260, 540 ) +nodes/fragment/13/size = Vector2( 620, 395 ) +nodes/fragment/13/input_ports = "0,1,input;" +nodes/fragment/13/output_ports = "0,2,alpha_mask;" +nodes/fragment/13/expression = "// https://iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm +vec2 rel_p = input.xy - vec2(0.5, 0.5); +float box = 0.4; +vec2 d = abs(rel_p) - vec2(box, box); // mirroring +float dist = length(max(d, 0.0)) + min(max(d.x,d.y), 0.0); +alpha_mask = dist < (0.5 - box);" +nodes/fragment/connections = PoolIntArray( 3, 0, 0, 0, 5, 0, 6, 0, 6, 0, 3, 0, 13, 0, 0, 1, 4, 0, 5, 0, 4, 0, 13, 0, 8, 0, 6, 1, 7, 0, 5, 1 ) [sub_resource type="ShaderMaterial" id=10] shader = SubResource( 9 ) @@ -123,6 +151,7 @@ __meta__ = { } [node name="Label" type="Label" parent="ColorRect"] +visible = false margin_left = 10.0 margin_top = 10.0 margin_right = 50.0