Skip to content

Commit 35763bb

Browse files
committed
The end of the chapter 9.
1 parent 72b2b61 commit 35763bb

File tree

8 files changed

+160
-33
lines changed

8 files changed

+160
-33
lines changed

autoload/level_manager.gd

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ func compile_shaders(node, scenes):
1717
new_mesh.mesh = QuadMesh.new()
1818
new_mesh.set_surface_override_material(0, materials[key])
1919
new_mesh.position = Vector3(GameManager.boundary.left + GameManager.boundary_margin / 2, 0, GameManager.boundary.bottom - GameManager.boundary_margin / 2)
20-
node.add_child(new_mesh)
20+
node.call_deferred("add_child", new_mesh)
2121

2222

2323
func remove_quads():

export_presets.cfg

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
[preset.0]
2+
3+
name="Windows Desktop"
4+
platform="Windows Desktop"
5+
runnable=true
6+
dedicated_server=false
7+
custom_features=""
8+
export_filter="all_resources"
9+
include_filter=""
10+
exclude_filter="models/*.glb"
11+
export_path="../SpaceShooter.exe"
12+
encryption_include_filters=""
13+
encryption_exclude_filters=""
14+
encrypt_pck=false
15+
encrypt_directory=false
16+
script_encryption_key=""
17+
18+
[preset.0.options]
19+
20+
custom_template/debug=""
21+
custom_template/release=""
22+
debug/export_console_script=1
23+
binary_format/embed_pck=false
24+
texture_format/bptc=true
25+
texture_format/s3tc=true
26+
texture_format/etc=false
27+
texture_format/etc2=false
28+
binary_format/architecture="x86_64"
29+
codesign/enable=false
30+
codesign/identity_type=0
31+
codesign/identity=""
32+
codesign/password=""
33+
codesign/timestamp=true
34+
codesign/timestamp_server_url=""
35+
codesign/digest_algorithm=1
36+
codesign/description=""
37+
codesign/custom_options=PackedStringArray()
38+
application/modify_resources=true
39+
application/icon=""
40+
application/console_wrapper_icon=""
41+
application/icon_interpolation=4
42+
application/file_version=""
43+
application/product_version=""
44+
application/company_name="Filip Rachůnek"
45+
application/product_name="Space Shooter"
46+
application/file_description=""
47+
application/copyright=""
48+
application/trademarks=""
49+
ssh_remote_deploy/enabled=false
50+
ssh_remote_deploy/host="user@host_ip"
51+
ssh_remote_deploy/port="22"
52+
ssh_remote_deploy/extra_args_ssh=""
53+
ssh_remote_deploy/extra_args_scp=""
54+
ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
55+
$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
56+
$trigger = New-ScheduledTaskTrigger -Once -At 00:00
57+
$settings = New-ScheduledTaskSettingsSet
58+
$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
59+
Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
60+
Start-ScheduledTask -TaskName godot_remote_debug
61+
while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
62+
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
63+
ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
64+
Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
65+
Remove-Item -Recurse -Force '{temp_dir}'"

levels/base_level.gd

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
extends Node
2+
class_name BaseLevel
3+
4+
5+
var timeline = []
6+
var elapsed_time = 0.0
7+
var previous_second = 0
8+
var quads_removed = false
9+
10+
11+
func process(node, delta):
12+
# check the lifecycle timeline by the elapsed time (since the level start)
13+
elapsed_time += delta
14+
if not quads_removed and elapsed_time > 10:
15+
LevelManager.remove_quads()
16+
quads_removed = true
17+
if elapsed_time - previous_second > 1.0:
18+
previous_second += 1
19+
for event in timeline:
20+
if event.timestamp <= elapsed_time and !event.has("processed"):
21+
process_wave(node, event.wave)
22+
event.processed = true
23+
24+
25+
func process_wave(node, wave):
26+
for item in wave:
27+
var enemy = item.enemy.instantiate()
28+
enemy.init(node, item.spawn, item.timeline)
29+
node.add_child(enemy)

levels/tutorial.gd

+1-27
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
extends Node
1+
extends BaseLevel
22

33

44
var asteroid_scene = preload("res://scenes/asteroid.tscn")
@@ -14,11 +14,6 @@ var explosion_scene = preload("res://scenes/explosion.tscn")
1414
var hit_effect_scene = preload("res://scenes/hit_effect.tscn")
1515
var bullet_scene = preload("res://scenes/bullet.tscn")
1616

17-
var timeline = []
18-
var elapsed_time = 0.0
19-
var previous_second = 0
20-
var quads_removed = false
21-
2217

2318
func init(node, more_scenes = []):
2419
# use all materials to force the shader compiling
@@ -32,27 +27,6 @@ func init(node, more_scenes = []):
3227
timeline.append({ "timestamp": 6, "wave": get_boss_wave() })
3328

3429

35-
func process(node, delta):
36-
# check the lifecycle timeline by the elapsed time (since the level start)
37-
elapsed_time += delta
38-
if not quads_removed and elapsed_time > 10:
39-
LevelManager.remove_quads()
40-
quads_removed = true
41-
if elapsed_time - previous_second > 1.0:
42-
previous_second += 1
43-
for event in timeline:
44-
if event.timestamp <= elapsed_time && !event.has("processed"):
45-
process_wave(node, event.wave)
46-
event.processed = true
47-
48-
49-
func process_wave(node, wave):
50-
for item in wave:
51-
var enemy = item.enemy.instantiate()
52-
enemy.init(node, item.spawn, item.timeline)
53-
node.add_child(enemy)
54-
55-
5630
func get_asteroid_wave():
5731
var wave = []
5832
# random asteroid spawn parameters

project.godot

+3-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ config_version=5
1212

1313
config/name="Space Shooter"
1414
run/main_scene="res://scenes/intro.tscn"
15-
config/features=PackedStringArray("4.0", "Forward Plus")
15+
config/features=PackedStringArray("4.1", "Forward Plus")
1616
boot_splash/image="res://splash.png"
1717
boot_splash/fullsize=false
1818
config/icon="res://icon.svg"
@@ -63,7 +63,7 @@ move_right={
6363
}
6464
shoot_primary={
6565
"deadzone": 0.5,
66-
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(145, 13),"global_position":Vector2(149, 56),"factor":1.0,"button_index":1,"pressed":true,"double_click":false,"script":null)
66+
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(145, 13),"global_position":Vector2(149, 56),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null)
6767
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"echo":false,"script":null)
6868
]
6969
}
@@ -74,7 +74,7 @@ accelerate={
7474
}
7575
shoot_secondary={
7676
"deadzone": 0.5,
77-
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(152, 12),"global_position":Vector2(156, 55),"factor":1.0,"button_index":2,"pressed":true,"double_click":false,"script":null)
77+
"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":2,"position":Vector2(152, 12),"global_position":Vector2(156, 55),"factor":1.0,"button_index":2,"canceled":false,"pressed":true,"double_click":false,"script":null)
7878
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":81,"key_label":0,"unicode":113,"echo":false,"script":null)
7979
]
8080
}

scenes/HUD.tscn

+1-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ text = "main.label.missiles"
5252
[node name="MissileCounter" type="Label" parent="Player/GridContainer"]
5353
layout_mode = 2
5454
size_flags_horizontal = 4
55-
theme_override_fonts/font = ExtResource("1_i1rrg")
55+
theme_override_fonts/font = ExtResource("2_ewkcu")
5656
theme_override_font_sizes/font_size = 20
5757
text = "0"
5858

scenes/player.tscn

+23-1
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
[gd_scene load_steps=25 format=3 uid="uid://77c4ijjom8fn"]
1+
[gd_scene load_steps=30 format=3 uid="uid://77c4ijjom8fn"]
22

33
[ext_resource type="Script" path="res://scenes/player.gd" id="1_3xfdo"]
44
[ext_resource type="Texture2D" uid="uid://2rtvrcyp3lr0" path="res://models/player_palette.png" id="1_s21bw"]
55
[ext_resource type="Script" path="res://scenes/weapon.gd" id="3_xoa0m"]
6+
[ext_resource type="Shader" path="res://shaders/shield.gdshader" id="4_h2vv5"]
67

78
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_aar71"]
89
resource_name = "Material"
@@ -187,6 +188,22 @@ height = 10.0
187188
[sub_resource type="SphereShape3D" id="SphereShape3D_lpkn2"]
188189
radius = 5.0
189190

191+
[sub_resource type="FastNoiseLite" id="FastNoiseLite_3qcxn"]
192+
193+
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_ue1g0"]
194+
noise = SubResource("FastNoiseLite_3qcxn")
195+
196+
[sub_resource type="ShaderMaterial" id="ShaderMaterial_qsq86"]
197+
render_priority = 0
198+
shader = ExtResource("4_h2vv5")
199+
shader_parameter/color_rim = Color(0.57, 0.9, 1, 0.96)
200+
shader_parameter/color_noise = Color(0.21, 0.84, 1, 1)
201+
shader_parameter/noise_texture = SubResource("NoiseTexture2D_ue1g0")
202+
203+
[sub_resource type="QuadMesh" id="QuadMesh_rsl84"]
204+
material = SubResource("ShaderMaterial_qsq86")
205+
size = Vector2(10, 10)
206+
190207
[sub_resource type="Gradient" id="Gradient_7nvhe"]
191208
offsets = PackedFloat32Array(0.15942, 0.42029, 0.608696, 0.73913)
192209
colors = PackedColorArray(1, 0, 0, 1, 0, 0, 0, 1, 0.95117, 0.571121, 0.0601382, 1, 1, 1, 1, 1)
@@ -295,6 +312,11 @@ mesh = SubResource("SphereMesh_yyrir")
295312
[node name="CollisionShape3D" type="CollisionShape3D" parent="Shield"]
296313
shape = SubResource("SphereShape3D_lpkn2")
297314

315+
[node name="ShieldQuadMesh" type="MeshInstance3D" parent="Shield"]
316+
visible = false
317+
instance_shader_parameters/alpha = 1.0
318+
mesh = SubResource("QuadMesh_rsl84")
319+
298320
[node name="Flames" type="Node3D" parent="."]
299321

300322
[node name="LeftFlame" type="GPUParticles3D" parent="Flames"]

shaders/shield.gdshader

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
shader_type spatial;
2+
3+
render_mode unshaded, blend_add;
4+
5+
uniform sampler2D noise_texture : source_color;
6+
uniform vec4 color_rim : source_color = vec4(0.57, 0.9, 1.0, 0.96);
7+
uniform vec4 color_noise : source_color = vec4(0.21, 0.84, 1.0, 1.0);
8+
instance uniform float alpha : hint_range(0.0, 1.0, 0.01) = 1.0;
9+
10+
void vertex() {
11+
//Billboarding
12+
MODELVIEW_MATRIX = VIEW_MATRIX * mat4(INV_VIEW_MATRIX[0], INV_VIEW_MATRIX[1], INV_VIEW_MATRIX[2], MODEL_MATRIX[3]);
13+
MODELVIEW_MATRIX = MODELVIEW_MATRIX * mat4(vec4(length(MODEL_MATRIX[0].xyz), 0.0, 0.0, 0.0), vec4(0.0, length(MODEL_MATRIX[1].xyz), 0.0, 0.0), vec4(0.0, 0.0, length(MODEL_MATRIX[2].xyz), 0.0), vec4(0.0, 0.0, 0.0, 1.0));
14+
}
15+
16+
void fragment() {
17+
18+
float dist = length(vec2(UV - 0.5) * 2.0);
19+
if (dist > 1.0) {
20+
dist = 0.0;
21+
}
22+
dist = pow(dist, 6.0);
23+
24+
ALBEDO = color_rim.rgb * dist * color_rim.a;
25+
26+
vec3 noise_color_1 = texture(noise_texture, vec2(UV.x + TIME / 2.0, UV.y)).rgb;
27+
vec3 noise_color_2 = texture(noise_texture, vec2(UV.x - TIME / 1.8, UV.y)).rgb;
28+
vec3 noise_color_3 = texture(noise_texture, vec2(UV.x, UV.y + TIME / 2.1)).rgb;
29+
vec3 noise_color_4 = texture(noise_texture, vec2(UV.x, UV.y - TIME / 2.2)).rgb;
30+
31+
vec3 noise_color_x = mix(noise_color_1, noise_color_2, 0.5);
32+
vec3 noise_color_y = mix(noise_color_3, noise_color_4, 0.5);
33+
vec3 noise_color = mix(noise_color_x, noise_color_y, 0.5) * dist * color_noise.rgb * color_noise.a;
34+
35+
ALBEDO = mix(ALBEDO, noise_color, 0.75) * alpha;
36+
ALPHA = dist * color_noise.a * alpha;
37+
}

0 commit comments

Comments
 (0)