[gd_scene load_steps=19 format=2] [ext_resource path="res://src/Piece.gd" type="Script" id=1] [ext_resource path="res://assets/artworks/escher_lizards.jpg" type="Texture" id=3] [sub_resource type="VisualShaderNodeExpression" id=1] output_port_for_preview = 0 size = Vector2( 657, 584 ) expression = "// https://iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm vec2 rel_p = input.xy - vec2(0.5, 0.5); float box_size = 0.4; vec2 box = vec2(box_size, box_size); vec2 d = abs(rel_p) - box; // mirroring float dist = length(max(d, 0.0)) + min(max(d.x, d.y), 0.0); alpha_mask = dist < (0.5 - box_size); float thickness = 0.05; vec2 box_thick = vec2(box_size, box_size - thickness); vec2 d_thick = abs(rel_p) - box_thick; float dist_thick = length(max(d_thick, 0.0)) + min(max(d_thick.x, d_thick.y), 0.0); is_thickness = rel_p.y > 0.0 && dist_thick > (0.5 - box_size);" [sub_resource type="VisualShaderNodeColorConstant" id=2] constant = Color( 0.733333, 0.34902, 0.0666667, 1 ) [sub_resource type="VisualShaderNodeSwitch" id=3] output_port_for_preview = 0 [sub_resource type="VisualShaderNodeExpression" id=4] output_port_for_preview = 0 size = Vector2( 545, 407 ) expression = "float speed = 2.0; float delta = mod(t * speed, 3) - 1.0; float slope = 1.5; float thickness = 0.05; if (abs(input0.x - ((1.0 - input0.y + delta) / slope)) < thickness) { output0 = vec3(0.5); }" [sub_resource type="VisualShaderNodeColorOp" id=5] [sub_resource type="VisualShaderNodeInput" id=6] input_name = "time" [sub_resource type="VisualShaderNodeSwitch" id=7] [sub_resource type="VisualShaderNodeBooleanUniform" id=8] uniform_name = "reflection" [sub_resource type="VisualShaderNodeTextureUniform" id=9] output_port_for_preview = 0 uniform_name = "artwork" texture_type = 1 [sub_resource type="VisualShaderNodeInput" id=10] output_port_for_preview = 0 input_name = "uv" [sub_resource type="VisualShaderNodeVectorOp" id=11] output_port_for_preview = 0 default_input_values = [ 0, Vector3( 0, 0, 0 ), 1, Vector3( 0.25, 0.25, 1 ) ] operator = 2 [sub_resource type="VisualShaderNodeVectorOp" id=12] default_input_values = [ 0, Vector3( 0, 0, 0 ), 1, Vector3( 0.8, 0.1, 0 ) ] [sub_resource type="VisualShaderNodeVec3Uniform" id=13] uniform_name = "scale" [sub_resource type="VisualShaderNodeVec3Uniform" id=14] uniform_name = "offset" [sub_resource type="VisualShader" id=15] code = "shader_type canvas_item; uniform bool reflection; uniform vec3 scale; uniform vec3 offset; uniform sampler2D artwork : hint_albedo; void vertex() { // Output:0 } void fragment() { // Input:4 vec3 n_out4p0 = vec3(UV, 0.0); // Expression:13 bool n_out13p0; bool n_out13p1; n_out13p0 = false; n_out13p1 = false; { // https://iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm vec2 rel_p = n_out4p0.xy - vec2(0.5, 0.5); float box_size = 0.4; vec2 box = vec2(box_size, box_size); vec2 d = abs(rel_p) - box; // mirroring float dist = length(max(d, 0.0)) + min(max(d.x, d.y), 0.0); n_out13p0 = dist < (0.5 - box_size); float thickness = 0.05; vec2 box_thick = vec2(box_size, box_size - thickness); vec2 d_thick = abs(rel_p) - box_thick; float dist_thick = length(max(d_thick, 0.0)) + min(max(d_thick.x, d_thick.y), 0.0); n_out13p1 = rel_p.y > 0.0 && dist_thick > (0.5 - box_size); } // Color:15 vec3 n_out15p0 = vec3(0.733333, 0.349020, 0.066667); float n_out15p1 = 1.000000; // BooleanUniform:24 bool n_out24p0 = reflection; // VectorUniform:7 vec3 n_out7p0 = scale; // VectorOp:5 vec3 n_out5p0 = n_out4p0 * n_out7p0; // VectorUniform:8 vec3 n_out8p0 = offset; // VectorOp:6 vec3 n_out6p0 = n_out5p0 + n_out8p0; // TextureUniform:25 vec3 n_out25p0; float n_out25p1; { vec4 n_tex_read = texture(artwork, n_out6p0.xy); n_out25p0 = n_tex_read.rgb; n_out25p1 = n_tex_read.a; } // Input:22 float n_out22p0 = TIME; // Expression:19 vec3 n_out19p0; n_out19p0 = vec3(0.0, 0.0, 0.0); { float speed = 2.0; float delta = mod(n_out22p0 * speed, 3) - 1.0; float slope = 1.5; float thickness = 0.05; if (abs(n_out6p0.x - ((1.0 - n_out6p0.y + delta) / slope)) < thickness) { n_out19p0 = vec3(0.5); } } // ColorOp:21 vec3 n_out21p0 = vec3(1.0) - (vec3(1.0) - n_out25p0) * (vec3(1.0) - n_out19p0); // VectorSwitch:23 vec3 n_out23p0; if(n_out24p0) { n_out23p0 = n_out21p0; } else { n_out23p0 = n_out25p0; } // VectorSwitch:17 vec3 n_out17p0; if(n_out13p1) { n_out17p0 = n_out15p0; } else { n_out17p0 = n_out23p0; } // Output:0 COLOR.rgb = n_out17p0; COLOR.a = n_out13p0 ? 1.0 : 0.0; } void light() { // Output:0 } " mode = 1 flags/light_only = false nodes/fragment/0/position = Vector2( 1680, 260 ) nodes/fragment/4/node = SubResource( 10 ) nodes/fragment/4/position = Vector2( 0, 260 ) nodes/fragment/5/node = SubResource( 11 ) nodes/fragment/5/position = Vector2( 280, -20 ) nodes/fragment/6/node = SubResource( 12 ) nodes/fragment/6/position = Vector2( 540, 140 ) nodes/fragment/7/node = SubResource( 13 ) nodes/fragment/7/position = Vector2( -20, 60 ) nodes/fragment/8/node = SubResource( 14 ) nodes/fragment/8/position = Vector2( 300, 240 ) nodes/fragment/13/node = SubResource( 1 ) nodes/fragment/13/position = Vector2( 340, 400 ) nodes/fragment/13/size = Vector2( 657, 584 ) nodes/fragment/13/input_ports = "0,1,input;" nodes/fragment/13/output_ports = "0,2,alpha_mask;1,2,is_thickness;" nodes/fragment/13/expression = "// https://iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm vec2 rel_p = input.xy - vec2(0.5, 0.5); float box_size = 0.4; vec2 box = vec2(box_size, box_size); vec2 d = abs(rel_p) - box; // mirroring float dist = length(max(d, 0.0)) + min(max(d.x, d.y), 0.0); alpha_mask = dist < (0.5 - box_size); float thickness = 0.05; vec2 box_thick = vec2(box_size, box_size - thickness); vec2 d_thick = abs(rel_p) - box_thick; float dist_thick = length(max(d_thick, 0.0)) + min(max(d_thick.x, d_thick.y), 0.0); is_thickness = rel_p.y > 0.0 && dist_thick > (0.5 - box_size);" nodes/fragment/15/node = SubResource( 2 ) nodes/fragment/15/position = Vector2( 1480, -40 ) nodes/fragment/17/node = SubResource( 3 ) nodes/fragment/17/position = Vector2( 1460, 80 ) nodes/fragment/19/node = SubResource( 4 ) nodes/fragment/19/position = Vector2( 420, -500 ) nodes/fragment/19/size = Vector2( 545, 407 ) nodes/fragment/19/input_ports = "0,1,input0;1,0,t;" nodes/fragment/19/output_ports = "0,1,output0;" nodes/fragment/19/expression = "float speed = 2.0; float delta = mod(t * speed, 3) - 1.0; float slope = 1.5; float thickness = 0.05; if (abs(input0.x - ((1.0 - input0.y + delta) / slope)) < thickness) { output0 = vec3(0.5); }" nodes/fragment/21/node = SubResource( 5 ) nodes/fragment/21/position = Vector2( 1220, -200 ) nodes/fragment/22/node = SubResource( 6 ) nodes/fragment/22/position = Vector2( 160, -300 ) nodes/fragment/23/node = SubResource( 7 ) nodes/fragment/23/position = Vector2( 1200, 20 ) nodes/fragment/24/node = SubResource( 8 ) nodes/fragment/24/position = Vector2( 1200, -60 ) nodes/fragment/25/node = SubResource( 9 ) nodes/fragment/25/position = Vector2( 840, 20 ) nodes/fragment/connections = PoolIntArray( 5, 0, 6, 0, 13, 0, 0, 1, 4, 0, 5, 0, 4, 0, 13, 0, 13, 1, 17, 0, 15, 0, 17, 1, 17, 0, 0, 0, 8, 0, 6, 1, 7, 0, 5, 1, 19, 0, 21, 1, 22, 0, 19, 1, 6, 0, 19, 0, 24, 0, 23, 0, 21, 0, 23, 1, 23, 0, 17, 2, 6, 0, 25, 0, 25, 0, 23, 2, 25, 0, 21, 0 ) [sub_resource type="ShaderMaterial" id=16] shader = SubResource( 15 ) shader_param/reflection = false shader_param/scale = Vector3( 0.25, 0.25, 1 ) shader_param/offset = Vector3( 0, 0, 0 ) shader_param/artwork = ExtResource( 3 ) [node name="Piece" type="Node2D"] script = ExtResource( 1 ) texture = ExtResource( 3 ) [node name="ColorRect" type="ColorRect" parent="."] material = SubResource( 16 ) anchor_right = 1.0 anchor_bottom = 1.0 margin_right = 160.0 margin_bottom = 160.0 mouse_filter = 2 __meta__ = { "_edit_use_anchors_": false } [node name="Label" type="Label" parent="ColorRect"] visible = false margin_left = 10.0 margin_top = 10.0 margin_right = 50.0 margin_bottom = 50.0 rect_scale = Vector2( 3, 3 ) rect_clip_content = true size_flags_vertical = 1 custom_colors/font_color = Color( 0, 0, 0, 1 ) text = "0" __meta__ = { "_edit_use_anchors_": false }