Skip to content

Commit ec770b9

Browse files
committed
Add progress of hurting cell, cell adjustments
1 parent 0b6b0bc commit ec770b9

13 files changed

Lines changed: 228 additions & 54 deletions

game/game_area/game_area.tscn

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,18 @@
33
[ext_resource type="Script" uid="uid://biw1lu5iws1o4" path="res://game/game_area/game_area.gd" id="1_wu7i3"]
44
[ext_resource type="PackedScene" uid="uid://dedoe7ai17311" path="res://game/player/player.tscn" id="2_hbsx8"]
55
[ext_resource type="PackedScene" uid="uid://b8s7r2s04sqw3" path="res://game/area/area.tscn" id="4_p0s4x"]
6+
[ext_resource type="PackedScene" uid="uid://ctcysahbtl4wg" path="res://game/enemies/enemy_test/enemy.tscn" id="4_ybvrr"]
67

78
[node name="GameArea" type="Node2D" unique_id=1471830763]
89
script = ExtResource("1_wu7i3")
910

1011
[node name="Area" parent="." unique_id=495972852 instance=ExtResource("4_p0s4x")]
1112

1213
[node name="Player" parent="." unique_id=956162283 instance=ExtResource("2_hbsx8")]
13-
position = Vector2(-940, 0)
14+
position = Vector2(33, 13)
15+
16+
[node name="Enemy" parent="." unique_id=175218643 instance=ExtResource("4_ybvrr")]
17+
position = Vector2(407, -381)
18+
19+
[node name="Enemy2" parent="." unique_id=978126931 instance=ExtResource("4_ybvrr")]
20+
position = Vector2(-438, 469)

game/ship_skeleton/cell/cell.gd

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,13 @@ func _ready() -> void:
2222
hurtbox_2d.got_hit.connect(_on_hit)
2323
health_component.health_depleted.connect(_on_health_depleted)
2424

25+
func _process(delta: float) -> void:
26+
var hp_ratio := health_component.get_current_health_percentage()
27+
var crack_death := lerpf(0.0, 3, 1 - hp_ratio)
28+
(sprite_2d.material as ShaderMaterial).set_shader_parameter("crack_depth", crack_death)
29+
var crack_profile := lerpf(0.7, 1.1, 1 - hp_ratio)
30+
(sprite_2d.material as ShaderMaterial).set_shader_parameter("crack_profile", crack_profile)
31+
2532
func _physics_process(delta: float) -> void:
2633
if is_destroyed:
2734
var can_restore := false

game/ship_skeleton/cell/cell.gdshader

Lines changed: 136 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,134 @@
11
shader_type canvas_item;
22

3+
// Crack generation
4+
uniform float crack_depth : hint_range(0.0, 10.0) = 2.236;
5+
uniform float crack_scale : hint_range(1.0, 10.0) = 4.0;
6+
uniform float crack_zebra_scale : hint_range(0.0, 10.0) = 2.67;
7+
uniform float crack_zebra_amp : hint_range(0.0, 10.0) = 1.3;
8+
uniform float crack_profile : hint_range(0.0, 10.0) = 1.0;
9+
uniform float crack_slope : hint_range(0.0, 50.0) = 45.8;
10+
uniform float crack_width : hint_range(0.0, 1.0) = 0.001;
311
uniform float hp_ratio = 1.0;
412
uniform bool is_hit_flash_active = false;
513

6-
void vertex() {
7-
// Called for every vertex the material is visible on.
14+
const vec4 background_color = vec4(0.0, 0.0, 0.0, 0.0);
15+
const vec4 crack_color = vec4(0.0, 0.0, 0.0, 1.0);
16+
17+
// Glass effect
18+
uniform vec2 refraction_offset = vec2(25.0,25.0);
19+
uniform vec2 reflection_offset = vec2(1.0,1.0);
20+
uniform vec4 reflection_color : source_color = vec4(0.588,0.588,0.588,0.5);
21+
22+
uniform sampler2D SCREEN_TEXTURE : hint_screen_texture, filter_linear_mipmap;
23+
24+
25+
26+
vec2 hash(vec2 p) {
27+
p = vec2(dot(p, vec2(127.1, 311.7)), dot(p, vec2(269.5, 183.3)));
28+
return fract(sin(p) * 43758.5453123);
29+
}
30+
31+
float noise(vec2 p) {
32+
vec2 i = floor(p);
33+
vec2 f = fract(p);
34+
f = f * f * (3.0 - 2.0 * f);
35+
return mix(mix(dot(hash(i + vec2(0.0, 0.0)), f - vec2(0.0, 0.0)),
36+
dot(hash(i + vec2(1.0, 0.0)), f - vec2(1.0, 0.0)), f.x),
37+
mix(dot(hash(i + vec2(0.0, 1.0)), f - vec2(0.0, 1.0)),
38+
dot(hash(i + vec2(1.0, 1.0)), f - vec2(1.0, 1.0)), f.x), f.y);
39+
}
40+
41+
vec3 voronoi(vec2 u) {
42+
vec2 p = floor(u);
43+
vec2 f = fract(u);
44+
float res = 8.0;
45+
vec2 b = vec2(0.0);
46+
for (int j = -1; j <= 1; j++) {
47+
for (int i = -1; i <= 1; i++) {
48+
vec2 g = vec2(float(i), float(j));
49+
vec2 o = hash(p + g);
50+
vec2 r = g - f + o;
51+
float d = dot(r, r);
52+
if (d < res) {
53+
res = d;
54+
b = r;
55+
}
56+
}
57+
}
58+
return vec3(sqrt(res), b);
59+
}
60+
61+
vec3 voronoiB(vec2 u) {
62+
vec2 p = floor(u);
63+
vec2 f = fract(u);
64+
float res = 8.0;
65+
vec2 C = vec2(0.0);
66+
vec2 P = vec2(0.0);
67+
for (int j = -1; j <= 1; j++) {
68+
for (int i = -1; i <= 1; i++) {
69+
vec2 g = vec2(float(i), float(j));
70+
vec2 o = hash(p + g);
71+
vec2 r = g - f + o;
72+
float d = dot(r, r);
73+
if (d < res) {
74+
res = d;
75+
C = g;
76+
P = r;
77+
}
78+
}
79+
}
80+
res = 8.0;
81+
for (int j = -2; j <= 2; j++) {
82+
for (int i = -2; i <= 2; i++) {
83+
vec2 g = C + vec2(float(i), float(j));
84+
vec2 o = hash(p + g);
85+
vec2 r = g - f + o;
86+
if (dot(P - r, P - r) > 1e-5) {
87+
res = min(res, 0.5 * dot((P + r), normalize(r - P)));
88+
}
89+
}
90+
}
91+
return vec3(res, P + f);
92+
}
93+
94+
float fbm(vec2 n) {
95+
float total = 0.0, amp = 1.0;
96+
for (int i = 0; i < 7; i++) {
97+
total += noise(n) * amp;
98+
n += n;
99+
amp *= 0.5;
100+
}
101+
return total;
102+
}
103+
104+
vec4 generate_cracks(vec2 uv) {
105+
vec2 U = uv * crack_scale;
106+
vec2 I = floor(U / 2.0);
107+
bool vert = mod(I.x + I.y, 2.0) == 0.0;
108+
vec3 H0;
109+
vec4 color = background_color;
110+
for (float i = 0.0; i < crack_depth; i++) {
111+
vec2 V = U;
112+
vec2 D = vec2(crack_zebra_amp * fbm(U / crack_zebra_scale) * crack_zebra_scale);
113+
vec3 H = voronoiB(V + D);
114+
float d = H.x;
115+
d = min(1.0, crack_slope * pow(max(0.0, d - crack_width), crack_profile));
116+
color += vec4(1.0 - d) / exp2(i);
117+
U *= 1.5;
118+
}
119+
color *= crack_color;
120+
121+
return color;
8122
}
9123

124+
10125
void fragment() {
11-
// Called for every pixel the material is visible on.
12126
vec4 tex_color = texture(TEXTURE, UV);
13127

14128
if (is_hit_flash_active) {
15129
tex_color = vec4(1,1,1, tex_color.a);
16-
} else {
130+
COLOR = tex_color;
131+
} else if (hp_ratio < 1.0) {
17132
float dist = distance(UV, vec2(0.5));
18133

19134
if (tex_color.a > 0.0) {
@@ -22,12 +137,23 @@ void fragment() {
22137
} else {
23138
tex_color.a = 0.3;
24139
}
140+
COLOR = tex_color;
141+
}
142+
}
143+
else {
144+
vec4 cracks = generate_cracks(UV);
145+
vec4 orig_color = COLOR;
146+
vec4 adjacent_color = generate_cracks(UV + TEXTURE_PIXEL_SIZE * reflection_offset);
147+
//if (adjacent_color.a >= 1.0) {
148+
//COLOR = tex_color + reflection_color;
149+
//} else {
150+
//COLOR = tex_color + texture(SCREEN_TEXTURE, SCREEN_UV + COLOR.a*(SCREEN_PIXEL_SIZE * refraction_offset));
151+
//}
152+
if (cracks.a > 0.0 && tex_color.a > 0.0) {
153+
COLOR = vec4(0,0,0,1);
154+
//COLOR = texture(SCREEN_TEXTURE, SCREEN_UV + COLOR.a*(SCREEN_PIXEL_SIZE * refraction_offset));
155+
} else {
156+
COLOR = tex_color;
25157
}
26158
}
27-
COLOR = tex_color;
28159
}
29-
30-
//void light() {
31-
// // Called for every pixel for every light affecting the CanvasItem.
32-
// // Uncomment to replace the default light processing function with this one.
33-
//}

game/ship_skeleton/cell/cell.tscn

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,18 @@
99
[sub_resource type="ShaderMaterial" id="ShaderMaterial_0jsgn"]
1010
resource_local_to_scene = true
1111
shader = ExtResource("2_mnm1f")
12+
shader_parameter/crack_depth = 1.6670000791825
13+
shader_parameter/crack_scale = 3.0830000989425
14+
shader_parameter/crack_zebra_scale = 2.2070001048325
15+
shader_parameter/crack_zebra_amp = 0.0
16+
shader_parameter/crack_profile = 1.0
17+
shader_parameter/crack_slope = 50.0
18+
shader_parameter/crack_width = 0.010000000475
1219
shader_parameter/hp_ratio = 1.0
1320
shader_parameter/is_hit_flash_active = false
21+
shader_parameter/refraction_offset = Vector2(25, 25)
22+
shader_parameter/reflection_offset = Vector2(1, 1)
23+
shader_parameter/reflection_color = Color(0.00403009, 0.06998862, 0.10388207, 0.5019608)
1424

1525
[sub_resource type="CircleShape2D" id="CircleShape2D_ruldg"]
1626
radius = 25.0

game/ship_skeleton/cell/cells/basic_cell/big_basic_cell.tscn

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,15 @@
11
[gd_scene format=3 uid="uid://uwcx77t1tjb"]
22

33
[ext_resource type="PackedScene" uid="uid://cm6tq3xwihkxl" path="res://game/ship_skeleton/cell/cells/basic_cell/medium_basic_cell.tscn" id="1_654sg"]
4-
[ext_resource type="Shader" uid="uid://4ojyrld7fshk" path="res://game/ship_skeleton/cell/cell.gdshader" id="2_q1gn2"]
54
[ext_resource type="Texture2D" uid="uid://dw8eyhjagpbgk" path="res://game/ship_skeleton/cell/cells/basic_cell/big_basic_cell.svg" id="3_q1gn2"]
65

7-
[sub_resource type="ShaderMaterial" id="ShaderMaterial_w17yd"]
8-
resource_local_to_scene = true
9-
shader = ExtResource("2_q1gn2")
10-
shader_parameter/hp_ratio = 1.0
11-
shader_parameter/is_hit_flash_active = false
12-
136
[sub_resource type="CircleShape2D" id="CircleShape2D_2qipr"]
147
radius = 36.013885
158

169
[node name="BigBasicCell" unique_id=1435320636 instance=ExtResource("1_654sg")]
1710
repair_rate = 1.5
1811

1912
[node name="Sprite2D" parent="." index="0" unique_id=1975990942]
20-
material = SubResource("ShaderMaterial_w17yd")
2113
texture = ExtResource("3_q1gn2")
2214

2315
[node name="CollisionShape2D" parent="Hurtbox2D" parent_id_path=PackedInt32Array(146611675) index="0" unique_id=2074960276]

game/ship_skeleton/cell/cells/basic_cell/extra_large_basic_cell.tscn

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,15 @@
11
[gd_scene format=3 uid="uid://c5jb1txbmf3ex"]
22

33
[ext_resource type="PackedScene" uid="uid://cm6tq3xwihkxl" path="res://game/ship_skeleton/cell/cells/basic_cell/medium_basic_cell.tscn" id="1_05sdy"]
4-
[ext_resource type="Shader" uid="uid://4ojyrld7fshk" path="res://game/ship_skeleton/cell/cell.gdshader" id="2_5ioan"]
54
[ext_resource type="Texture2D" uid="uid://cqucs53afxryp" path="res://game/ship_skeleton/cell/cells/basic_cell/extra_large_basic_cell.svg" id="2_46aer"]
65

7-
[sub_resource type="ShaderMaterial" id="ShaderMaterial_lvfbc"]
8-
resource_local_to_scene = true
9-
shader = ExtResource("2_5ioan")
10-
shader_parameter/hp_ratio = 1.0
11-
shader_parameter/is_hit_flash_active = false
12-
136
[sub_resource type="CircleShape2D" id="CircleShape2D_05sdy"]
147
radius = 81.02469
158

169
[node name="ExtraLargeBasicCell" unique_id=1435320636 instance=ExtResource("1_05sdy")]
1710
repair_rate = 2.5
1811

1912
[node name="Sprite2D" parent="." index="0" unique_id=1975990942]
20-
material = SubResource("ShaderMaterial_lvfbc")
2113
texture = ExtResource("2_46aer")
2214

2315
[node name="CollisionShape2D" parent="Hurtbox2D" parent_id_path=PackedInt32Array(146611675) index="0" unique_id=2074960276]

game/ship_skeleton/cell/cells/basic_cell/large_basic_cell.tscn

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,15 @@
11
[gd_scene format=3 uid="uid://g7r6jujgrh5a"]
22

33
[ext_resource type="PackedScene" uid="uid://cm6tq3xwihkxl" path="res://game/ship_skeleton/cell/cells/basic_cell/medium_basic_cell.tscn" id="1_sr7xj"]
4-
[ext_resource type="Shader" uid="uid://4ojyrld7fshk" path="res://game/ship_skeleton/cell/cell.gdshader" id="2_4ip4w"]
54
[ext_resource type="Texture2D" uid="uid://bbriutj3tbq66" path="res://game/ship_skeleton/cell/cells/basic_cell/large_basic_cell.svg" id="2_iy7jg"]
65

7-
[sub_resource type="ShaderMaterial" id="ShaderMaterial_lbegn"]
8-
resource_local_to_scene = true
9-
shader = ExtResource("2_4ip4w")
10-
shader_parameter/hp_ratio = 1.0
11-
shader_parameter/is_hit_flash_active = false
12-
136
[sub_resource type="CircleShape2D" id="CircleShape2D_sr7xj"]
147
radius = 53.037724
158

169
[node name="LargeBasicCell" unique_id=1435320636 instance=ExtResource("1_sr7xj")]
1710
repair_rate = 2.0
1811

1912
[node name="Sprite2D" parent="." index="0" unique_id=1975990942]
20-
material = SubResource("ShaderMaterial_lbegn")
2113
texture = ExtResource("2_iy7jg")
2214

2315
[node name="CollisionShape2D" parent="Hurtbox2D" parent_id_path=PackedInt32Array(146611675) index="0" unique_id=2074960276]

game/ship_skeleton/cell/cells/basic_cell/medium_basic_cell.tscn

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,18 @@
66
[sub_resource type="ShaderMaterial" id="ShaderMaterial_4ec4m"]
77
resource_local_to_scene = true
88
shader = ExtResource("2_4ec4m")
9+
shader_parameter/crack_depth = 1.6670000791825
10+
shader_parameter/crack_scale = 3.0830000989425
11+
shader_parameter/crack_zebra_scale = 2.2070001048325
12+
shader_parameter/crack_zebra_amp = 0.0
13+
shader_parameter/crack_profile = 1.0
14+
shader_parameter/crack_slope = 50.0
15+
shader_parameter/crack_width = 0.010000000475
916
shader_parameter/hp_ratio = 1.0
1017
shader_parameter/is_hit_flash_active = false
18+
shader_parameter/refraction_offset = Vector2(25, 25)
19+
shader_parameter/reflection_offset = Vector2(1, 1)
20+
shader_parameter/reflection_color = Color(0.00403009, 0.06998862, 0.10388207, 0.5019608)
1121

1222
[sub_resource type="CircleShape2D" id="CircleShape2D_r4tuq"]
1323
radius = 24.0
@@ -22,5 +32,6 @@ shape = SubResource("CircleShape2D_r4tuq")
2232

2333
[node name="Health" parent="." index="2" unique_id=562956058]
2434
max_health = 10.0
35+
health_regeneration_rate = 0.25
2536

2637
[editable path="Hurtbox2D"]

game/ship_skeleton/cell/cells/basic_cell/small_basic_cell.tscn

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,21 +2,13 @@
22

33
[ext_resource type="PackedScene" uid="uid://cm6tq3xwihkxl" path="res://game/ship_skeleton/cell/cells/basic_cell/medium_basic_cell.tscn" id="1_7kfy5"]
44
[ext_resource type="Texture2D" uid="uid://dc6s83443qvfc" path="res://game/ship_skeleton/cell/cells/basic_cell/small_basic_cell.svg" id="2_30epr"]
5-
[ext_resource type="Shader" uid="uid://4ojyrld7fshk" path="res://game/ship_skeleton/cell/cell.gdshader" id="2_wow4d"]
6-
7-
[sub_resource type="ShaderMaterial" id="ShaderMaterial_oka58"]
8-
resource_local_to_scene = true
9-
shader = ExtResource("2_wow4d")
10-
shader_parameter/hp_ratio = 1.0
11-
shader_parameter/is_hit_flash_active = false
125

136
[sub_resource type="CircleShape2D" id="CircleShape2D_7kfy5"]
147

158
[node name="SmallBasicCell" unique_id=1435320636 instance=ExtResource("1_7kfy5")]
169
repair_rate = 0.5
1710

1811
[node name="Sprite2D" parent="." index="0" unique_id=1975990942]
19-
material = SubResource("ShaderMaterial_oka58")
2012
texture = ExtResource("2_30epr")
2113

2214
[node name="CollisionShape2D" parent="Hurtbox2D" parent_id_path=PackedInt32Array(146611675) index="0" unique_id=2074960276]

game/ship_skeleton/cell/cells/core_cell/big_core_cell.tscn

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,33 @@
55
[ext_resource type="Shader" uid="uid://4ojyrld7fshk" path="res://game/ship_skeleton/cell/cell.gdshader" id="2_xtdc8"]
66
[ext_resource type="Texture2D" uid="uid://dv730lqsmr80" path="res://game/ship_skeleton/cell/cells/core_cell/big_core_cell.svg" id="4_wko4p"]
77

8-
[sub_resource type="ShaderMaterial" id="ShaderMaterial_xtdc8"]
8+
[sub_resource type="ShaderMaterial" id="ShaderMaterial_wko4p"]
99
resource_local_to_scene = true
1010
shader = ExtResource("2_xtdc8")
11+
shader_parameter/crack_depth = 2.236
12+
shader_parameter/crack_scale = 4.0
13+
shader_parameter/crack_zebra_scale = 2.67
14+
shader_parameter/crack_zebra_amp = 1.3
15+
shader_parameter/crack_profile = 1.0
16+
shader_parameter/crack_slope = 45.8
17+
shader_parameter/crack_width = 0.001
1118
shader_parameter/hp_ratio = 1.0
1219
shader_parameter/is_hit_flash_active = false
20+
shader_parameter/refraction_offset = Vector2(25, 25)
21+
shader_parameter/reflection_offset = Vector2(1, 1)
22+
shader_parameter/reflection_color = Color(0.588, 0.588, 0.588, 0.5)
1323

1424
[node name="BigCoreCell" unique_id=1435320636 instance=ExtResource("1_2x0rv")]
1525
script = ExtResource("2_wko4p")
1626

1727
[node name="Sprite2D" parent="." index="0" unique_id=1975990942]
18-
material = SubResource("ShaderMaterial_xtdc8")
28+
material = SubResource("ShaderMaterial_wko4p")
1929
texture = ExtResource("4_wko4p")
2030

31+
[node name="CollisionShape2D" parent="Hurtbox2D" parent_id_path=PackedInt32Array(146611675) index="0" unique_id=2074960276]
32+
material = null
33+
34+
[node name="Health" parent="." index="2" unique_id=562956058]
35+
health_regeneration_rate = 1.0
36+
2137
[editable path="Hurtbox2D"]

0 commit comments

Comments
 (0)