diff --git a/levels/base_level/base_level.gd b/levels/base_level/base_level.gd index 27003e8..768c0b3 100644 --- a/levels/base_level/base_level.gd +++ b/levels/base_level/base_level.gd @@ -5,6 +5,7 @@ const Block := preload("res://objects/block/block.tscn") const CardBase := preload("res://objects/card_base/card_base.tscn") const LevelMenu := preload("res://levels/chapter_menu/level_menu/level_menu.tscn") const TableCloth := preload("res://objects/table_cloth/table_cloth.tscn") +const BaseLevel := preload("res://levels/base_level/base_level.tscn") const HEIGHT := 1080 / 4 const WIDTH := 1920 / 4 const SEP := 28 @@ -148,7 +149,7 @@ func stage_clear() -> void: card_base.call("set_victory") $HUDs/TableCloth/GoldenCloth.set_visible(true) - + $HUDs/NextLevelButton.start_fade() func _on_card_put() -> void: @@ -196,7 +197,16 @@ func _on_back_button_pressed(): get_tree().root.add_child(level_menu) queue_free() - +func _on_next_level_button_pressed(): + var base_level := BaseLevel.instantiate() + + if lvl_id == len(DATA[chap_id]) - 1: + base_level.init(chap_id + 1, 0) + else: + base_level.init(chap_id, lvl_id + 1) + get_tree().root.add_child(base_level) + queue_free() + func _on_replay_button_pressed(): for card_base: CardBase in $CardBases.get_children(): card_base.reset_all_card_position() diff --git a/levels/base_level/base_level.tscn b/levels/base_level/base_level.tscn index 1149324..e3df7fd 100644 --- a/levels/base_level/base_level.tscn +++ b/levels/base_level/base_level.tscn @@ -3,6 +3,7 @@ [ext_resource type="Script" path="res://levels/base_level/base_level.gd" id="1_diojb"] [ext_resource type="PackedScene" uid="uid://xom5kpqs1rue" path="res://objects/calculator/calculator.tscn" id="1_tpuy7"] [ext_resource type="PackedScene" uid="uid://bepyyenjtc0p3" path="res://levels/chapter_menu/level_menu/level_button/level_button.tscn" id="2_0egdl"] +[ext_resource type="PackedScene" uid="uid://d1mp3ld6wsrwo" path="res://levels/base_level/next_level_button/next_level_button.tscn" id="2_0363i"] [ext_resource type="Texture2D" uid="uid://bxda1ilvqwc6f" path="res://objects/styled_button/return1.png" id="3_4xtpo"] [ext_resource type="AudioStream" uid="uid://cjhl2qr4mau8g" path="res://levels/base_level/level_clear.wav" id="3_ou3kh"] [ext_resource type="FontFile" uid="uid://1000owdyvwfg" path="res://fonts/unifont-15.1.04.otf" id="3_q0kqv"] @@ -52,6 +53,8 @@ script = ExtResource("1_diojb") [node name="HUDs" type="Node" parent="."] +[node name="NextLevelButton" parent="HUDs" instance=ExtResource("2_0363i")] + [node name="BackButton" parent="HUDs" instance=ExtResource("2_0egdl")] [node name="icon" type="AnimatedSprite2D" parent="HUDs/BackButton"] @@ -91,10 +94,12 @@ centered = false [node name="LevelClear" type="AudioStreamPlayer2D" parent="SFXs"] stream = ExtResource("3_ou3kh") +volume_db = -26.29 [node name="WrongAnswer" type="AudioStreamPlayer2D" parent="SFXs"] stream = ExtResource("4_yxsxp") volume_db = 1.0 +[connection signal="pressed" from="HUDs/NextLevelButton" to="." method="_on_next_level_button_pressed"] [connection signal="pressed" from="HUDs/BackButton" to="." method="_on_back_button_pressed"] [connection signal="pressed" from="HUDs/ReplayButton" to="." method="_on_replay_button_pressed"] diff --git a/levels/base_level/next_level_button/next_level_button.gd b/levels/base_level/next_level_button/next_level_button.gd new file mode 100644 index 0000000..52b0ec9 --- /dev/null +++ b/levels/base_level/next_level_button/next_level_button.gd @@ -0,0 +1,22 @@ +extends Button + + +const WIDTH := 1920 / 4 +const HEIGHT := 1080 / 4 + + +var fade_flag := false + + +func start_fade(): + fade_flag = true + $FadeTimer.start() + +func _ready(): + position = Vector2(WIDTH / 2 - 20, HEIGHT + 80) + $Word.set_word(">") + +# Called every frame. 'delta' is the elapsed time since the previous frame. +func _process(delta): + if fade_flag: + position.y = HEIGHT + 50 - 120 * (1 - pow($FadeTimer.time_left / $FadeTimer.wait_time, 1.5)) diff --git a/levels/base_level/next_level_button/next_level_button.tscn b/levels/base_level/next_level_button/next_level_button.tscn new file mode 100644 index 0000000..914a25e --- /dev/null +++ b/levels/base_level/next_level_button/next_level_button.tscn @@ -0,0 +1,11 @@ +[gd_scene load_steps=3 format=3 uid="uid://d1mp3ld6wsrwo"] + +[ext_resource type="PackedScene" uid="uid://bepyyenjtc0p3" path="res://levels/chapter_menu/level_menu/level_button/level_button.tscn" id="1_sa21d"] +[ext_resource type="Script" path="res://levels/base_level/next_level_button/next_level_button.gd" id="2_yogj1"] + +[node name="NextLevelButton" instance=ExtResource("1_sa21d")] +script = ExtResource("2_yogj1") + +[node name="FadeTimer" type="Timer" parent="." index="2"] +wait_time = 0.3 +one_shot = true diff --git a/levels/chapter_menu/level_menu/level_button/level_button.gd b/levels/chapter_menu/level_menu/level_button/level_button.gd index 22744e3..6d8d0cd 100644 --- a/levels/chapter_menu/level_menu/level_button/level_button.gd +++ b/levels/chapter_menu/level_menu/level_button/level_button.gd @@ -1,4 +1,4 @@ -extends Button +extends StyledButton signal enter_level(chapter_id:int, level_id : int) @@ -36,7 +36,9 @@ func init(chapter_id: int, level_id : int, pos : Vector2, type : int) -> void : button_type = type func _on_pressed(): - # print("choose: ",chap_id,"-",lvl_id) + print("choose: ",chap_id,"-",lvl_id) + print("! ") + $SFXButtonDown.play() if button_type == 1: enter_level.emit(chap_id, lvl_id) else: diff --git a/levels/chapter_menu/level_menu/level_button/level_button.tscn b/levels/chapter_menu/level_menu/level_button/level_button.tscn index ccd9efc..57ad4cf 100644 --- a/levels/chapter_menu/level_menu/level_button/level_button.tscn +++ b/levels/chapter_menu/level_menu/level_button/level_button.tscn @@ -4,7 +4,7 @@ [ext_resource type="Script" path="res://levels/chapter_menu/level_menu/level_button/level_button.gd" id="1_wwqfn"] [ext_resource type="PackedScene" uid="uid://cvx7wowcbfo0r" path="res://objects/word/word.tscn" id="3_js2i2"] -[node name="StyledButton" instance=ExtResource("1_4bgxw")] +[node name="LevelButton" instance=ExtResource("1_4bgxw")] offset_right = 40.0 offset_bottom = 40.0 script = ExtResource("1_wwqfn") @@ -12,5 +12,3 @@ script = ExtResource("1_wwqfn") [node name="Word" parent="." index="0" instance=ExtResource("3_js2i2")] position = Vector2(19, 19) scale = Vector2(1.5, 1.5) - -[connection signal="pressed" from="." to="." method="_on_pressed"] diff --git a/objects/block/block.gd b/objects/block/block.gd index a31bb03..cf08ae3 100644 --- a/objects/block/block.gd +++ b/objects/block/block.gd @@ -35,8 +35,6 @@ func set_word(e: String) -> void: func set_block_type(value: String) -> void: if value == "GOLDEN": $GoalFrameSprite.set_visible(true) - $GoalFrameSprite.set_texture(load("res://objects/block/goal_frame" + str(int(sqrt(randi_range(1, 16)))) + ".png")) - $PitSprite.set_visible(true) elif value == "PIT": $GoalFrameSprite.set_visible(false) diff --git a/objects/card/card.gd b/objects/card/card.gd index 96ffabc..463a5ab 100644 --- a/objects/card/card.gd +++ b/objects/card/card.gd @@ -34,6 +34,7 @@ func _on_mouse_release(): last_occupied_area = entered_area entered_area.occupied_word = $Word.get_word() emit_signal("put") + $SFXPutDown.play() # prints("card", $Word.get_word(), "put at", entered_area.name, "at global_position", global_position, "when origin global_position at", origin_global_position) else: global_position = last_global_position @@ -108,3 +109,12 @@ func set_word(e: String) -> void: func get_word() -> String: return $Word.get_word() + + + + +func _on_mouse_entered(): + $CardBackSprite.animation = "highlighted" + +func _on_mouse_exited(): + $CardBackSprite.animation = "default" diff --git a/objects/card/card.tscn b/objects/card/card.tscn index 664f49a..6e08db5 100644 --- a/objects/card/card.tscn +++ b/objects/card/card.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=9 format=3 uid="uid://b223s12rqgt4h"] +[gd_scene load_steps=10 format=3 uid="uid://b223s12rqgt4h"] [ext_resource type="Script" path="res://objects/card/card.gd" id="1_0bviv"] [ext_resource type="PackedScene" uid="uid://cvx7wowcbfo0r" path="res://objects/word/word.tscn" id="1_ns36n"] @@ -6,6 +6,7 @@ [ext_resource type="Texture2D" uid="uid://c8qjbksyn1bqt" path="res://objects/card/card2.png" id="4_c30j1"] [ext_resource type="Texture2D" uid="uid://bevrfq1hhyqwe" path="res://objects/card/card3.png" id="5_w81n3"] [ext_resource type="Texture2D" uid="uid://cmcc5xrpkrd0f" path="res://objects/card/card_highlighted.png" id="6_po2i6"] +[ext_resource type="AudioStream" uid="uid://cj4v8ehypq3sk" path="res://objects/card/put_down.wav" id="7_u4ylf"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_gu6l6"] @@ -48,5 +49,11 @@ shape = SubResource("RectangleShape2D_gu6l6") [node name="CardBackSprite" type="AnimatedSprite2D" parent="."] sprite_frames = SubResource("SpriteFrames_fo0r0") -animation = &"highlighted" autoplay = "default" + +[node name="SFXPutDown" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource("7_u4ylf") +volume_db = 6.558 + +[connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"] +[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"] diff --git a/objects/card/put_down.wav b/objects/card/put_down.wav new file mode 100644 index 0000000..d047914 Binary files /dev/null and b/objects/card/put_down.wav differ diff --git a/objects/card/put_down.wav.import b/objects/card/put_down.wav.import new file mode 100644 index 0000000..80ff91d --- /dev/null +++ b/objects/card/put_down.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cj4v8ehypq3sk" +path="res://.godot/imported/put_down.wav-4b821ef15f26d3e3b29c28f8d2015b38.sample" + +[deps] + +source_file="res://objects/card/put_down.wav" +dest_files=["res://.godot/imported/put_down.wav-4b821ef15f26d3e3b29c28f8d2015b38.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/objects/card_base/card_base.gd b/objects/card_base/card_base.gd index d0e9d63..4f03e87 100644 --- a/objects/card_base/card_base.gd +++ b/objects/card_base/card_base.gd @@ -9,6 +9,7 @@ signal card_put var fade_flag := false +var mouse_on := false var card_count = 0 @@ -22,12 +23,12 @@ func _ready(): func set_card_count(value): card_count = value - if card_count == 2: - $AnimatedSprite2D.animation = "default" - elif card_count == 1: - # TODO: 更改 texture - $AnimatedSprite2D.animation = "default" - elif card_count == 0: + if card_count > 0: + if mouse_on: + $AnimatedSprite2D.animation = "highlighted" + else: + $AnimatedSprite2D.animation = "default" + else: $AnimatedSprite2D.animation = "disabled" update_card_count_label() @@ -95,3 +96,14 @@ func _process(delta) -> void: offset = (1 - pow(offset, 1.5)) * FADE_MOVE_AMOUNT $AnimatedSprite2D.position.y = offset $Word.position.y = offset + + +func _on_mouse_entered(): + mouse_on = true + if $AnimatedSprite2D.animation == "default": + $AnimatedSprite2D.animation = "highlighted" + +func _on_mouse_exited(): + mouse_on = false + if $AnimatedSprite2D.animation == "highlighted": + $AnimatedSprite2D.animation = "default" diff --git a/objects/card_base/card_base.tscn b/objects/card_base/card_base.tscn index 3189131..3e0a797 100644 --- a/objects/card_base/card_base.tscn +++ b/objects/card_base/card_base.tscn @@ -41,6 +41,10 @@ animations = [{ [node name="CardBase" type="Area2D"] script = ExtResource("1_k5qn1") +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_2cmwb") +debug_color = Color(0.65098, 0.431373, 0.756863, 0.419608) + [node name="Word" parent="." instance=ExtResource("2_jvsp3")] z_index = 1 frame_progress = 0.953211 @@ -55,9 +59,6 @@ text = "0" horizontal_alignment = 1 vertical_alignment = 1 -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -shape = SubResource("RectangleShape2D_2cmwb") - [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] sprite_frames = SubResource("SpriteFrames_bhb3x") @@ -73,3 +74,5 @@ one_shot = true [connection signal="area_entered" from="." to="." method="_on_area_entered"] [connection signal="area_exited" from="." to="." method="_on_area_exited"] +[connection signal="mouse_entered" from="." to="." method="_on_mouse_entered"] +[connection signal="mouse_exited" from="." to="." method="_on_mouse_exited"] diff --git a/objects/styled_button/button_down.wav b/objects/styled_button/button_down.wav new file mode 100644 index 0000000..a71d0ed Binary files /dev/null and b/objects/styled_button/button_down.wav differ diff --git a/objects/styled_button/button_down.wav.import b/objects/styled_button/button_down.wav.import new file mode 100644 index 0000000..822578b --- /dev/null +++ b/objects/styled_button/button_down.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dpwscp4bw7pay" +path="res://.godot/imported/button_down.wav-577d8f023953f645606364b1089d1ba6.sample" + +[deps] + +source_file="res://objects/styled_button/button_down.wav" +dest_files=["res://.godot/imported/button_down.wav-577d8f023953f645606364b1089d1ba6.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/objects/styled_button/styled_button.gd b/objects/styled_button/styled_button.gd new file mode 100644 index 0000000..53dab9e --- /dev/null +++ b/objects/styled_button/styled_button.gd @@ -0,0 +1,7 @@ +extends Button + +class_name StyledButton + + +func _on_pressed(): + $SFXButtonDown.play() diff --git a/objects/styled_button/styled_button.tscn b/objects/styled_button/styled_button.tscn index 8236470..fcfc19f 100644 --- a/objects/styled_button/styled_button.tscn +++ b/objects/styled_button/styled_button.tscn @@ -1,7 +1,9 @@ -[gd_scene load_steps=6 format=3 uid="uid://drl1xe103umpi"] +[gd_scene load_steps=8 format=3 uid="uid://drl1xe103umpi"] [ext_resource type="Texture2D" uid="uid://cfbqh1k0etr6g" path="res://objects/card/card1.png" id="1_l6dpy"] [ext_resource type="Texture2D" uid="uid://cmcc5xrpkrd0f" path="res://objects/card/card_highlighted.png" id="2_j1sqk"] +[ext_resource type="Script" path="res://objects/styled_button/styled_button.gd" id="3_rtcig"] +[ext_resource type="AudioStream" uid="uid://dpwscp4bw7pay" path="res://objects/styled_button/button_down.wav" id="4_no3m1"] [sub_resource type="StyleBoxTexture" id="StyleBoxTexture_c0uot"] texture = ExtResource("1_l6dpy") @@ -22,3 +24,10 @@ theme_override_styles/normal = SubResource("StyleBoxTexture_c0uot") theme_override_styles/hover = SubResource("StyleBoxTexture_eifmj") theme_override_styles/pressed = SubResource("StyleBoxTexture_eifmj") theme_override_styles/focus = SubResource("StyleBoxEmpty_tfhr0") +script = ExtResource("3_rtcig") + +[node name="SFXButtonDown" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource("4_no3m1") +volume_db = 10.306 + +[connection signal="pressed" from="." to="." method="_on_pressed"]