diff --git a/menus/level_select_scholar.gd b/menus/level_select_scholar.gd index a1d4761..f686dba 100644 --- a/menus/level_select_scholar.gd +++ b/menus/level_select_scholar.gd @@ -131,6 +131,16 @@ func _gui_input(event: InputEvent) -> void: selected_shard = posmod(selected_shard - 1, 8) shard_title.text = LevelData.levels[selected_level].shard_titles[selected_shard] shard_arrow.position.x = filled_shards.get_child(selected_shard).position.x + elif event.is_action_pressed("next_level"): + var level = int(clamp(selected_level + 1, 0, LevelData.levels.size() - 1)) + if _can_travel(level): + _select_level(level) + _update_stats(false) + elif event.is_action_pressed("prev_level"): + var level = int(clamp(selected_level - 1, 0, LevelData.levels.size() - 1)) + if _can_travel(level): + _select_level(level) + _update_stats(false) func _select_level(level_id: int) -> void: var level = LevelData.levels[level_id] @@ -197,7 +207,7 @@ func _travel_to_level(level_name: String) -> void: tween.tween_callback(hop_tween, "kill") tween.tween_property(player_sprite, "position:y", -2.0, 0.0) -func _update_stats() -> void: +func _update_stats(popup: bool = true) -> void: # fill in level panel information var save_id = LevelData.levels[selected_level].save_id var save_data: Save.LevelSaveData = Save.current_file.levels[save_id] @@ -212,8 +222,12 @@ func _update_stats() -> void: $"%BossFlavorText".text = "Speediest Smashing" 11: $"%PressStartBoss".text = "Press Start To Change The Future!" - $"%BossFlavorText".text = "Fastest Future" - animation_player.play("show_boss") + $"%BossFlavorText".text = "Fastest Future" + if popup: + animation_player.play("show_boss") + elif not boss_shown: + $AuxPlayer.play("hide_stats") + animation_player.play("show_boss") boss_shown = true else: score_any.text = "%05d" % save_data.score_any @@ -226,7 +240,12 @@ func _update_stats() -> void: selected_shard = 0 shard_title.text = LevelData.levels[selected_level].shard_titles[selected_shard] shard_arrow.position.x = filled_shards.get_child(selected_shard).position.x - animation_player.play("show_stats") + if popup: + animation_player.play("show_stats") + elif boss_shown: + $AuxPlayer.play("hide_boss") + animation_player.play("show_stats") + boss_shown = false func _on_StayHere_pressed() -> void: diff --git a/menus/level_select_scholar.tscn b/menus/level_select_scholar.tscn index 5a51f47..ac9af97 100644 --- a/menus/level_select_scholar.tscn +++ b/menus/level_select_scholar.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=35 format=2] +[gd_scene load_steps=44 format=2] [ext_resource path="res://menus/level_select_scholar.gd" type="Script" id=1] [ext_resource path="res://graphics/level_select/world_map.png" type="Texture" id=2] @@ -424,6 +424,372 @@ tracks/1/keys = { "values": [ Vector2( 0, 0.02 ), Vector2( 1, 0.02 ), Vector2( 1, 1 ) ] } +[sub_resource type="Animation" id=18] +length = 0.001 +tracks/0/type = "value" +tracks/0/path = NodePath("LevelStats:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ false ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("LevelStats:rect_scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 1, 1 ) ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("ExitPopup:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ false ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("ExitPopup:rect_scale") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 1e-05, 0.011 ) ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("MenuPopup:visible") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ false ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("MenuPopup:rect_scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 1, 1 ) ] +} + +[sub_resource type="Animation" id=19] +resource_name = "hide_boss" +length = 0.4 +tracks/0/type = "value" +tracks/0/path = NodePath("BossCenter:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("BossCenter:rect_scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.2, 0.4 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 1, 1 ), Vector2( 1, 0.04 ), Vector2( 0, 0.04 ) ] +} + +[sub_resource type="Animation" id=20] +resource_name = "hide_exit" +length = 0.4 +tracks/0/type = "value" +tracks/0/path = NodePath("ExitPopup:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0.4 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("ExitPopup:rect_scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.2, 0.4 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 1, 1 ), Vector2( 1, 0.07 ), Vector2( 0, 0.07 ) ] +} +tracks/2/type = "method" +tracks/2/path = NodePath("MenuPopup/PanelContainer/VBoxContainer/Menu/MenuButton") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0.4 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "grab_focus" +} ] +} +tracks/3/type = "method" +tracks/3/path = NodePath("ExitPopup") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( ), +"transitions": PoolRealArray( ), +"values": [ ] +} + +[sub_resource type="Animation" id=21] +resource_name = "hide_menu" +length = 0.4 +tracks/0/type = "value" +tracks/0/path = NodePath("MenuPopup:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0.4 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("MenuPopup:rect_scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.2, 0.4 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 1, 1 ), Vector2( 1, 0.035 ), Vector2( 1e-05, 0.035 ) ] +} +tracks/2/type = "method" +tracks/2/path = NodePath(".") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0.4 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "grab_focus" +} ] +} + +[sub_resource type="Animation" id=22] +resource_name = "hide_stats" +length = 0.4 +tracks/0/type = "value" +tracks/0/path = NodePath("LevelStats:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0.4 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("LevelStats:rect_scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.2, 0.4 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 1, 1 ), Vector2( 1, 0.02 ), Vector2( 0, 0.02 ) ] +} + +[sub_resource type="Animation" id=23] +resource_name = "show_boss" +length = 0.4 +tracks/0/type = "value" +tracks/0/path = NodePath("BossCenter:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("BossCenter:rect_scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.2, 0.4 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 0, 0.04 ), Vector2( 1, 0.04 ), Vector2( 1, 1 ) ] +} + +[sub_resource type="Animation" id=24] +resource_name = "show_exit" +length = 0.4 +tracks/0/type = "value" +tracks/0/path = NodePath("ExitPopup:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("ExitPopup:rect_scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.2, 0.4 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 0, 0.07 ), Vector2( 1, 0.07 ), Vector2( 1, 1 ) ] +} +tracks/2/type = "method" +tracks/2/path = NodePath("ExitPopup/PanelContainer/VBoxContainer/HBoxContainer/StayHere") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "grab_focus" +} ] +} + +[sub_resource type="Animation" id=25] +resource_name = "show_menu" +length = 0.4 +tracks/0/type = "value" +tracks/0/path = NodePath("MenuPopup:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("MenuPopup:rect_scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.2, 0.4 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 1e-05, 0.035 ), Vector2( 1, 0.035 ), Vector2( 1, 1 ) ] +} +tracks/2/type = "method" +tracks/2/path = NodePath("MenuPopup/PanelContainer/VBoxContainer/Resume/ResumeButton") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"values": [ { +"args": [ ], +"method": "grab_focus" +} ] +} + +[sub_resource type="Animation" id=26] +resource_name = "show_stats" +length = 0.4 +tracks/0/type = "value" +tracks/0/path = NodePath("LevelStats:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("LevelStats:rect_scale") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.2, 0.4 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 0, +"values": [ Vector2( 0, 0.02 ), Vector2( 1, 0.02 ), Vector2( 1, 1 ) ] +} + [node name="LevelSelect" type="Control"] anchor_right = 1.0 anchor_bottom = 1.0 @@ -898,6 +1264,17 @@ anims/show_exit = SubResource( 12 ) anims/show_menu = SubResource( 14 ) anims/show_stats = SubResource( 7 ) +[node name="AuxPlayer" type="AnimationPlayer" parent="."] +anims/RESET = SubResource( 18 ) +anims/hide_boss = SubResource( 19 ) +anims/hide_exit = SubResource( 20 ) +anims/hide_menu = SubResource( 21 ) +anims/hide_stats = SubResource( 22 ) +anims/show_boss = SubResource( 23 ) +anims/show_exit = SubResource( 24 ) +anims/show_menu = SubResource( 25 ) +anims/show_stats = SubResource( 26 ) + [node name="ShardCount" type="Label" parent="."] anchor_left = 1.0 anchor_top = 1.0 diff --git a/project.godot b/project.godot index 22acdd2..45bc657 100644 --- a/project.godot +++ b/project.godot @@ -353,6 +353,18 @@ ui_start={ , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":11,"pressure":0.0,"pressed":false,"script":null) ] } +prev_level={ +"deadzone": 0.5, +"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":4,"pressure":0.0,"pressed":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":65,"unicode":0,"echo":false,"script":null) + ] +} +next_level={ +"deadzone": 0.5, +"events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":5,"pressure":0.0,"pressed":false,"script":null) +, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":0,"physical_scancode":83,"unicode":0,"echo":false,"script":null) + ] +} [input_devices]