212 lines
		
	
	
	
		
			6.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
	
		
			6.8 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| [gd_scene load_steps=6 format=2]
 | |
| 
 | |
| [ext_resource path="res://icon.png" type="Texture" id=1]
 | |
| [ext_resource path="res://objects/actions/StaticShield.gd" type="Script" id=2]
 | |
| 
 | |
| [sub_resource type="Shader" id=1]
 | |
| code = "shader_type canvas_item;
 | |
| 
 | |
| uniform vec2 offset;
 | |
| uniform float scale:hint_range(0.5, 1000.0);
 | |
| // jitter cell ceneters. less gives more regular pattern
 | |
| uniform float jitter:hint_range(0.0, 1.0);
 | |
| 
 | |
| uniform vec4 color: hint_color = vec4(1,1,1,1);
 | |
| uniform float speed = 1.0;
 | |
| 
 | |
| // Cellular noise (\\\"Worley noise\\\") in 3D in GLSL.
 | |
| // Copyright (c) Stefan Gustavson 2011-04-19. All rights reserved.
 | |
| // This code is released under the conditions of the MIT license.
 | |
| // See LICENSE file for details.
 | |
| // https://github.com/stegu/webgl-noise
 | |
| 
 | |
| // Modulo 289 without a division (only multiplications)
 | |
| vec3 mod289(vec3 x) {
 | |
|     return x - floor(x * (1.0 / 289.0)) * 289.0;
 | |
| }
 | |
| 
 | |
| // Modulo 7 without a division
 | |
| vec3 mod7(vec3 x) {
 | |
|     return x - floor(x * (1.0 / 7.0)) * 7.0;
 | |
| }
 | |
| 
 | |
| // Permutation polynomial: (34x^2 + x) mod 289
 | |
| vec3 permute(vec3 x) {
 | |
|     return mod289((34.0 * x + 1.0) * x);
 | |
| }
 | |
| 
 | |
| // Cellular noise, returning F1 and F2 in a vec2.
 | |
| // 3x3x3 search region for good F2 everywhere, but a lot
 | |
| // slower than the 2x2x2 version.
 | |
| // The code below is a bit scary even to its author,
 | |
| // but it has at least half decent performance on a
 | |
| // modern GPU. In any case, it beats any software
 | |
| // implementation of Worley noise hands down.
 | |
| 
 | |
| vec2 cellular3d(vec3 P) {
 | |
|     float K = 0.142857142857; // 1/7
 | |
|     float Ko = 0.428571428571; // 1/2-K/2
 | |
|     float K2 = 0.020408163265306; // 1/(7*7)
 | |
|     float Kz = 0.166666666667; // 1/6
 | |
|     float Kzo = 0.416666666667; // 1/2-1/6*2
 | |
|     
 | |
|     vec3 Pi = mod289(floor(P));
 | |
|     vec3 Pf = fract(P) - 0.5;
 | |
|     
 | |
|     vec3 Pfx = Pf.x + vec3(1.0, 0.0, -1.0);
 | |
|     vec3 Pfy = Pf.y + vec3(1.0, 0.0, -1.0);
 | |
|     vec3 Pfz = Pf.z + vec3(1.0, 0.0, -1.0);
 | |
|     
 | |
|     vec3 p = permute(Pi.x + vec3(-1.0, 0.0, 1.0));
 | |
|     vec3 p1 = permute(p + Pi.y - 1.0);
 | |
|     vec3 p2 = permute(p + Pi.y);
 | |
|     vec3 p3 = permute(p + Pi.y + 1.0);
 | |
|     
 | |
|     vec3 p11 = permute(p1 + Pi.z - 1.0);
 | |
|     vec3 p12 = permute(p1 + Pi.z);
 | |
|     vec3 p13 = permute(p1 + Pi.z + 1.0);
 | |
|     
 | |
|     vec3 p21 = permute(p2 + Pi.z - 1.0);
 | |
|     vec3 p22 = permute(p2 + Pi.z);
 | |
|     vec3 p23 = permute(p2 + Pi.z + 1.0);
 | |
|     
 | |
|     vec3 p31 = permute(p3 + Pi.z - 1.0);
 | |
|     vec3 p32 = permute(p3 + Pi.z);
 | |
|     vec3 p33 = permute(p3 + Pi.z + 1.0);
 | |
|     
 | |
|     vec3 ox11 = fract(p11*K) - Ko;
 | |
|     vec3 oy11 = mod7(floor(p11*K))*K - Ko;
 | |
|     vec3 oz11 = floor(p11*K2)*Kz - Kzo; // p11 < 289 guaranteed
 | |
|     
 | |
|     vec3 ox12 = fract(p12*K) - Ko;
 | |
|     vec3 oy12 = mod7(floor(p12*K))*K - Ko;
 | |
|     vec3 oz12 = floor(p12*K2)*Kz - Kzo;
 | |
|     
 | |
|     vec3 ox13 = fract(p13*K) - Ko;
 | |
|     vec3 oy13 = mod7(floor(p13*K))*K - Ko;
 | |
|     vec3 oz13 = floor(p13*K2)*Kz - Kzo;
 | |
|     
 | |
|     vec3 ox21 = fract(p21*K) - Ko;
 | |
|     vec3 oy21 = mod7(floor(p21*K))*K - Ko;
 | |
|     vec3 oz21 = floor(p21*K2)*Kz - Kzo;
 | |
|     
 | |
|     vec3 ox22 = fract(p22*K) - Ko;
 | |
|     vec3 oy22 = mod7(floor(p22*K))*K - Ko;
 | |
|     vec3 oz22 = floor(p22*K2)*Kz - Kzo;
 | |
|     
 | |
|     vec3 ox23 = fract(p23*K) - Ko;
 | |
|     vec3 oy23 = mod7(floor(p23*K))*K - Ko;
 | |
|     vec3 oz23 = floor(p23*K2)*Kz - Kzo;
 | |
|     
 | |
|     vec3 ox31 = fract(p31*K) - Ko;
 | |
|     vec3 oy31 = mod7(floor(p31*K))*K - Ko;
 | |
|     vec3 oz31 = floor(p31*K2)*Kz - Kzo;
 | |
|     
 | |
|     vec3 ox32 = fract(p32*K) - Ko;
 | |
|     vec3 oy32 = mod7(floor(p32*K))*K - Ko;
 | |
|     vec3 oz32 = floor(p32*K2)*Kz - Kzo;
 | |
|     
 | |
|     vec3 ox33 = fract(p33*K) - Ko;
 | |
|     vec3 oy33 = mod7(floor(p33*K))*K - Ko;
 | |
|     vec3 oz33 = floor(p33*K2)*Kz - Kzo;
 | |
|     
 | |
|     vec3 dx11 = Pfx + jitter*ox11;
 | |
|     vec3 dy11 = Pfy.x + jitter*oy11;
 | |
|     vec3 dz11 = Pfz.x + jitter*oz11;
 | |
|     
 | |
|     vec3 dx12 = Pfx + jitter*ox12;
 | |
|     vec3 dy12 = Pfy.x + jitter*oy12;
 | |
|     vec3 dz12 = Pfz.y + jitter*oz12;
 | |
|     
 | |
|     vec3 dx13 = Pfx + jitter*ox13;
 | |
|     vec3 dy13 = Pfy.x + jitter*oy13;
 | |
|     vec3 dz13 = Pfz.z + jitter*oz13;
 | |
|     
 | |
|     vec3 dx21 = Pfx + jitter*ox21;
 | |
|     vec3 dy21 = Pfy.y + jitter*oy21;
 | |
|     vec3 dz21 = Pfz.x + jitter*oz21;
 | |
|     
 | |
|     vec3 dx22 = Pfx + jitter*ox22;
 | |
|     vec3 dy22 = Pfy.y + jitter*oy22;
 | |
|     vec3 dz22 = Pfz.y + jitter*oz22;
 | |
|     
 | |
|     vec3 dx23 = Pfx + jitter*ox23;
 | |
|     vec3 dy23 = Pfy.y + jitter*oy23;
 | |
|     vec3 dz23 = Pfz.z + jitter*oz23;
 | |
|     
 | |
|     vec3 dx31 = Pfx + jitter*ox31;
 | |
|     vec3 dy31 = Pfy.z + jitter*oy31;
 | |
|     vec3 dz31 = Pfz.x + jitter*oz31;
 | |
|     
 | |
|     vec3 dx32 = Pfx + jitter*ox32;
 | |
|     vec3 dy32 = Pfy.z + jitter*oy32;
 | |
|     vec3 dz32 = Pfz.y + jitter*oz32;
 | |
|     
 | |
|     vec3 dx33 = Pfx + jitter*ox33;
 | |
|     vec3 dy33 = Pfy.z + jitter*oy33;
 | |
|     vec3 dz33 = Pfz.z + jitter*oz33;
 | |
|     
 | |
|     vec3 d11 = dx11 * dx11 + dy11 * dy11 + dz11 * dz11;
 | |
|     vec3 d12 = dx12 * dx12 + dy12 * dy12 + dz12 * dz12;
 | |
|     vec3 d13 = dx13 * dx13 + dy13 * dy13 + dz13 * dz13;
 | |
|     vec3 d21 = dx21 * dx21 + dy21 * dy21 + dz21 * dz21;
 | |
|     vec3 d22 = dx22 * dx22 + dy22 * dy22 + dz22 * dz22;
 | |
|     vec3 d23 = dx23 * dx23 + dy23 * dy23 + dz23 * dz23;
 | |
|     vec3 d31 = dx31 * dx31 + dy31 * dy31 + dz31 * dz31;
 | |
|     vec3 d32 = dx32 * dx32 + dy32 * dy32 + dz32 * dz32;
 | |
|     vec3 d33 = dx33 * dx33 + dy33 * dy33 + dz33 * dz33;
 | |
|     
 | |
|     // Sort out the two smallest distances (F1, F2)
 | |
| // F1 only block
 | |
|     vec3 d1 = min(min(d11,d12), d13);
 | |
|     vec3 d2 = min(min(d21,d22), d23);
 | |
|     vec3 d3 = min(min(d31,d32), d33);
 | |
|     vec3 d = min(min(d1,d2), d3);
 | |
|     d.x = min(min(d.x,d.y),d.z);
 | |
|     return vec2(sqrt(d.x)); // F1 duplicated, no F2 computed
 | |
| // End of F1 only block
 | |
| }
 | |
| 
 | |
| void fragment() {
 | |
|     vec2 n = cellular3d(vec3((UV+offset)*scale, TIME*speed));
 | |
|     
 | |
|     //using F1 for output
 | |
|     //COLOR.rgb = vec3(n.x);
 | |
|     //using F2 for output
 | |
|     //COLOR.rgb = vec3(1.0-n.y);
 | |
|     //using both, keep experimenting with them :)
 | |
| //    COLOR.rgb = vec3(smoothstep(0, .2, n.y-n.x));
 | |
| 	COLOR = mix(color, vec4(0), smoothstep(1.0, 0.5, n.x));
 | |
| //	COLOR.a *= smoothstep(1.0,0.0,length(UV-vec2(0.5))*1.0);
 | |
| }"
 | |
| 
 | |
| [sub_resource type="ShaderMaterial" id=2]
 | |
| shader = SubResource( 1 )
 | |
| shader_param/offset = Vector2( 0, 0 )
 | |
| shader_param/scale = 4.0
 | |
| shader_param/jitter = 1.0
 | |
| shader_param/color = Color( 1, 0.964706, 0.45098, 1 )
 | |
| shader_param/speed = 3.0
 | |
| 
 | |
| [sub_resource type="CircleShape2D" id=3]
 | |
| radius = 17.0294
 | |
| 
 | |
| [node name="StaticShield" type="Area2D"]
 | |
| script = ExtResource( 2 )
 | |
| energy_usage = 5.0
 | |
| min_energy = 5.0
 | |
| 
 | |
| [node name="Static" type="Polygon2D" parent="."]
 | |
| visible = false
 | |
| material = SubResource( 2 )
 | |
| position = Vector2( 0, -4 )
 | |
| scale = Vector2( 3, 3 )
 | |
| z_index = 1
 | |
| texture = ExtResource( 1 )
 | |
| polygon = PoolVector2Array( -3, 5, -5, 3, -5.66667, 0, -5, -3, -3, -5, 0, -5.66667, 3, -5, 5, -3, 5.66667, 0, 5, 3, 3, 5, 0, 5.66667 )
 | |
| uv = PoolVector2Array( 14.274, 55.0982, 4.58411, 45.4083, 1.35414, 30.8735, 4.58411, 16.3386, 14.274, 6.64873, 28.8089, 3.41877, 43.3437, 6.64873, 53.0336, 16.3386, 57.8786, 30.8735, 53.0336, 45.4083, 43.3437, 55.0982, 28.8089, 58.3282 )
 | |
| 
 | |
| [node name="Shape" type="CollisionShape2D" parent="."]
 | |
| position = Vector2( 0, -4 )
 | |
| shape = SubResource( 3 )
 | |
| disabled = true
 |