diff --git a/elements/player.tscn b/elements/player.tscn index eee888e..6df684a 100644 --- a/elements/player.tscn +++ b/elements/player.tscn @@ -1,10 +1,10 @@ -[gd_scene load_steps=4 format=3 uid="uid://cnnvwotv33u1b"] - -[ext_resource type="PackedScene" uid="uid://dw0xl8644x166" path="res://elements/gravity.tscn" id="1_h0h2o"] -[ext_resource type="PackedScene" uid="uid://df5m716pd6mej" path="res://elements/sphere.tscn" id="2_ophnk"] +[gd_scene load_steps=11 format=3 uid="uid://cnnvwotv33u1b"] [sub_resource type="GDScript" id="GDScript_bnqcw"] -script/source = "extends Node3D +script/source = "class_name Player +extends Node3D + +var velocity: Vector3 = Vector3(0, 0, 0) func _physics_process(_delta: float) -> void: $SpotLightMain.position = $Sphere.position + Vector3(0, 5, 0) @@ -17,7 +17,7 @@ func _physics_process(_delta: float) -> void: $Camera.position = $Sphere.position + Vector3(0, 0, 15) ## Angle of the camera, so the player can see where the ball is going - var velocity: Vector3 = $Sphere.linear_velocity + velocity = $Sphere.linear_velocity var desired_x = max(min(velocity.y, 35), -35) var desired_y = max(min(-velocity.x, 50), -50) var difference_x = $Camera.rotation_degrees.x - desired_x @@ -31,13 +31,43 @@ func _physics_process(_delta: float) -> void: $Camera.fov = default_fov + (total_velocity / 12) " +[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_vumbr"] +bounce = 0.2 + +[sub_resource type="SphereShape3D" id="SphereShape3D_xfgrm"] + +[sub_resource type="Gradient" id="Gradient_bgp4x"] +colors = PackedColorArray(0.942957, 7.89344e-06, 0.597148, 1, 0, 0.9912, 0.9912, 1) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_5d6uk"] +gradient = SubResource("Gradient_bgp4x") +fill_from = Vector2(0.504951, 0.00495049) +fill_to = Vector2(0.549505, 1) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qcgmu"] +albedo_texture = SubResource("GradientTexture2D_5d6uk") + +[sub_resource type="SphereMesh" id="SphereMesh_bor8g"] +material = SubResource("StandardMaterial3D_qcgmu") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_4tofj"] +direction = Vector3(0, 0, 0) +gravity = Vector3(0, 0, 0) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2ybet"] +vertex_color_use_as_albedo = true +albedo_color = Color(0, 0.734117, 0.734117, 1) + +[sub_resource type="SphereMesh" id="SphereMesh_1m3ut"] +material = SubResource("StandardMaterial3D_2ybet") +radius = 0.2 +height = 0.4 +radial_segments = 8 +rings = 4 + [node name="Player" type="Node3D"] script = SubResource("GDScript_bnqcw") -[node name="Gravity" parent="." instance=ExtResource("1_h0h2o")] - -[node name="Sphere" parent="." instance=ExtResource("2_ophnk")] - [node name="Camera" type="Camera3D" parent="."] current = true @@ -61,3 +91,20 @@ spot_range = 50.0 [node name="SpotLightBottom" type="SpotLight3D" parent="."] transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0) spot_range = 50.0 + +[node name="Sphere" type="RigidBody3D" parent="."] +collision_priority = 100.0 +axis_lock_linear_z = true +physics_material_override = SubResource("PhysicsMaterial_vumbr") +contact_monitor = true + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Sphere"] +shape = SubResource("SphereShape3D_xfgrm") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Sphere"] +mesh = SubResource("SphereMesh_bor8g") + +[node name="GPUParticles3D" type="GPUParticles3D" parent="Sphere"] +amount = 16 +process_material = SubResource("ParticleProcessMaterial_4tofj") +draw_pass_1 = SubResource("SphereMesh_1m3ut") diff --git a/elements/ring.tscn b/elements/ring.tscn index e10d852..32e5295 100644 --- a/elements/ring.tscn +++ b/elements/ring.tscn @@ -5,7 +5,8 @@ [ext_resource type="AudioStream" uid="uid://cvvs74ep5d4wt" path="res://sounds/ring2.ogg" id="3_lkqw0"] [sub_resource type="GDScript" id="GDScript_86vhg"] -script/source = "extends CSGTorus3D +script/source = "class_name Ring +extends CSGTorus3D var happy_material = preload(\"res://graphics/happy_material.tres\") diff --git a/elements/sphere.tscn b/elements/sphere.tscn deleted file mode 100644 index 77e697e..0000000 --- a/elements/sphere.tscn +++ /dev/null @@ -1,52 +0,0 @@ -[gd_scene load_steps=10 format=3 uid="uid://df5m716pd6mej"] - -[sub_resource type="PhysicsMaterial" id="PhysicsMaterial_vumbr"] -bounce = 0.2 - -[sub_resource type="SphereShape3D" id="SphereShape3D_xfgrm"] - -[sub_resource type="Gradient" id="Gradient_bgp4x"] -colors = PackedColorArray(0.942957, 7.89344e-06, 0.597148, 1, 0, 0.9912, 0.9912, 1) - -[sub_resource type="GradientTexture2D" id="GradientTexture2D_5d6uk"] -gradient = SubResource("Gradient_bgp4x") -fill_from = Vector2(0.504951, 0.00495049) -fill_to = Vector2(0.549505, 1) - -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qcgmu"] -albedo_texture = SubResource("GradientTexture2D_5d6uk") - -[sub_resource type="SphereMesh" id="SphereMesh_bor8g"] -material = SubResource("StandardMaterial3D_qcgmu") - -[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_4tofj"] -direction = Vector3(0, 0, 0) -gravity = Vector3(0, 0, 0) - -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_2ybet"] -vertex_color_use_as_albedo = true -albedo_color = Color(0, 0.734117, 0.734117, 1) - -[sub_resource type="SphereMesh" id="SphereMesh_1m3ut"] -material = SubResource("StandardMaterial3D_2ybet") -radius = 0.2 -height = 0.4 -radial_segments = 8 -rings = 4 - -[node name="Sphere" type="RigidBody3D"] -collision_priority = 100.0 -axis_lock_linear_z = true -physics_material_override = SubResource("PhysicsMaterial_vumbr") -contact_monitor = true - -[node name="CollisionShape3D" type="CollisionShape3D" parent="."] -shape = SubResource("SphereShape3D_xfgrm") - -[node name="MeshInstance3D" type="MeshInstance3D" parent="."] -mesh = SubResource("SphereMesh_bor8g") - -[node name="GPUParticles3D" type="GPUParticles3D" parent="."] -amount = 16 -process_material = SubResource("ParticleProcessMaterial_4tofj") -draw_pass_1 = SubResource("SphereMesh_1m3ut") diff --git a/index.tscn b/index.tscn index 35fb4b5..0e835f4 100644 --- a/index.tscn +++ b/index.tscn @@ -1,15 +1,20 @@ [gd_scene load_steps=11 format=3 uid="uid://ccgnnif026wb4"] -[ext_resource type="PackedScene" uid="uid://n40mg5tc3bnv" path="res://levels/demo_level.tscn" id="1_08svf"] +[ext_resource type="PackedScene" uid="uid://dtfybhftwfn00" path="res://levels/demo.tscn" id="1_356j3"] [sub_resource type="GDScript" id="GDScript_8n212"] script/source = "extends Node -var seconds_spent: float = 0.0 +var playing: bool = false +var seconds_spent: float = 0.00 var changing_level: bool = false -var base = preload(\"res://levels/base/level.tscn\") -var forest = preload(\"res://levels/forest/level.tscn\") -var night = preload(\"res://levels/night/level.tscn\") + +var current_level_int: int = 0 +var levels = [ + preload(\"res://levels/base/level.tscn\"), + preload(\"res://levels/forest/level.tscn\"), + preload(\"res://levels/night/level.tscn\"), +] func _ready() -> void: var os_name = OS.get_name() @@ -24,77 +29,76 @@ func _ready() -> void: $StartMenu/VBoxContainer/MarginContainer2/Notice.text = \"dev \" $StartMenu/VBoxContainer/MarginContainer2/Notice.text += \"build \" + ProjectSettings.get_setting(\"application/config/version\") + \" (\" + os_name + \")\" +## Get all the levels that are currently being played! +## In theory, there should ever be only zero or one, +## but it turns out it's more simple to handle things by using Arrays. +func get_current_levels() -> Array[Level]: + var children = $Levels.get_children(true) + var current_levels: Array[Level] = [] + for child in children: + if is_instance_of(child, Level): + current_levels.push_back(child) + + return current_levels + func start_level(level_scene: PackedScene) -> void: $VictoryScreen.hide() - if level_scene and level_scene.can_instantiate(): - var level = level_scene.instantiate() - $Levels.add_child(level) - $Timer.paused = false - AudioServer.set_bus_volume_db(0, 0) - PhysicsServer3D.area_set_param( - get_viewport().find_world_3d().space, - PhysicsServer3D.AREA_PARAM_GRAVITY_VECTOR, - Vector3.DOWN - ) - changing_level = false - else: - $VictoryScreen.show() - await get_tree().create_timer(2).timeout - $StartMenu/AnimationPlayer.play_backwards(\"fadeout\") - Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) - await get_tree().create_timer(1).timeout - $StartMenu.modulate = Color(1,1,1,1) + var level = level_scene.instantiate() + $Levels.add_child(level) + playing = true + PhysicsServer3D.area_set_param( + get_viewport().find_world_3d().space, + PhysicsServer3D.AREA_PARAM_GRAVITY_VECTOR, + Vector3.DOWN + ) + changing_level = false func stop_level() -> void: PhysicsServer3D.area_set_param(get_viewport().find_world_3d().space, PhysicsServer3D.AREA_PARAM_GRAVITY, 1) - $Timer.paused = true + playing = false changing_level = true - var next_level: PackedScene - var current_levels = $Levels.get_children(true) - if len(current_levels): - var current_level: Level = current_levels[0] - current_level.music.fadeOut(2) + var current_levels = get_current_levels() + for level in current_levels: + level.music.fadeOut(2) await get_tree().create_timer(2).timeout - - if current_level.get_meta(\"name\") == \"Base\": - next_level = forest - elif current_level.get_meta(\"name\") == \"Forest\": - next_level = night - - for level in current_levels: - level.queue_free() + level.queue_free() - start_level(next_level) + if len(levels) > current_level_int + 1: + current_level_int += 1 + start_level(levels[current_level_int]) + else: + win_game() + +func win_game() -> void: + $VictoryScreen.show() + await get_tree().create_timer(2).timeout + $StartMenu/AnimationPlayer.play_backwards(\"fadeout\") + Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) + await get_tree().create_timer(1).timeout + $StartMenu.modulate = Color(1,1,1,1) func restart_level() -> void: if changing_level == false: - var current_levels = $Levels.get_children(true) + var current_levels = get_current_levels() if len(current_levels): pause_game() changing_level = true - var current_level = current_levels[0] - - var next_level: PackedScene = base - if current_level.get_meta(\"name\") == \"Forest\": - next_level = forest - elif current_level.get_meta(\"name\") == \"Night\": - next_level = night for level in current_levels: level.queue_free() - start_level(next_level) + start_level(levels[current_level_int]) func pause_game() -> void: if $Levels.process_mode == PROCESS_MODE_INHERIT: $Levels.process_mode = Node.PROCESS_MODE_DISABLED - $Timer.paused = true + playing = false $PauseMenu.show() Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) else: $Levels.process_mode = Node.PROCESS_MODE_INHERIT - $Timer.paused = false + playing = true $PauseMenu.hide() Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN) @@ -105,21 +109,18 @@ func fullscreen_game() -> void: else: DisplayServer.window_set_mode(DisplayServer.WindowMode.WINDOW_MODE_WINDOWED) -func _on_btn_fullscreen_pressed() -> void: - fullscreen_game() - func _on_btn_start_pressed() -> void: seconds_spent = 0.0 - var current_levels = $Levels.get_children(true) + current_level_int = 0 + + var current_levels = get_current_levels() for level in current_levels: level.queue_free() $Informations.show() $StartMenu/AnimationPlayer.play(\"fadeout\") Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN) - start_level(base) - - $Timer.start(0) + start_level(levels[0]) func _on_animation_player_animation_finished(_anim_name: StringName) -> void: if $StartMenu.modulate == Color(1,1,1,1): @@ -127,20 +128,19 @@ func _on_animation_player_animation_finished(_anim_name: StringName) -> void: else: $StartMenu.hide() -func _on_timer_timeout() -> void: - seconds_spent = snapped(seconds_spent + 0.10, 0.01) - var minutes = floor(seconds_spent / 60) - $Informations/MarginContainer/Timer.text = (\"%0*d\" % [2, minutes]) + \":\" + (\"%0*.1f\" % [4, seconds_spent - (minutes * 60)]) +func update_timer(delta: float) -> void: + if playing: + seconds_spent += delta + var minutes = floor(seconds_spent / 60) + $Informations/MarginContainer/Timer.text = (\"%0*d\" % [2, minutes]) + \":\" + (\"%0*.2f\" % [5, seconds_spent - (minutes * 60)]) -func _process(_delta: float) -> void: - var current_levels = $Levels.get_children(true) +func _process(delta: float) -> void: + update_timer(delta) + var current_levels = get_current_levels() if len(current_levels): var current_level = current_levels[0] - if is_instance_valid(current_level): - if \"velocity\" in current_level: - $Informations/MarginContainer/VBoxContainer/Speed.text = str(int(floor(current_level.velocity))) + \" km/h\" - if \"rings_count\" in current_level and \"finished_rings_count\" in current_level: - $Informations/MarginContainer/VBoxContainer/Rings.text = str(current_level.finished_rings_count) + \"/\" + str(current_level.rings_count) + $Informations/MarginContainer/VBoxContainer/Speed.text = str(int(floor(current_level.velocity))) + \" km/h\" + $Informations/MarginContainer/VBoxContainer/Rings.text = str(current_level.finished_rings_count) + \"/\" + str(len(current_level.rings)) func _unhandled_key_input(event: InputEvent) -> void: if event.is_pressed() and event is InputEventKey: @@ -151,15 +151,6 @@ func _unhandled_key_input(event: InputEvent) -> void: pause_game() restart_level() -func _on_btn_resume_pressed() -> void: - pause_game() - -func _on_btn_fullscreen_2_pressed() -> void: - fullscreen_game() - -func _on_btn_restart_pressed() -> void: - restart_level() - func _on_btn_quit_pressed() -> void: get_tree().quit() " @@ -301,10 +292,7 @@ vertical_alignment = 1 [node name="Levels" type="Node" parent="."] -[node name="Demo" parent="Levels" instance=ExtResource("1_08svf")] - -[node name="Timer" type="Timer" parent="."] -wait_time = 0.1 +[node name="Demo" parent="Levels" instance=ExtResource("1_356j3")] [node name="StartMenu" type="Control" parent="."] layout_mode = 3 @@ -483,11 +471,10 @@ layout_mode = 2 size_flags_vertical = 6 text = "QUIT game" -[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"] -[connection signal="pressed" from="StartMenu/VBoxContainer/MarginContainer/HBoxContainer/Buttons/HBoxContainer/Btn_Fullscreen" to="." method="_on_btn_fullscreen_pressed"] +[connection signal="pressed" from="StartMenu/VBoxContainer/MarginContainer/HBoxContainer/Buttons/HBoxContainer/Btn_Fullscreen" to="." method="fullscreen_game"] [connection signal="pressed" from="StartMenu/VBoxContainer/MarginContainer/HBoxContainer/Buttons/HBoxContainer/Btn_Start" to="." method="_on_btn_start_pressed"] [connection signal="animation_finished" from="StartMenu/AnimationPlayer" to="." method="_on_animation_player_animation_finished"] -[connection signal="pressed" from="PauseMenu/VBoxContainer/Btn_Resume" to="." method="_on_btn_resume_pressed"] -[connection signal="pressed" from="PauseMenu/VBoxContainer/Btn_Fullscreen2" to="." method="_on_btn_fullscreen_2_pressed"] -[connection signal="pressed" from="PauseMenu/VBoxContainer/Btn_Restart" to="." method="_on_btn_restart_pressed"] +[connection signal="pressed" from="PauseMenu/VBoxContainer/Btn_Resume" to="." method="pause_game"] +[connection signal="pressed" from="PauseMenu/VBoxContainer/Btn_Fullscreen2" to="." method="fullscreen_game"] +[connection signal="pressed" from="PauseMenu/VBoxContainer/Btn_Restart" to="." method="restart_level"] [connection signal="pressed" from="PauseMenu/VBoxContainer/Btn_Quit" to="." method="_on_btn_quit_pressed"] diff --git a/levels/base/level.tscn b/levels/base/level.tscn index faa000e..93021d3 100644 --- a/levels/base/level.tscn +++ b/levels/base/level.tscn @@ -1,17 +1,18 @@ -[gd_scene load_steps=8 format=3 uid="uid://b0mhosbyt1fit"] +[gd_scene load_steps=8 format=3 uid="uid://ovtknjyj83gh"] -[ext_resource type="Material" uid="uid://brwwlwb1rpro7" path="res://graphics/unhappy_material.tres" id="1_dwsqy"] [ext_resource type="PackedScene" uid="uid://ygvokp5f78i5" path="res://levels/base/environment.tscn" id="1_n7fd8"] [ext_resource type="Script" uid="uid://w3fetao1pegm" path="res://levels/level.gd" id="1_rj40i"] [ext_resource type="PackedScene" uid="uid://cnnvwotv33u1b" path="res://elements/player.tscn" id="2_b00jj"] [ext_resource type="PackedScene" uid="uid://cpm3laywhlbq5" path="res://elements/ring.tscn" id="3_hel5x"] +[ext_resource type="PackedScene" uid="uid://dw0xl8644x166" path="res://elements/gravity.tscn" id="3_muudg"] [ext_resource type="PackedScene" uid="uid://c77bli40240nk" path="res://elements/sign.tscn" id="4_atq6y"] [ext_resource type="PackedScene" uid="uid://dnuakh7n3fuij" path="res://levels/base/music.tscn" id="4_uq42r"] [node name="Base" type="Node3D"] script = ExtResource("1_rj40i") -metadata/material = ExtResource("1_dwsqy") -metadata/name = "Base" +metadata/_custom_type_script = "uid://w3fetao1pegm" + +[node name="Gravity" parent="." instance=ExtResource("3_muudg")] [node name="Environment" parent="." instance=ExtResource("1_n7fd8")] diff --git a/levels/demo.tscn b/levels/demo.tscn new file mode 100644 index 0000000..51fed8b --- /dev/null +++ b/levels/demo.tscn @@ -0,0 +1,32 @@ +[gd_scene load_steps=7 format=3 uid="uid://dtfybhftwfn00"] + +[ext_resource type="Script" uid="uid://w3fetao1pegm" path="res://levels/level.gd" id="1_scm0b"] +[ext_resource type="PackedScene" uid="uid://dw0xl8644x166" path="res://elements/gravity.tscn" id="2_fo4i1"] +[ext_resource type="PackedScene" uid="uid://b6gnffoboc5j5" path="res://levels/night/environment.tscn" id="3_j4ado"] +[ext_resource type="PackedScene" uid="uid://drfy3vhe6skp1" path="res://levels/night/music.tscn" id="4_qr8kk"] +[ext_resource type="PackedScene" uid="uid://cnnvwotv33u1b" path="res://elements/player.tscn" id="5_j5vh3"] +[ext_resource type="PackedScene" uid="uid://cpm3laywhlbq5" path="res://elements/ring.tscn" id="6_st6rs"] + +[node name="Demo" type="Node3D"] +script = ExtResource("1_scm0b") +metadata/_custom_type_script = "uid://w3fetao1pegm" + +[node name="Gravity" parent="." instance=ExtResource("2_fo4i1")] + +[node name="Environment" parent="." instance=ExtResource("3_j4ado")] + +[node name="Music" parent="." instance=ExtResource("4_qr8kk")] + +[node name="Player" parent="." instance=ExtResource("5_j5vh3")] + +[node name="Rings" type="Node3D" parent="."] + +[node name="Ring" parent="Rings" instance=ExtResource("6_st6rs")] +transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 15.6731, -50) +visible = false + +[node name="Ring2" parent="Rings" instance=ExtResource("6_st6rs")] +transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 10, -10, 0) + +[node name="Ring3" parent="Rings" instance=ExtResource("6_st6rs")] +transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, -10, -10, 0) diff --git a/levels/demo_level.tscn b/levels/demo_level.tscn deleted file mode 100644 index 493312b..0000000 --- a/levels/demo_level.tscn +++ /dev/null @@ -1,29 +0,0 @@ -[gd_scene load_steps=6 format=3 uid="uid://n40mg5tc3bnv"] - -[ext_resource type="Script" uid="uid://w3fetao1pegm" path="res://levels/level.gd" id="1_ifscd"] -[ext_resource type="PackedScene" uid="uid://b6gnffoboc5j5" path="res://levels/night/environment.tscn" id="2_v6rg2"] -[ext_resource type="PackedScene" uid="uid://drfy3vhe6skp1" path="res://levels/night/music.tscn" id="3_fb0ct"] -[ext_resource type="PackedScene" uid="uid://cnnvwotv33u1b" path="res://elements/player.tscn" id="4_ge8id"] -[ext_resource type="PackedScene" uid="uid://cpm3laywhlbq5" path="res://elements/ring.tscn" id="5_j060p"] - -[node name="Demo" type="Node3D"] -script = ExtResource("1_ifscd") -metadata/name = "Demo" - -[node name="Environment" parent="." instance=ExtResource("2_v6rg2")] - -[node name="Music" parent="." instance=ExtResource("3_fb0ct")] - -[node name="Player" parent="." instance=ExtResource("4_ge8id")] - -[node name="Rings" type="Node3D" parent="."] - -[node name="Ring" parent="Rings" instance=ExtResource("5_j060p")] -transform = Transform3D(1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 15.6731, -50) -visible = false - -[node name="Ring2" parent="Rings" instance=ExtResource("5_j060p")] -transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 10, -10, 0) - -[node name="Ring3" parent="Rings" instance=ExtResource("5_j060p")] -transform = Transform3D(-4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, -10, -10, 0) diff --git a/levels/forest/level.tscn b/levels/forest/level.tscn index bb5308e..7150392 100644 --- a/levels/forest/level.tscn +++ b/levels/forest/level.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=11 format=3 uid="uid://dfvuxfxc6ooya"] +[gd_scene load_steps=12 format=3 uid="uid://e1761h6d522a"] [ext_resource type="PackedScene" uid="uid://6nfv4ewj3jop" path="res://levels/forest/environment.tscn" id="1_7clrg"] [ext_resource type="Script" uid="uid://w3fetao1pegm" path="res://levels/level.gd" id="1_fdxcj"] +[ext_resource type="PackedScene" uid="uid://dw0xl8644x166" path="res://elements/gravity.tscn" id="2_gxmta"] [ext_resource type="PackedScene" uid="uid://cnnvwotv33u1b" path="res://elements/player.tscn" id="2_mjogx"] [ext_resource type="PackedScene" uid="uid://cakmsiye3hjfe" path="res://levels/forest/music.tscn" id="3_n1xsx"] [ext_resource type="PackedScene" uid="uid://cpm3laywhlbq5" path="res://elements/ring.tscn" id="4_p8yhq"] @@ -30,7 +31,9 @@ reflected_light_source = 2 [node name="Forest" type="Node3D"] script = ExtResource("1_fdxcj") -metadata/name = "Forest" +metadata/_custom_type_script = "uid://w3fetao1pegm" + +[node name="Gravity" parent="." instance=ExtResource("2_gxmta")] [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] transform = Transform3D(-0.920505, 0.195366, -0.338383, 0, 0.866025, 0.5, 0.390731, 0.460252, -0.797181, 0, 0, 0) diff --git a/levels/level.gd b/levels/level.gd index 7950043..490218c 100644 --- a/levels/level.gd +++ b/levels/level.gd @@ -3,10 +3,8 @@ extends Node3D var music: Music var velocity: float = 0.0 - -var rings_count = 72727 -var finished_rings_count = 0 var rings: Array[Node] = [] +var finished_rings_count = 0 func _ready() -> void: var children = get_children() @@ -18,13 +16,12 @@ func _ready() -> void: var rings_node = get_node("Rings") assert(is_instance_valid(rings_node), self.name + " has no rings!") rings = rings_node.get_children() - rings_count = len(rings) for ring in rings: ring.connect("collect_signal", do_we_end_yet) func do_we_end_yet(): finished_rings_count += 1 - if finished_rings_count >= rings_count: + if finished_rings_count >= len(rings): var game = get_parent().get_parent() if is_instance_valid(game) and game.has_method("stop_level"): game.stop_level() diff --git a/levels/night/level.tscn b/levels/night/level.tscn index 595b988..4c7e8eb 100644 --- a/levels/night/level.tscn +++ b/levels/night/level.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=9 format=3 uid="uid://c2rlx31om4gey"] +[gd_scene load_steps=10 format=3 uid="uid://drnqmu4lka22d"] [ext_resource type="Script" uid="uid://w3fetao1pegm" path="res://levels/level.gd" id="1_3m1pa"] [ext_resource type="PackedScene" uid="uid://drfy3vhe6skp1" path="res://levels/night/music.tscn" id="1_npc74"] [ext_resource type="PackedScene" uid="uid://cnnvwotv33u1b" path="res://elements/player.tscn" id="2_bc1ig"] +[ext_resource type="PackedScene" uid="uid://dw0xl8644x166" path="res://elements/gravity.tscn" id="2_lfplq"] [ext_resource type="PackedScene" uid="uid://b6gnffoboc5j5" path="res://levels/night/environment.tscn" id="2_wintp"] [ext_resource type="PackedScene" uid="uid://cpm3laywhlbq5" path="res://elements/ring.tscn" id="4_brcr0"] [ext_resource type="PackedScene" uid="uid://c77bli40240nk" path="res://elements/sign.tscn" id="6_36yav"] @@ -11,7 +12,9 @@ [node name="Night" type="Node3D"] script = ExtResource("1_3m1pa") -metadata/name = "Night" +metadata/_custom_type_script = "uid://w3fetao1pegm" + +[node name="Gravity" parent="." instance=ExtResource("2_lfplq")] [node name="Environment" parent="." instance=ExtResource("2_wintp")]