diff --git a/elements/gravity.tscn b/elements/gravity.tscn index d84e534..0a5a992 100644 --- a/elements/gravity.tscn +++ b/elements/gravity.tscn @@ -137,6 +137,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 script = SubResource("GDScript_3yq1l") [node name="Direction" type="TextureRect" parent="."] @@ -155,6 +156,7 @@ grow_horizontal = 2 grow_vertical = 2 scale = Vector2(0.3, 0.3) pivot_offset = Vector2(400, 400) +mouse_filter = 2 texture = ExtResource("1_4mbho") script = SubResource("GDScript_my602") diff --git a/index.tscn b/index.tscn index 75882ae..389b119 100644 --- a/index.tscn +++ b/index.tscn @@ -13,6 +13,7 @@ var changing_level: bool = false var main_menu: Node var current_level: Level +var current_level_scene: PackedScene const res_main_menu = preload(\"res://menus/main/main_menu.tscn\") @@ -41,17 +42,19 @@ func _ready() -> void: func set_main_menu(): Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) - main_menu = res_main_menu.instantiate() - main_menu.connect(\"request_play_level\", start_level) + if !is_instance_valid(main_menu): + main_menu = res_main_menu.instantiate() + main_menu.connect(\"request_play_level\", start_level) add_child(main_menu) -func start_level(level: Level) -> void: +func start_level(level: Level, scene: PackedScene) -> void: if is_instance_valid(current_level): current_level.queue_free() - if is_instance_valid(main_menu): - main_menu.queue_free() + if is_instance_valid(main_menu) and self.is_ancestor_of(main_menu): + self.remove_child(main_menu) current_level = level + current_level_scene = scene add_child(current_level) current_level.connect(\"completed\", finish_current_level) @@ -62,6 +65,7 @@ func start_level(level: Level) -> void: $GUI.show() Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN) + pause_game(false) playing = true PhysicsServer3D.area_set_param( @@ -98,20 +102,25 @@ func win_game() -> void: $VictoryScreen.hide() func restart_level() -> void: - return #idk yet + if !current_level: + return + if current_level_scene is not PackedScene: + print(\"Tried to restart the level despite not having the level scene\") + return + start_level(current_level_scene.instantiate(), current_level_scene) func pause_game(to_pause: bool) -> void: - if is_instance_valid(current_level) or changing_level: + if !is_instance_valid(current_level) or changing_level: return SaveFiles.change_property(\"played_for\", gui_timer.seconds_spent_total, SaveFiles.selected_file) if to_pause: - $Levels.process_mode = Node.PROCESS_MODE_DISABLED + current_level.process_mode = Node.PROCESS_MODE_DISABLED playing = false pause_menu.show() Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) else: - $Levels.process_mode = Node.PROCESS_MODE_INHERIT + current_level.process_mode = Node.PROCESS_MODE_INHERIT playing = true pause_menu.hide() Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN) @@ -150,7 +159,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 -mouse_filter = 1 +mouse_filter = 2 [node name="TopLeft" type="MarginContainer" parent="GUI"] layout_mode = 1 @@ -202,6 +211,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 [node name="Label" type="Label" parent="VictoryScreen"] layout_mode = 1 @@ -215,8 +225,6 @@ label_settings = SubResource("LabelSettings_1bs00") horizontal_alignment = 1 vertical_alignment = 1 -[node name="PauseMenu" parent="." instance=ExtResource("4_3bfj3")] - [node name="DevInfos" type="Label" parent="."] anchors_preset = 12 anchor_top = 1.0 @@ -226,3 +234,5 @@ offset_top = -23.0 grow_horizontal = 2 grow_vertical = 0 horizontal_alignment = 1 + +[node name="PauseMenu" parent="." instance=ExtResource("4_3bfj3")] diff --git a/levels/demo.tscn b/levels/demo.tscn deleted file mode 100644 index 4e1e5ad..0000000 --- a/levels/demo.tscn +++ /dev/null @@ -1,50 +0,0 @@ -[gd_scene load_steps=11 format=3 uid="uid://0re2mcnpub4e"] - -[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://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"] - -[sub_resource type="Gradient" id="Gradient_x6q8u"] - -[sub_resource type="GradientTexture1D" id="GradientTexture1D_lu6nv"] -gradient = SubResource("Gradient_x6q8u") - -[sub_resource type="PanoramaSkyMaterial" id="PanoramaSkyMaterial_4yv3y"] -panorama = SubResource("GradientTexture1D_lu6nv") - -[sub_resource type="Sky" id="Sky_ys2yp"] -sky_material = SubResource("PanoramaSkyMaterial_4yv3y") - -[sub_resource type="Environment" id="Environment_8o42c"] -background_mode = 1 -sky = SubResource("Sky_ys2yp") -ambient_light_source = 2 -ambient_light_color = Color(1, 1, 1, 1) -reflected_light_source = 2 - -[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" type="WorldEnvironment" parent="."] -environment = SubResource("Environment_8o42c") - -[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/menus/main/level_selection_menu.tscn b/menus/main/level_selection_menu.tscn index 152645d..4bfe215 100644 --- a/menus/main/level_selection_menu.tscn +++ b/menus/main/level_selection_menu.tscn @@ -13,6 +13,12 @@ const levels = [ \"res://levels/night/level.tscn\", ] var loaded_level: Level +var loaded_level_scene: PackedScene +var loaded_level_path: String + +func _enter_tree() -> void: + if len(loaded_level_path): + prepare_level(loaded_level_path) func _ready() -> void: var placeholders := carousel.get_children() @@ -30,8 +36,9 @@ func prepare_level(level_scene_path: String): loaded_level.queue_free() ResourceLoader.load_threaded_request(level_scene_path) - var level_scene = ResourceLoader.load_threaded_get(level_scene_path) - loaded_level = level_scene.instantiate() + loaded_level_scene = ResourceLoader.load_threaded_get(level_scene_path) + loaded_level = loaded_level_scene.instantiate() + loaded_level_path = level_scene_path $VBoxContainer/Presentation/Thumbnail.texture = loaded_level.thumbnail $VBoxContainer/Presentation/MarginContainer/VBoxContainer/LevelName.text = \"The \" + loaded_level.id.capitalize() $VBoxContainer/Presentation.show() @@ -50,7 +57,7 @@ func display_file_data(data: Variant) -> void: func _on_play_button_pressed() -> void: if is_instance_valid(loaded_level): - request_play_level.emit(loaded_level) + request_play_level.emit(loaded_level, loaded_level_scene) func seconds_to_readable(seconds: float) -> String: var minutes: int = floor(seconds / 60) diff --git a/menus/main/main_menu.tscn b/menus/main/main_menu.tscn index 7437b53..004089c 100644 --- a/menus/main/main_menu.tscn +++ b/menus/main/main_menu.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=10 format=3 uid="uid://ikeidrgprk8k"] +[gd_scene load_steps=16 format=3 uid="uid://ikeidrgprk8k"] [ext_resource type="PackedScene" uid="uid://wlhsarkeqe8r" path="res://menus/main/panel.tscn" id="1_5vmsf"] [ext_resource type="PackedScene" uid="uid://cnnvwotv33u1b" path="res://elements/player.tscn" id="2_2rexg"] @@ -8,6 +8,14 @@ script/source = "extends Node3D signal request_play_level +func _enter_tree() -> void: + $Camera3D/AnimationPlayer.play_backwards(\"camera_pan\") + PhysicsServer3D.area_set_param( + get_viewport().find_world_3d().space, + PhysicsServer3D.AREA_PARAM_GRAVITY_VECTOR, + Vector3.DOWN + ) + # Display on Panel 1 const res_initial_menu = preload(\"res://menus/main/initial_menu.tscn\") func _ready() -> void: @@ -38,7 +46,11 @@ func start() -> void: const res_level_selection_menu = preload(\"res://menus/main/level_selection_menu.tscn\") func level_selection() -> void: var level_selection_menu := res_level_selection_menu.instantiate() - level_selection_menu.connect(\"request_play_level\", func(level: Level): request_play_level.emit(level)) + level_selection_menu.connect(\"request_play_level\", func(level: Level, scene: PackedScene): + $Camera3D/AnimationPlayer.play(\"camera_pan\") + await get_tree().create_timer(1.5).timeout + request_play_level.emit(level, scene) + ) $Menus/Panel3.change_menu(level_selection_menu) rotate_cube_to(180) @@ -46,14 +58,18 @@ func level_selection() -> void: func rotate_cube_to(degrees: int) -> void: if $Menus/AnimationPlayer.is_playing(): return - degrees = -degrees - - var animation: Animation = $Menus/AnimationPlayer.get_animation(\"rotate\") - var new_rotation = Vector3(0, degrees, 0) - animation.track_set_key_value(0, 0, $Menus.rotation_degrees) - animation.track_set_key_value(0, 1, new_rotation) + var cube_animation: Animation = $Menus/AnimationPlayer.get_animation(\"rotate\") + cube_animation.track_set_key_value(0, 0, $Menus.rotation_degrees) + cube_animation.track_set_key_value(0, 1, Vector3(0, -degrees, 0)) $Menus/AnimationPlayer.play(\"rotate\") + + if $AnimationPlayer.is_playing(): + await get_tree().create_timer($AnimationPlayer.current_animation_length).timeout + var sky_animation: Animation = $AnimationPlayer.get_animation(\"sky_brightness\") + sky_animation.track_set_key_value(0, 0, $WorldEnvironment.environment.sky.sky_material.energy_multiplier) + sky_animation.track_set_key_value(0, 1, max(90, degrees * 2) / 90) + $AnimationPlayer.play(\"sky_brightness\") " [sub_resource type="Animation" id="Animation_0jxef"] @@ -94,8 +110,82 @@ _data = { &"rotate": SubResource("Animation_bt14i") } +[sub_resource type="Animation" id="Animation_2rexg"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("WorldEnvironment:environment:sky:sky_material:energy_multiplier") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [1.0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Camera3D:fov") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [40.0] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Camera3D:position") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, 0, 2.5)] +} + +[sub_resource type="Animation" id="Animation_jinmx"] +resource_name = "camera_pan" +length = 1.5 +step = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Camera3D:fov") +tracks/0/interp = 2 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1.5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [40.0, 75.0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Camera3D:position") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 1.5), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector3(0, 0, 2.5), Vector3(0, 0, 15)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_jinmx"] +_data = { +&"RESET": SubResource("Animation_2rexg"), +&"camera_pan": SubResource("Animation_jinmx") +} + [sub_resource type="PhysicalSkyMaterial" id="PhysicalSkyMaterial_bt14i"] -ground_color = Color(0.794232, 0.673177, 0.531056, 1) +ground_color = Color(1, 0.484315, 0.700558, 1) [sub_resource type="Sky" id="Sky_0jxef"] sky_material = SubResource("PhysicalSkyMaterial_bt14i") @@ -108,6 +198,44 @@ ambient_light_source = 3 ambient_light_color = Color(0.986752, 0.986752, 0.986752, 1) reflected_light_source = 2 +[sub_resource type="Animation" id="Animation_gma2u"] +resource_name = "sky_brightness" +length = 0.3 +step = 0.1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("../../WorldEnvironment:environment:sky:sky_material:energy_multiplier") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [1.0, 1.0] +} + +[sub_resource type="Animation" id="Animation_j2kye"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("../../WorldEnvironment:environment:sky:sky_material:energy_multiplier") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [1.0] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_wruj6"] +_data = { +&"RESET": SubResource("Animation_j2kye"), +&"sky_brightness": SubResource("Animation_gma2u") +} + [node name="MainMenu" type="Node3D"] process_mode = 3 script = SubResource("GDScript_bt14i") @@ -137,6 +265,12 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 2.5) current = true fov = 40.0 +[node name="AnimationPlayer" type="AnimationPlayer" parent="Camera3D"] +root_node = NodePath("../..") +libraries = { +&"": SubResource("AnimationLibrary_jinmx") +} + [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("Environment_qfa5o") @@ -144,7 +278,7 @@ environment = SubResource("Environment_qfa5o") transform = Transform3D(0.819152, -0.412596, 0.39844, 0, 0.694658, 0.71934, -0.573576, -0.589249, 0.569031, 0, 0, 0) [node name="Player" parent="." instance=ExtResource("2_2rexg")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.87335, 0) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 4, 0) [node name="Camera" parent="Player" index="0"] visible = false @@ -153,4 +287,10 @@ current = false [node name="GPUParticles3D" parent="Player/Sphere" index="2"] visible = false +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +root_node = NodePath("../Camera3D/AnimationPlayer") +libraries = { +&"": SubResource("AnimationLibrary_wruj6") +} + [editable path="Player"]