diff --git a/asset/art/gif/c02_谢幕演出/c02_谢幕演出_frames.tres b/asset/art/gif/c02_谢幕演出/c02_谢幕演出_frames.tres index 33b3b7f1..32126d17 100644 --- a/asset/art/gif/c02_谢幕演出/c02_谢幕演出_frames.tres +++ b/asset/art/gif/c02_谢幕演出/c02_谢幕演出_frames.tres @@ -1,14 +1,13 @@ -[gd_resource type="SpriteFrames" load_steps=99 format=3 uid="uid://b0icyhxpj16tv"] +[gd_resource type="SpriteFrames" load_steps=98 format=3 uid="uid://b0icyhxpj16tv"] -[ext_resource type="Texture2D" uid="uid://swoydeghhp4f" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/0.png" id="1_dcxit"] -[ext_resource type="Texture2D" uid="uid://c1b5ek0diwa4u" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/1.png" id="2_qjesf"] -[ext_resource type="Texture2D" uid="uid://1b1a4f4ehfx5" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/2.png" id="3_6x1hw"] -[ext_resource type="Texture2D" uid="uid://fhrrv6vj8ac7" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/3.png" id="4_3rik6"] -[ext_resource type="Texture2D" uid="uid://xap5cy8ibaom" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/4.png" id="5_ysr4j"] -[ext_resource type="Texture2D" uid="uid://mirprq71s1i3" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/5.png" id="6_roeuf"] -[ext_resource type="Texture2D" uid="uid://i2horxpxqdl1" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/6.png" id="7_hlqm1"] -[ext_resource type="Texture2D" uid="uid://bbobudcd1x0x0" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/7.png" id="8_jn752"] -[ext_resource type="Texture2D" uid="uid://c4mcicg5jh1w3" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/8.png" id="9_gt5gk"] +[ext_resource type="Texture2D" uid="uid://3yp8wjdlisg7" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/0.png" id="1_dcxit"] +[ext_resource type="Texture2D" uid="uid://dy0c87f4lyanb" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/1.png" id="2_qjesf"] +[ext_resource type="Texture2D" uid="uid://cpbwro2r8rxq8" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/2.png" id="3_6x1hw"] +[ext_resource type="Texture2D" uid="uid://b4sptoxq8cad0" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/3.png" id="4_3rik6"] +[ext_resource type="Texture2D" uid="uid://btduvh8b3c4ew" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/4.png" id="5_ysr4j"] +[ext_resource type="Texture2D" uid="uid://dr6e7jomshvsh" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/5.png" id="6_roeuf"] +[ext_resource type="Texture2D" uid="uid://cjj7vu23hgak7" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/6.png" id="7_hlqm1"] +[ext_resource type="Texture2D" uid="uid://erpp4jgxj2y6" path="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/7.png" id="8_jn752"] [ext_resource type="Texture2D" uid="uid://cipqugfhrxn0l" path="res://asset/art/gif/c02_谢幕演出/小婵呼吸_牵手前/0.png" id="18_qjesf"] [ext_resource type="Texture2D" uid="uid://dsxns084r0yvw" path="res://asset/art/gif/c02_谢幕演出/小婵呼吸_牵手前/1.png" id="19_6x1hw"] [ext_resource type="Texture2D" uid="uid://dxo626pxfvhyi" path="res://asset/art/gif/c02_谢幕演出/吕萍牵手动作/0.png" id="724_met76"] @@ -102,36 +101,33 @@ [resource] animations = [{ "frames": [{ -"duration": 1.0, +"duration": 3.0, "texture": ExtResource("1_dcxit") }, { -"duration": 1.0, +"duration": 3.0, "texture": ExtResource("2_qjesf") }, { -"duration": 1.0, +"duration": 3.0, "texture": ExtResource("3_6x1hw") }, { -"duration": 1.0, +"duration": 3.0, "texture": ExtResource("4_3rik6") }, { -"duration": 1.0, +"duration": 3.0, "texture": ExtResource("5_ysr4j") }, { -"duration": 1.0, +"duration": 3.0, "texture": ExtResource("6_roeuf") }, { -"duration": 1.0, +"duration": 3.0, "texture": ExtResource("7_hlqm1") }, { -"duration": 1.0, +"duration": 3.0, "texture": ExtResource("8_jn752") -}, { -"duration": 1.0, -"texture": ExtResource("9_gt5gk") }], "loop": true, "name": &"一起牵手跑步", -"speed": 6.0 +"speed": 30.0 }, { "frames": [{ "duration": 9.9, diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/0.png b/asset/art/gif/c02_谢幕演出/一起牵手跑步/0.png index c20c6030..3f50ee09 100644 Binary files a/asset/art/gif/c02_谢幕演出/一起牵手跑步/0.png and b/asset/art/gif/c02_谢幕演出/一起牵手跑步/0.png differ diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/0.png.import b/asset/art/gif/c02_谢幕演出/一起牵手跑步/0.png.import index 5ae5035a..932225d2 100644 --- a/asset/art/gif/c02_谢幕演出/一起牵手跑步/0.png.import +++ b/asset/art/gif/c02_谢幕演出/一起牵手跑步/0.png.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://swoydeghhp4f" +uid="uid://3yp8wjdlisg7" path="res://.godot/imported/0.png-92b018576272d5383ade0c5425e3e597.ctex" metadata={ "vram_texture": false diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/1.png b/asset/art/gif/c02_谢幕演出/一起牵手跑步/1.png index 753e5bcc..ecf01e21 100644 Binary files a/asset/art/gif/c02_谢幕演出/一起牵手跑步/1.png and b/asset/art/gif/c02_谢幕演出/一起牵手跑步/1.png differ diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/1.png.import b/asset/art/gif/c02_谢幕演出/一起牵手跑步/1.png.import index a1886e5b..f36c2475 100644 --- a/asset/art/gif/c02_谢幕演出/一起牵手跑步/1.png.import +++ b/asset/art/gif/c02_谢幕演出/一起牵手跑步/1.png.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://c1b5ek0diwa4u" +uid="uid://dy0c87f4lyanb" path="res://.godot/imported/1.png-1b3a5f61b7fc7400030e7cd8f1542c75.ctex" metadata={ "vram_texture": false diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/2.png b/asset/art/gif/c02_谢幕演出/一起牵手跑步/2.png index 4ca7950c..3b76c940 100644 Binary files a/asset/art/gif/c02_谢幕演出/一起牵手跑步/2.png and b/asset/art/gif/c02_谢幕演出/一起牵手跑步/2.png differ diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/2.png.import b/asset/art/gif/c02_谢幕演出/一起牵手跑步/2.png.import index ae5e7493..661bc628 100644 --- a/asset/art/gif/c02_谢幕演出/一起牵手跑步/2.png.import +++ b/asset/art/gif/c02_谢幕演出/一起牵手跑步/2.png.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://1b1a4f4ehfx5" +uid="uid://cpbwro2r8rxq8" path="res://.godot/imported/2.png-544365b37e70fc733fe86187c62f642a.ctex" metadata={ "vram_texture": false diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/3.png b/asset/art/gif/c02_谢幕演出/一起牵手跑步/3.png index b63a276a..725bdd81 100644 Binary files a/asset/art/gif/c02_谢幕演出/一起牵手跑步/3.png and b/asset/art/gif/c02_谢幕演出/一起牵手跑步/3.png differ diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/3.png.import b/asset/art/gif/c02_谢幕演出/一起牵手跑步/3.png.import index 3ee248c5..695b1e0e 100644 --- a/asset/art/gif/c02_谢幕演出/一起牵手跑步/3.png.import +++ b/asset/art/gif/c02_谢幕演出/一起牵手跑步/3.png.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://fhrrv6vj8ac7" +uid="uid://b4sptoxq8cad0" path="res://.godot/imported/3.png-b483acae7f7d03af171d5eef5022a25c.ctex" metadata={ "vram_texture": false diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/4.png b/asset/art/gif/c02_谢幕演出/一起牵手跑步/4.png index 678aca32..981d9540 100644 Binary files a/asset/art/gif/c02_谢幕演出/一起牵手跑步/4.png and b/asset/art/gif/c02_谢幕演出/一起牵手跑步/4.png differ diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/4.png.import b/asset/art/gif/c02_谢幕演出/一起牵手跑步/4.png.import index 8e9bcc96..3da2325c 100644 --- a/asset/art/gif/c02_谢幕演出/一起牵手跑步/4.png.import +++ b/asset/art/gif/c02_谢幕演出/一起牵手跑步/4.png.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://xap5cy8ibaom" +uid="uid://btduvh8b3c4ew" path="res://.godot/imported/4.png-7785b7bf47d72e8bef66608fe4e73845.ctex" metadata={ "vram_texture": false diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/5.png b/asset/art/gif/c02_谢幕演出/一起牵手跑步/5.png index 74c6bda9..d37973d6 100644 Binary files a/asset/art/gif/c02_谢幕演出/一起牵手跑步/5.png and b/asset/art/gif/c02_谢幕演出/一起牵手跑步/5.png differ diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/5.png.import b/asset/art/gif/c02_谢幕演出/一起牵手跑步/5.png.import index 15ee87f4..50ea5eb3 100644 --- a/asset/art/gif/c02_谢幕演出/一起牵手跑步/5.png.import +++ b/asset/art/gif/c02_谢幕演出/一起牵手跑步/5.png.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://mirprq71s1i3" +uid="uid://dr6e7jomshvsh" path="res://.godot/imported/5.png-d1d4086f4191000c0a18248983de900b.ctex" metadata={ "vram_texture": false diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/6.png b/asset/art/gif/c02_谢幕演出/一起牵手跑步/6.png index 3a05eb09..364d1432 100644 Binary files a/asset/art/gif/c02_谢幕演出/一起牵手跑步/6.png and b/asset/art/gif/c02_谢幕演出/一起牵手跑步/6.png differ diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/6.png.import b/asset/art/gif/c02_谢幕演出/一起牵手跑步/6.png.import index 24d3f741..5942ea50 100644 --- a/asset/art/gif/c02_谢幕演出/一起牵手跑步/6.png.import +++ b/asset/art/gif/c02_谢幕演出/一起牵手跑步/6.png.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://i2horxpxqdl1" +uid="uid://cjj7vu23hgak7" path="res://.godot/imported/6.png-f217728f71b67bd30ef229b5aec5340e.ctex" metadata={ "vram_texture": false diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/7.png b/asset/art/gif/c02_谢幕演出/一起牵手跑步/7.png index 9fc0ad9e..1cfde249 100644 Binary files a/asset/art/gif/c02_谢幕演出/一起牵手跑步/7.png and b/asset/art/gif/c02_谢幕演出/一起牵手跑步/7.png differ diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/7.png.import b/asset/art/gif/c02_谢幕演出/一起牵手跑步/7.png.import index 36644730..2b83da51 100644 --- a/asset/art/gif/c02_谢幕演出/一起牵手跑步/7.png.import +++ b/asset/art/gif/c02_谢幕演出/一起牵手跑步/7.png.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://bbobudcd1x0x0" +uid="uid://erpp4jgxj2y6" path="res://.godot/imported/7.png-d76ef97d58c7c3fc046c6dfdcb091398.ctex" metadata={ "vram_texture": false diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/8.png b/asset/art/gif/c02_谢幕演出/一起牵手跑步/8.png deleted file mode 100644 index 99008f88..00000000 Binary files a/asset/art/gif/c02_谢幕演出/一起牵手跑步/8.png and /dev/null differ diff --git a/asset/art/gif/c02_谢幕演出/吕萍牵手动作/0.png b/asset/art/gif/c02_谢幕演出/吕萍牵手动作/0.png index 3c54f6e1..d2eff2f3 100644 Binary files a/asset/art/gif/c02_谢幕演出/吕萍牵手动作/0.png and b/asset/art/gif/c02_谢幕演出/吕萍牵手动作/0.png differ diff --git a/asset/art/gif/c02_谢幕演出/吕萍牵手动作/1.png b/asset/art/gif/c02_谢幕演出/吕萍牵手动作/1.png index 735f4236..3f11d4f1 100644 Binary files a/asset/art/gif/c02_谢幕演出/吕萍牵手动作/1.png and b/asset/art/gif/c02_谢幕演出/吕萍牵手动作/1.png differ diff --git a/asset/art/gif/c02_谢幕演出/吕萍牵手动作/2.png b/asset/art/gif/c02_谢幕演出/吕萍牵手动作/2.png index 819cf771..e037a0a6 100644 Binary files a/asset/art/gif/c02_谢幕演出/吕萍牵手动作/2.png and b/asset/art/gif/c02_谢幕演出/吕萍牵手动作/2.png differ diff --git a/asset/art/gif/c02_谢幕演出/吕萍牵手动作/3.png b/asset/art/gif/c02_谢幕演出/吕萍牵手动作/3.png index 184e8995..1dc3eaa3 100644 Binary files a/asset/art/gif/c02_谢幕演出/吕萍牵手动作/3.png and b/asset/art/gif/c02_谢幕演出/吕萍牵手动作/3.png differ diff --git a/asset/art/gif/c02_谢幕演出/吕萍牵手动作/4.png b/asset/art/gif/c02_谢幕演出/吕萍牵手动作/4.png index 5f4af043..610ccf37 100644 Binary files a/asset/art/gif/c02_谢幕演出/吕萍牵手动作/4.png and b/asset/art/gif/c02_谢幕演出/吕萍牵手动作/4.png differ diff --git a/asset/art/gif/c02_谢幕演出/吕萍牵手动作/5.png b/asset/art/gif/c02_谢幕演出/吕萍牵手动作/5.png index 0e87e278..ef74f779 100644 Binary files a/asset/art/gif/c02_谢幕演出/吕萍牵手动作/5.png and b/asset/art/gif/c02_谢幕演出/吕萍牵手动作/5.png differ diff --git a/asset/art/gif/c02_谢幕演出/小婵牵手动作/0.png b/asset/art/gif/c02_谢幕演出/小婵牵手动作/0.png new file mode 100644 index 00000000..31c6373a Binary files /dev/null and b/asset/art/gif/c02_谢幕演出/小婵牵手动作/0.png differ diff --git a/asset/art/gif/c02_谢幕演出/一起牵手跑步/8.png.import b/asset/art/gif/c02_谢幕演出/小婵牵手动作/0.png.import similarity index 67% rename from asset/art/gif/c02_谢幕演出/一起牵手跑步/8.png.import rename to asset/art/gif/c02_谢幕演出/小婵牵手动作/0.png.import index 8cb9f5d7..5c1f9e21 100644 --- a/asset/art/gif/c02_谢幕演出/一起牵手跑步/8.png.import +++ b/asset/art/gif/c02_谢幕演出/小婵牵手动作/0.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://c4mcicg5jh1w3" -path="res://.godot/imported/8.png-91f27a22601ccff43ca64caf14ff17c2.ctex" +uid="uid://c1x2puu766w64" +path="res://.godot/imported/0.png-aec4a844a4e7d0020a35b69d15e1821a.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://asset/art/gif/c02_谢幕演出/一起牵手跑步/8.png" -dest_files=["res://.godot/imported/8.png-91f27a22601ccff43ca64caf14ff17c2.ctex"] +source_file="res://asset/art/gif/c02_谢幕演出/小婵牵手动作/0.png" +dest_files=["res://.godot/imported/0.png-aec4a844a4e7d0020a35b69d15e1821a.ctex"] [params] diff --git a/asset/art/gif/c02_谢幕演出/小婵牵手动作/1.png b/asset/art/gif/c02_谢幕演出/小婵牵手动作/1.png index cb376f15..fba3bd79 100644 Binary files a/asset/art/gif/c02_谢幕演出/小婵牵手动作/1.png and b/asset/art/gif/c02_谢幕演出/小婵牵手动作/1.png differ diff --git a/asset/art/gif/c02_谢幕演出/小婵牵手动作/2.png b/asset/art/gif/c02_谢幕演出/小婵牵手动作/2.png index f2f70cf1..b9996967 100644 Binary files a/asset/art/gif/c02_谢幕演出/小婵牵手动作/2.png and b/asset/art/gif/c02_谢幕演出/小婵牵手动作/2.png differ diff --git a/asset/art/gif/c02_谢幕演出/小婵牵手动作/3.png b/asset/art/gif/c02_谢幕演出/小婵牵手动作/3.png index b9a8f410..7ef6bfff 100644 Binary files a/asset/art/gif/c02_谢幕演出/小婵牵手动作/3.png and b/asset/art/gif/c02_谢幕演出/小婵牵手动作/3.png differ diff --git a/asset/art/gif/c02_谢幕演出/小婵牵手动作/4.png b/asset/art/gif/c02_谢幕演出/小婵牵手动作/4.png index 759240cc..d3f590a6 100644 Binary files a/asset/art/gif/c02_谢幕演出/小婵牵手动作/4.png and b/asset/art/gif/c02_谢幕演出/小婵牵手动作/4.png differ diff --git a/asset/art/gif/c02_谢幕演出/小婵牵手动作/5.png b/asset/art/gif/c02_谢幕演出/小婵牵手动作/5.png index b9a8f410..fd965b4f 100644 Binary files a/asset/art/gif/c02_谢幕演出/小婵牵手动作/5.png and b/asset/art/gif/c02_谢幕演出/小婵牵手动作/5.png differ diff --git a/asset/art/gif/c02_谢幕演出/小婵牵手动作/6.png b/asset/art/gif/c02_谢幕演出/小婵牵手动作/6.png index 759240cc..d3f590a6 100644 Binary files a/asset/art/gif/c02_谢幕演出/小婵牵手动作/6.png and b/asset/art/gif/c02_谢幕演出/小婵牵手动作/6.png differ diff --git a/asset/art/gif/c02_谢幕演出/小婵牵手跑步改后.gif.import b/asset/art/gif/c02_谢幕演出/小婵牵手跑步改后.gif.import deleted file mode 100644 index 27a06e08..00000000 --- a/asset/art/gif/c02_谢幕演出/小婵牵手跑步改后.gif.import +++ /dev/null @@ -1,14 +0,0 @@ -[remap] - -importer="gif.animated.texture.plugin" -type="SpriteFrames" -uid="uid://ct8il0g3ehxn2" -path="res://.godot/imported/小婵牵手跑步改后.gif-68a53fa1e4ac29f594171f2a9efb822f.tres" - -[deps] - -source_file="res://asset/art/gif/c02_谢幕演出/小婵牵手跑步改后.gif" -dest_files=["res://.godot/imported/小婵牵手跑步改后.gif-68a53fa1e4ac29f594171f2a9efb822f.tres"] - -[params] - diff --git a/asset/art/gif/c02_谢幕演出/小蝶擦火柴蹲下起身/0.png b/asset/art/gif/c02_谢幕演出/小蝶擦火柴蹲下起身/0.png index 314b636a..73b95952 100644 Binary files a/asset/art/gif/c02_谢幕演出/小蝶擦火柴蹲下起身/0.png and b/asset/art/gif/c02_谢幕演出/小蝶擦火柴蹲下起身/0.png differ diff --git a/asset/art/gif/c02_谢幕演出/小蝶擦火柴蹲下起身/1.png b/asset/art/gif/c02_谢幕演出/小蝶擦火柴蹲下起身/1.png index 17e21f07..86855143 100644 Binary files a/asset/art/gif/c02_谢幕演出/小蝶擦火柴蹲下起身/1.png and b/asset/art/gif/c02_谢幕演出/小蝶擦火柴蹲下起身/1.png differ diff --git a/asset/art/gif/c02_谢幕演出/小蝶擦火柴蹲下起身/2.png b/asset/art/gif/c02_谢幕演出/小蝶擦火柴蹲下起身/2.png index 7ebcb6d6..9dfa5de1 100644 Binary files a/asset/art/gif/c02_谢幕演出/小蝶擦火柴蹲下起身/2.png and b/asset/art/gif/c02_谢幕演出/小蝶擦火柴蹲下起身/2.png differ diff --git a/asset/art/gif/c02_谢幕演出/小蝶擦火柴蹲下起身/3.png b/asset/art/gif/c02_谢幕演出/小蝶擦火柴蹲下起身/3.png index 26402baa..c2d21a1d 100644 Binary files a/asset/art/gif/c02_谢幕演出/小蝶擦火柴蹲下起身/3.png and b/asset/art/gif/c02_谢幕演出/小蝶擦火柴蹲下起身/3.png differ diff --git a/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/0.png b/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/0.png index 314b636a..dcca59b4 100644 Binary files a/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/0.png and b/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/0.png differ diff --git a/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/1.png b/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/1.png index 0873d153..a94b8d21 100644 Binary files a/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/1.png and b/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/1.png differ diff --git a/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/2.png b/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/2.png index baff262c..8ddde585 100644 Binary files a/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/2.png and b/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/2.png differ diff --git a/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/3.png b/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/3.png index c01e818a..00c33564 100644 Binary files a/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/3.png and b/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/3.png differ diff --git a/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/4.png b/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/4.png index e5cabae0..549d5da1 100644 Binary files a/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/4.png and b/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/4.png differ diff --git a/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/5.png b/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/5.png index 81da847c..21eed767 100644 Binary files a/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/5.png and b/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/5.png differ diff --git a/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/6.png b/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/6.png index e5cabae0..549d5da1 100644 Binary files a/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/6.png and b/asset/art/gif/c02_谢幕演出/小蝶蹲下插火柴/6.png differ diff --git a/asset/art/gif/c02_谢幕演出小蝶分镜/c02_谢幕演出小蝶分镜_frames.tres b/asset/art/gif/c02_谢幕演出小蝶分镜/c02_谢幕演出小蝶分镜_frames.tres index 00d80f5f..ea101847 100644 --- a/asset/art/gif/c02_谢幕演出小蝶分镜/c02_谢幕演出小蝶分镜_frames.tres +++ b/asset/art/gif/c02_谢幕演出小蝶分镜/c02_谢幕演出小蝶分镜_frames.tres @@ -1,4 +1,4 @@ -[gd_resource type="SpriteFrames" load_steps=87 format=3 uid="uid://bwdidg1akthvf"] +[gd_resource type="SpriteFrames" load_steps=85 format=3 uid="uid://bwdidg1akthvf"] [ext_resource type="Texture2D" uid="uid://b1o46xue726he" path="res://asset/art/gif/c02_谢幕演出小蝶分镜/嘴巴动效/0.png" id="1_4fn1h"] [ext_resource type="Texture2D" uid="uid://dwusvap6pt8su" path="res://asset/art/gif/c02_谢幕演出小蝶分镜/嘴巴动效/1.png" id="2_6d3ut"] @@ -71,8 +71,6 @@ [ext_resource type="Texture2D" uid="uid://d2vjmjovcpld1" path="res://asset/art/gif/c02_谢幕演出小蝶分镜/闭眼动效/4.png" id="112_yu3om"] [ext_resource type="Texture2D" uid="uid://dfd3von84nk8l" path="res://asset/art/gif/c02_谢幕演出小蝶分镜/闭眼动效/5.png" id="113_hcxtl"] [ext_resource type="Texture2D" uid="uid://buuf2rxccnij5" path="res://asset/art/gif/c02_谢幕演出小蝶分镜/闭眼动效/6.png" id="114_jxtmx"] -[ext_resource type="Texture2D" uid="uid://cgop588y1kpui" path="res://asset/art/gif/c02_谢幕演出小蝶分镜/闭眼动效/7.png" id="115_xf5cy"] -[ext_resource type="Texture2D" uid="uid://bnrtr7p3hl8pd" path="res://asset/art/gif/c02_谢幕演出小蝶分镜/闭眼动效/8.png" id="116_q7mkn"] [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_6d3ut"] load_path = "res://.godot/imported/3.png-af7c560e9537fd9b091512aed74c448e.ctex" @@ -432,32 +430,26 @@ animations = [{ "speed": 30.0 }, { "frames": [{ -"duration": 1.5, +"duration": 1.0, "texture": ExtResource("108_nibmg") }, { -"duration": 1.5, +"duration": 1.0, "texture": ExtResource("109_kqeyo") }, { -"duration": 1.5, +"duration": 1.0, "texture": ExtResource("110_o2psr") }, { -"duration": 1.5, +"duration": 1.0, "texture": ExtResource("111_6dxhq") }, { -"duration": 1.5, +"duration": 1.0, "texture": ExtResource("112_yu3om") }, { -"duration": 1.5, +"duration": 1.0, "texture": ExtResource("113_hcxtl") }, { -"duration": 15.0, +"duration": 90.0, "texture": ExtResource("114_jxtmx") -}, { -"duration": 30.0, -"texture": ExtResource("115_xf5cy") -}, { -"duration": 30.0, -"texture": ExtResource("116_q7mkn") }], "loop": true, "name": &"闭眼动效", diff --git a/asset/art/scene/c01/s09_黄包车长场景/bg_夜晚黄包车场景.jpg b/asset/art/scene/c01/s09_黄包车长场景/bg_夜晚黄包车场景.jpg new file mode 100644 index 00000000..17ec477d Binary files /dev/null and b/asset/art/scene/c01/s09_黄包车长场景/bg_夜晚黄包车场景.jpg differ diff --git a/asset/art/scene/c01/s09_黄包车长场景/bg_夜晚黄包车场景.jpg.import b/asset/art/scene/c01/s09_黄包车长场景/bg_夜晚黄包车场景.jpg.import new file mode 100644 index 00000000..a26d1b0b --- /dev/null +++ b/asset/art/scene/c01/s09_黄包车长场景/bg_夜晚黄包车场景.jpg.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c7m10rk4cw3lf" +path="res://.godot/imported/bg_夜晚黄包车场景.jpg-63d9ff77177682efbd12e4b154e85d56.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://asset/art/scene/c01/s09_黄包车长场景/bg_夜晚黄包车场景.jpg" +dest_files=["res://.godot/imported/bg_夜晚黄包车场景.jpg-63d9ff77177682efbd12e4b154e85d56.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/asset/art/scene/c01/s09_黄包车长场景/bg_夜晚黄包车场景.png b/asset/art/scene/c01/s09_黄包车长场景/bg_夜晚黄包车场景.png deleted file mode 100755 index ae6ceccf..00000000 Binary files a/asset/art/scene/c01/s09_黄包车长场景/bg_夜晚黄包车场景.png and /dev/null differ diff --git a/asset/audio/peiyin_new/c02/c02_小孩喊着火啦.wav.import b/asset/audio/peiyin_new/c02/c02_小孩喊着火啦.wav.import deleted file mode 100644 index 620dfdf0..00000000 --- a/asset/audio/peiyin_new/c02/c02_小孩喊着火啦.wav.import +++ /dev/null @@ -1,24 +0,0 @@ -[remap] - -importer="wav" -type="AudioStreamWAV" -uid="uid://poyp61gxyqer" -path="res://.godot/imported/c02_小孩喊着火啦.wav-bcd1f60d994074e9e8a8a92864e6c250.sample" - -[deps] - -source_file="res://asset/audio/peiyin_new/c02/c02_小孩喊着火啦.wav" -dest_files=["res://.godot/imported/c02_小孩喊着火啦.wav-bcd1f60d994074e9e8a8a92864e6c250.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=2 diff --git a/asset/audio/sfx/交互/sfx_交互失败.wav b/asset/audio/sfx/交互/sfx_交互失败.wav new file mode 100644 index 00000000..4afb77b2 Binary files /dev/null and b/asset/audio/sfx/交互/sfx_交互失败.wav differ diff --git a/asset/audio/sfx/交互/sfx_交互失败.wav.import b/asset/audio/sfx/交互/sfx_交互失败.wav.import new file mode 100644 index 00000000..8c0ed2e7 --- /dev/null +++ b/asset/audio/sfx/交互/sfx_交互失败.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dph8v3v5mq1xl" +path="res://.godot/imported/sfx_交互失败.wav-97e55abf1cbf14ddbe3e7e9ede2df3f3.sample" + +[deps] + +source_file="res://asset/audio/sfx/交互/sfx_交互失败.wav" +dest_files=["res://.godot/imported/sfx_交互失败.wav-97e55abf1cbf14ddbe3e7e9ede2df3f3.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=2 diff --git a/asset/dialogue/inspect_content.dialogue b/asset/dialogue/inspect_content.dialogue index 113df324..fd5bb3be 100644 --- a/asset/dialogue/inspect_content.dialogue +++ b/asset/dialogue/inspect_content.dialogue @@ -15,6 +15,9 @@ 如有知其下落者请赐信,备有重谢,绝不失言。 [ID:c02_寻人启事_完整3] => END +~ c02_海报1 +战胜北方鼠疫之二杰 [ID:c02_海报1] +=> END ~ c02_青岛啤酒 系最好最廉之酒,并且每星期有新货到埠 [ID:c02_青岛啤酒详情] @@ -27,9 +30,6 @@ 民国五年一月十三日 [ID:t736cca4563] => END -~ c02_海报1 -战胜北方鼠疫之二杰 [ID:c02_海报1] -=> END ~ c02_保卫科花名册 一零一四 空 [ID:c02_保卫科花名册1] diff --git a/manager/scene/global_functor.gd b/manager/scene/global_functor.gd index bab6eff9..4ee91168 100644 --- a/manager/scene/global_functor.gd +++ b/manager/scene/global_functor.gd @@ -41,7 +41,11 @@ func c02_fire_count_down_try_start(): return c02_fire_count_down_timer = Timer.new() c02_fire_count_down_timer.autostart = true - c02_fire_count_down_timer.wait_time = 10 + if GlobalConfig.DEBUG: + SceneManager.pop_debug_dialog_info("debug", "当前为测试模式,倒计时 10s;正式模式倒计时 60s") + c02_fire_count_down_timer.wait_time = 10 + else: + c02_fire_count_down_timer.wait_time = 60 c02_fire_count_down_timer.one_shot = false c02_fire_count_down_timer.timeout.connect(_on_c02_fire_count_down_timeout) add_child(c02_fire_count_down_timer) @@ -53,7 +57,7 @@ func _on_c02_fire_count_down_timeout(): SceneManager.pop_debug_dialog_info("音效", "【重开】霸凌救小蝉倒计时") c02_fire_count_down_timer.stop() AudioManager.stop_bgm_music("霸凌救小蝉倒计时") - DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_未完成拯救小蝉的游戏") + DialogueManager.show_dialogue_balloon(dialogue_c02, "c02_未完成拯救小蝉的游戏", [GlobalConfig.DIALOG_IGNORE_INPUT]) await get_tree().create_timer(1.0).timeout SceneManager.show_black_hand(true, 0.5) await get_tree().create_timer(3.0).timeout diff --git a/manager/scene/scene_manager.gd b/manager/scene/scene_manager.gd index 861748ed..7c2b7c11 100644 --- a/manager/scene/scene_manager.gd +++ b/manager/scene/scene_manager.gd @@ -94,6 +94,14 @@ func unlock_player(): # player.operational = val +func player_action(action_code : int, auto_quit := false): + var player = get_player() + if player: + player.player_action(action_code, auto_quit) + else: + printerr("player_action: Player node not found") + + # action_freezed 对应 freeze 与 release 方法 # lock_time: the time to lock the player action. 0 means lock forever, thus the player will be locked until release_player is called. func freeze_player(lock_time: float, action := 3, auto_quit := false) -> void: diff --git a/scene/character/main_player.gd b/scene/character/main_player.gd index 4097c1f3..6e26386e 100644 --- a/scene/character/main_player.gd +++ b/scene/character/main_player.gd @@ -278,18 +278,10 @@ func set_catty_light(enable := false): tween.tween_property(catty_light, "energy", 0.0, 0.5) -var lock_mutex = Mutex.new() -var release_timer: SceneTreeTimer - - -# 自动解除对应 animation 的 loop 状态 -# lock_time: the time to lock the player action. 0 means lock forever, thus the player will be locked until release_player is called. -func freeze_player(lock_time: float, action_animation: int, auto_quit: bool) -> void: - lock_mutex.lock() - action_freezed = true - if current_animation_config.has(action_animation): +func player_action(action_code: int, auto_quit: bool): + if current_animation_config.has(action_code): # animation_name, scale, offset - var config = current_animation_config[action_animation] + var config = current_animation_config[action_code] var animation_l = config[0] var animation_r = config[0] sprite.scale = config[1] @@ -304,6 +296,18 @@ func freeze_player(lock_time: float, action_animation: int, auto_quit: bool) -> sprite.animation_looped.connect(_play_animation, CONNECT_ONE_SHOT) else: sprite.animation_finished.connect(_play_animation, CONNECT_ONE_SHOT) + + +var lock_mutex = Mutex.new() +var release_timer: SceneTreeTimer + + +# 自动解除对应 animation 的 loop 状态 +# lock_time: the time to lock the player action. 0 means lock forever, thus the player will be locked until release_player is called. +func freeze_player(lock_time: float, action_code: int, auto_quit: bool) -> void: + lock_mutex.lock() + action_freezed = true + player_action(action_code, auto_quit) if lock_time: if release_timer and release_timer.time_left > 0: release_timer.time_left = max(lock_time, release_timer.time_left) diff --git a/scene/entity/ambush.gd b/scene/entity/ambush.gd index 4b8728e3..a830f056 100644 --- a/scene/entity/ambush.gd +++ b/scene/entity/ambush.gd @@ -20,6 +20,13 @@ signal sign_mark_offset_updated trigger_mode = val if is_node_ready(): _check_sign_display() +@export var collision_width_and_x := Vector2(20.0, 0): + set(val): + collision_width_and_x = val + if is_node_ready(): + var shape = area2d.get_node("CollisionShape2D").shape + shape.size.x = collision_width_and_x.x + area2d.position.x = collision_width_and_x.y @export var interacted_sign_texture: Texture2D @export var one_shot := true # 首次进入 tree 就直接启用 @@ -66,7 +73,8 @@ var played_time := 0.0 # played = val @onready var sign_mark := %Sign as Sign -@onready var area := %Area2D as Area2D +@onready var area2d := %Area2D as Area2D + var ground_archive: GroundArchive var played: bool: set(val): @@ -79,6 +87,9 @@ var played: bool: # Called when the node enters the scene tree for the first time. func _ready() -> void: + var shape = area2d.get_node("CollisionShape2D").shape + shape.size.x = collision_width_and_x.x + area2d.position.x = collision_width_and_x.y if Engine.is_editor_hint(): var animation_player = _get_animation_player() # 更新 hook_animation 的可选项 @@ -101,8 +112,8 @@ func _ready() -> void: if one_shot: return sign_mark.interacted.connect(_interacted) - area.body_entered.connect(_entered) - area.area_entered.connect(_area_entered) + area2d.body_entered.connect(_entered) + area2d.area_entered.connect(_area_entered) if on_first_enter_tree: _do_trigger.call_deferred() diff --git a/scene/entity/ambush.tscn b/scene/entity/ambush.tscn index b2db994a..2a9cc38f 100644 --- a/scene/entity/ambush.tscn +++ b/scene/entity/ambush.tscn @@ -6,10 +6,11 @@ [sub_resource type="RectangleShape2D" id="RectangleShape2D_iwrfx"] resource_local_to_scene = true -size = Vector2(10, 70) +size = Vector2(25, 70) [node name="Ambush" type="Sprite2D"] script = ExtResource("1_rxgbr") +collision_width_and_x = Vector2(25, 0) interacted_sign_texture = ExtResource("2_1tnxk") hook_dialogue_title = "" hook_animation = "" diff --git a/scene/entity/closeup.gd b/scene/entity/closeup.gd index 89862147..cd4bf2ca 100644 --- a/scene/entity/closeup.gd +++ b/scene/entity/closeup.gd @@ -11,18 +11,14 @@ signal exit(arg) @export var first_interact_os_key := "" @export var packed_scene: PackedScene @export var quit_closeup_on_escape := true - var current_child: Node -@onready var sign_snapper = %SignSnapper as SignSnapper - func _ready() -> void: super._ready() if Engine.is_editor_hint(): return - # interacted.connect(_close_up_interacted) - sign_snapper.arrived.connect(_close_up_interacted) + interacted.connect(_close_up_interacted) func _close_up_interacted() -> void: @@ -30,12 +26,11 @@ func _close_up_interacted() -> void: SceneManager.freeze_player(0, action_key) sign_mark.display_sign = false var tween = await SceneManager.pop_os_with_str(first_interact_os_key) - tween.tween_interval(0.5) tween.tween_callback(display) tween.tween_callback(func(): sign_mark.display_sign = true) else: SceneManager.freeze_player(0, action_key) - get_tree().create_timer(0.5).timeout.connect(display) + display() # 可以直接调用 diff --git a/scene/entity/closeup.tscn b/scene/entity/closeup.tscn index de5c50df..8d2ae353 100644 --- a/scene/entity/closeup.tscn +++ b/scene/entity/closeup.tscn @@ -10,10 +10,12 @@ [sub_resource type="RectangleShape2D" id="RectangleShape2D_ogin7"] resource_local_to_scene = true -size = Vector2(30, 70) +size = Vector2(25, 70) [node name="Closeup" type="Sprite2D"] script = ExtResource("1_tvfr1") +enable_snapper = null +collision_width_and_x = Vector2(25, 0) unrevealed_sign_texture = ExtResource("2_dnubm") unmatched_sign_texture = ExtResource("3_dnubm") matched_sign_texture = ExtResource("4_18yy2") @@ -47,4 +49,6 @@ script = ExtResource("7_dnubm") release_player_on_arrived = false radius = 3.0 delay_arrived = 0.1 +action_on_arrived = 4 +delay_after_action = 0.4 metadata/_custom_type_script = "uid://cnt01hiw52bmn" diff --git a/scene/entity/inspectable.gd b/scene/entity/inspectable.gd index 5dd6b73e..31aa33d1 100644 --- a/scene/entity/inspectable.gd +++ b/scene/entity/inspectable.gd @@ -1,30 +1,65 @@ @tool extends Sprite2D +signal start_inspecting +signal quit_inspecting signal sign_mark_offset_updated +# @export var entity_config: EntityConfig: +# set(value): +# entity_config = value + +enum { STATUS_NORAML, STATUS_TRANSITIONING, STATUS_INSPECTING_COVER, STATUS_INSPECTING_NOTES } + +@export var enabled := true: + set(val): + enabled = val + if is_node_ready() and not Engine.is_editor_hint(): + sign_mark.enabled = val # sign_mark 节点在 ready 时会直接读取 @export var sign_mark_offset := Vector2.ZERO: set(val): sign_mark_offset = val sign_mark_offset_updated.emit(val) # @export var entity_name: String = "" -@export_enum("none", "c01", "c02", "c03", "c04", "c05") var editor_filter := "none": +@export var content_centered: bool = false +@export var action_key := 4 +@export var collision_width_and_x := Vector2(20.0, 0): + set(val): + collision_width_and_x = val + if is_node_ready(): + var shape = area2d.get_node("CollisionShape2D").shape + shape.size.x = collision_width_and_x.x + area2d.position.x = collision_width_and_x.y +@export var texture_cover: Texture2D +@export var note_sign_texture: Texture2D +@export_enum("none", "c01", "c02", "c03", "c04", "c05", "c06") var editor_filter := "none": set(val): editor_filter = val if is_node_ready() and Engine.is_editor_hint(): notify_property_list_changed() -@export var note_sign_texture: Texture2D -@export var texture_cover: Texture2D -@export var texture_note: Texture2D -@export var note_centered := false var content_key: String = "" @onready var sign_mark = %Sign as Sign +@onready var sign_snapper = %SignSnapper as SignSnapper @onready var area2d = %Area2D as Area2D -var content_dialogue = preload("res://asset/dialogue/inspect_content.dialogue") as DialogueResource -var inspecting = false +@onready var sfx = %Sfx +@onready var container = %Container +@onready var cover_rect = %Cover as TextureRect +@onready var content_label = %ContentLabel as Label +@onready var tip_label = %TipLabel as Label + +var tip_cover_hide_notes = "Q: " + tr("ui_退出") + " " + "E: " + tr("ui_阅读") +var tip_cover_without_notes = "Q: " + tr("ui_退出") + " " + "E: " + tr("ui_检阅") +var tip_notes = "Q: " + tr("ui_退出") + " " + "E: " + tr("ui_收起") + +static var content_dialogue = ( + preload("res://asset/dialogue/inspect_content.dialogue") as DialogueResource +) + +var status := STATUS_NORAML +var blinking_tween: Tween var ground_archive: GroundArchive # 尝试互动的次数 @@ -35,37 +70,29 @@ var tried_times: int: if tried_times >= 1 and sign_mark: sign_mark.sprite2d.texture = note_sign_texture + func _ready() -> void: + $InspectLayer.layer = GlobalConfig.CANVAS_LAYER_PROP_INSPECTOR + var shape = area2d.get_node("CollisionShape2D").shape + shape.size.x = collision_width_and_x.x + area2d.position.x = collision_width_and_x.y + container.modulate.a = 0.0 + content_label.modulate.a = 0.0 + content_label.text = _get_tr_content() + tip_label.text = tip_cover_hide_notes + cover_rect.texture = texture_cover if Engine.is_editor_hint(): return - area2d.body_entered.connect(_reset) - area2d.body_exited.connect(_on_cancel) - sign_mark.interacted.connect(_on_interacted) - sign_mark.cancel.connect(_on_cancel) - + sign_mark.enabled = enabled # setup default value ground_archive = ArchiveManager.archive.ground_archive() tried_times = ground_archive.get_value(name, "tried_times", 0) - -func _on_interacted() -> void: - if not texture_cover: - push_error("entity/inspectable.gd: texture_cover or texture_note is not set") - return - if inspecting: - return - tried_times += 1 - %Sfx.play() - # connect inspector quit signal - var inspector = SceneManager.get_inspector() - if inspector: - inspector.quit_and_hidden.connect(_on_quit_inspector) - var inspection_note = _get_tr_content() - inspector.pop_standard_inspection( - texture_cover, texture_note, inspection_note, note_centered - ) - inspecting = true - sign_mark.display_sign = false + if content_centered: + content_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER + # sign_mark.interacted.connect(_on_interacted) + sign_snapper.arrived.connect(_on_interacted) + sign_mark.cancel.connect(_on_cancel) func _get_tr_content(): @@ -82,26 +109,85 @@ func _get_tr_content(): return inspection_note -func _on_quit_inspector(): - var inspector = SceneManager.get_inspector() - if inspector: - # disconnect inspector quit signal - inspector.quit_and_hidden.disconnect(_on_quit_inspector) - inspecting = false - sign_mark.display_sign = true +func _on_interacted() -> void: + if STATUS_TRANSITIONING == status: + return + if status == STATUS_NORAML: + tried_times += 1 + sfx.play() + SceneManager.focus_node(self) + SceneManager.get_camera_marker().tween_zoom(2.0) + status = STATUS_TRANSITIONING + var tween = create_tween() + tween.tween_interval(0.8) + tween.tween_property(container, "modulate:a", 1.0, 0.7) + tween.tween_callback(func(): status = STATUS_INSPECTING_COVER) + # 改变信号源 + sign_mark.interacted.connect(_on_interacted) + sign_snapper.arrived.disconnect(_on_interacted) + sign_mark.display_sign = false + + SceneManager.freeze_player(0.0, action_key) + cover_rect.texture = texture_cover + if content_key == "": + tip_label.text = tip_cover_without_notes + else: + tip_label.text = tip_cover_hide_notes + _blink_label(true) + start_inspecting.emit() + elif status == STATUS_INSPECTING_COVER: + sfx.play() + status = STATUS_INSPECTING_NOTES + tip_label.text = tip_notes + create_tween().tween_property(content_label, "modulate:a", 1.0, 0.15) + elif status == STATUS_INSPECTING_NOTES: + sfx.play() + status = STATUS_INSPECTING_COVER + if content_key == "": + tip_label.text = tip_cover_without_notes + else: + tip_label.text = tip_cover_hide_notes + create_tween().tween_property(content_label, "modulate:a", 0.0, 0.15) + + +func _blink_label(init := true): + if status == STATUS_NORAML: + return + blinking_tween = create_tween() + if init: + blinking_tween.tween_property(tip_label, "modulate:a", 0.8, 2.0) + blinking_tween.tween_callback(_blink_label.bind(false)) + else: + blinking_tween.tween_property(tip_label, "modulate:a", 0.5, 1.0) + blinking_tween.tween_callback(_blink_label.bind(true)) func _on_cancel(_body = null): - inspecting = false - - -func _reset(_body): - inspecting = false + if STATUS_TRANSITIONING == status: + return + if status != STATUS_NORAML: + quit_inspecting.emit() + status = STATUS_TRANSITIONING + var tween = create_tween() + tween.tween_property(container, "modulate:a", 0.0, 0.15) + if blinking_tween and blinking_tween.is_running(): + blinking_tween.kill() + tween.parallel().tween_property(tip_label, "modulate:a", 0.0, 0.15) + tween.tween_interval(1.0) + tween.tween_callback(func(): status = STATUS_NORAML) + tween.tween_callback(func(): content_label.modulate.a = 0.0) + SceneManager.focus_player_and_reset_zoom() + SceneManager.release_player() + sign_mark.display_sign = true + # 改变信号源 + sign_mark.interacted.disconnect(_on_interacted) + sign_snapper.arrived.connect(_on_interacted) func _set(property: StringName, value: Variant) -> bool: if property == "content_key": content_key = value + content_label.text = _get_tr_content() return true return false diff --git a/scene/entity/inspectable.gd.uid b/scene/entity/inspectable.gd.uid index 3a734122..7827cf0e 100644 --- a/scene/entity/inspectable.gd.uid +++ b/scene/entity/inspectable.gd.uid @@ -1 +1 @@ -uid://ctd1xlvqdcsg4 +uid://cihyb26hjma4i diff --git a/scene/entity/inspectable.tscn b/scene/entity/inspectable.tscn index 55809c42..ef6bda1b 100644 --- a/scene/entity/inspectable.tscn +++ b/scene/entity/inspectable.tscn @@ -1,28 +1,33 @@ -[gd_scene load_steps=8 format=3 uid="uid://wyj4qdjyn4ql"] +[gd_scene load_steps=12 format=3 uid="uid://ci5anaxsa1apl"] -[ext_resource type="Script" uid="uid://ctd1xlvqdcsg4" path="res://scene/entity/inspectable.gd" id="1_0pc4s"] -[ext_resource type="Texture2D" uid="uid://c0rw25jl762a1" path="res://asset/art/ui/action_mark/UI眼睛.png" id="2_ossmq"] -[ext_resource type="AudioStream" uid="uid://dky3j8lwcy5sk" path="res://asset/audio/sfx/UI/物品查看.mp3" id="3_kilnm"] -[ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="3_p1g2a"] -[ext_resource type="Texture2D" uid="uid://bei1s1uucktso" path="res://asset/art/tool/neutral_point_light.webp" id="3_vbivp"] -[ext_resource type="PackedScene" uid="uid://c4tipnj1cr1j3" path="res://scene/entity/ux/sign.tscn" id="4_1yty8"] +[ext_resource type="Script" uid="uid://cihyb26hjma4i" path="res://scene/entity/inspectable.gd" id="1_85el0"] +[ext_resource type="Texture2D" uid="uid://c0rw25jl762a1" path="res://asset/art/ui/action_mark/UI眼睛.png" id="2_3pauf"] +[ext_resource type="AudioStream" uid="uid://byjcmxy5crce5" path="res://asset/audio/sfx/UI/纸条.mp3" id="3_3ldx7"] +[ext_resource type="Texture2D" uid="uid://bei1s1uucktso" path="res://asset/art/tool/neutral_point_light.webp" id="3_o562w"] +[ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="3_q18ff"] +[ext_resource type="PackedScene" uid="uid://c4tipnj1cr1j3" path="res://scene/entity/ux/sign.tscn" id="4_do8tr"] +[ext_resource type="Texture2D" uid="uid://dwgxa5j6602vv" path="res://asset/art/ui/prop/inspect文本衬底蒙版.png" id="6_q18ff"] +[ext_resource type="FontVariation" uid="uid://1ryw42kej6lv" path="res://config/font_ui.tres" id="7_ianbs"] +[ext_resource type="Texture2D" uid="uid://f186lvt5y2ql" path="res://asset/art/ui/prop/inspect背景遮罩.png" id="7_xawjo"] +[ext_resource type="Script" uid="uid://cnt01hiw52bmn" path="res://scene/entity/ux/sign_snapper.gd" id="10_mtbvd"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_4fuic"] resource_local_to_scene = true -size = Vector2(35, 70) +size = Vector2(25, 70) -[node name="Inspectable" type="Sprite2D"] -script = ExtResource("1_0pc4s") -note_sign_texture = ExtResource("2_ossmq") +[node name="LocalInspectable" type="Sprite2D"] +script = ExtResource("1_85el0") +collision_width_and_x = Vector2(25, 0) +note_sign_texture = ExtResource("2_3pauf") content_key = "" [node name="Sfx" type="AudioStreamPlayer" parent="."] unique_name_in_owner = true -stream = ExtResource("3_kilnm") +stream = ExtResource("3_3ldx7") bus = &"game_sfx" -script = ExtResource("3_p1g2a") +script = ExtResource("3_q18ff") -[node name="Sign" parent="." instance=ExtResource("4_1yty8")] +[node name="Sign" parent="." instance=ExtResource("4_do8tr")] unique_name_in_owner = true [node name="PointLight2D" type="PointLight2D" parent="."] @@ -30,7 +35,7 @@ unique_name_in_owner = true position = Vector2(0, -35) scale = Vector2(0.2, 0.2) energy = 0.0 -texture = ExtResource("3_vbivp") +texture = ExtResource("3_o562w") texture_scale = 0.5 [node name="Area2D" type="Area2D" parent="."] @@ -40,3 +45,93 @@ collision_layer = 0 [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] unique_name_in_owner = true shape = SubResource("RectangleShape2D_4fuic") + +[node name="InspectLayer" type="CanvasLayer" parent="."] +layer = 20 + +[node name="Root" type="Control" parent="InspectLayer"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="Container" type="MarginContainer" parent="InspectLayer/Root"] +unique_name_in_owner = true +modulate = Color(1, 1, 1, 0) +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 + +[node name="BGMask" type="TextureRect" parent="InspectLayer/Root/Container"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +mouse_filter = 2 +texture = ExtResource("7_xawjo") + +[node name="Cover" type="TextureRect" parent="InspectLayer/Root/Container"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +mouse_filter = 2 + +[node name="ContentLabel" type="Label" parent="InspectLayer/Root/Container"] +unique_name_in_owner = true +modulate = Color(1, 1, 1, 0) +z_index = 100 +custom_minimum_size = Vector2(130, 0) +layout_mode = 2 +size_flags_horizontal = 4 +vertical_alignment = 1 +autowrap_mode = 3 + +[node name="TextureRect" type="TextureRect" parent="InspectLayer/Root/Container/ContentLabel"] +self_modulate = Color(1, 1, 1, 0.733333) +show_behind_parent = true +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +texture = ExtResource("6_q18ff") + +[node name="MarginContainer" type="MarginContainer" parent="InspectLayer/Root"] +layout_mode = 2 +offset_top = 263.0 +offset_right = 564.0 +offset_bottom = 316.0 +size_flags_vertical = 8 +mouse_filter = 2 +theme_override_constants/margin_bottom = 38 + +[node name="TipLabel" type="Label" parent="InspectLayer/Root/MarginContainer"] +unique_name_in_owner = true +modulate = Color(1, 1, 1, 0) +z_index = 100 +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 8 +theme_override_fonts/font = ExtResource("7_ianbs") +text = "Q: 退出 E: 阅读" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="SignSnapper" type="Marker2D" parent="."] +unique_name_in_owner = true +script = ExtResource("10_mtbvd") +release_player_on_arrived = false +radius = 3.0 +delay_arrived = 0.1 +action_on_arrived = 4 +delay_after_action = 0.4 +metadata/_custom_type_script = "uid://cnt01hiw52bmn" diff --git a/scene/entity/interactable.gd b/scene/entity/interactable.gd index eab943d5..8cb99f52 100644 --- a/scene/entity/interactable.gd +++ b/scene/entity/interactable.gd @@ -19,6 +19,14 @@ signal sign_mark_offset_updated enabled = val if is_node_ready(): _check_sign_display() +@export var enable_snapper := true +@export var collision_width_and_x := Vector2(20.0, 0): + set(val): + collision_width_and_x = val + if is_node_ready(): + var shape = area2d.get_node("CollisionShape2D").shape + shape.size.x = collision_width_and_x.x + area2d.position.x = collision_width_and_x.y @export var unrevealed_sign_texture: Texture2D @export var unmatched_sign_texture: Texture2D @export var matched_sign_texture: Texture2D @@ -36,6 +44,7 @@ var prop_key3 := "" @onready var sfx_invalid = $SfxInvalid as Sfx @onready var sfx_success = $SfxSuccess as Sfx @onready var sign_mark = %Sign as Sign +@onready var sign_snapper = %SignSnapper as SignSnapper @onready var area2d = %Area2D as Area2D var ground_archive: GroundArchive @@ -54,11 +63,18 @@ static var item_config_res = preload("res://asset/dialogue/item_description.dial func _ready() -> void: + var shape = area2d.get_node("CollisionShape2D").shape + shape.size.x = collision_width_and_x.x + area2d.position.x = collision_width_and_x.y if Engine.is_editor_hint(): return area2d.body_entered.connect(_reset) area2d.body_exited.connect(_on_cancel) - sign_mark.interacted.connect(_on_interacted) + if enable_snapper: + sign_snapper.arrived.connect(_on_interacted) + else: + sign_snapper.enabled = false + sign_mark.interacted.connect(_on_interacted) sign_mark.cancel.connect(_on_cancel) sign_mark.enabled = enabled # setup default value diff --git a/scene/entity/interactable.tscn b/scene/entity/interactable.tscn index 044b7b3e..49ad04c4 100644 --- a/scene/entity/interactable.tscn +++ b/scene/entity/interactable.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=10 format=3 uid="uid://cw3q5pvciumil"] +[gd_scene load_steps=11 format=3 uid="uid://cw3q5pvciumil"] [ext_resource type="Script" uid="uid://dxyaip4khrkkq" path="res://scene/entity/interactable.gd" id="1_6nrd3"] [ext_resource type="Texture2D" uid="uid://dtyg0nugb2tnf" path="res://asset/art/ui/action_mark/UI探索.png" id="2_03eog"] @@ -8,10 +8,11 @@ [ext_resource type="Texture2D" uid="uid://gui0ubwlwoi0" path="res://asset/art/ui/action_mark/UI手.png" id="4_njk43"] [ext_resource type="AudioStream" uid="uid://ccng5y2fip6mc" path="res://asset/audio/sfx/UI/开锁声.mp3" id="5_exp6m"] [ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="6_l2kr5"] +[ext_resource type="Script" uid="uid://cnt01hiw52bmn" path="res://scene/entity/ux/sign_snapper.gd" id="9_03eog"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_8d3b4"] resource_local_to_scene = true -size = Vector2(10, 70) +size = Vector2(20, 70) [node name="Interactable" type="Sprite2D"] script = ExtResource("1_6nrd3") @@ -44,3 +45,12 @@ collision_layer = 0 [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] unique_name_in_owner = true shape = SubResource("RectangleShape2D_8d3b4") + +[node name="SignSnapper" type="Marker2D" parent="."] +unique_name_in_owner = true +script = ExtResource("9_03eog") +radius = 4.0 +delay_arrived = 0.1 +action_on_arrived = 4 +delay_after_action = 0.4 +metadata/_custom_type_script = "uid://cnt01hiw52bmn" diff --git a/scene/entity/local_inspectable.gd b/scene/entity/local_inspectable.gd deleted file mode 100644 index e2ce6679..00000000 --- a/scene/entity/local_inspectable.gd +++ /dev/null @@ -1,206 +0,0 @@ -@tool -extends Sprite2D - -signal start_inspecting -signal quit_inspecting -signal sign_mark_offset_updated - -# @export var entity_config: EntityConfig: -# set(value): -# entity_config = value - -enum { STATUS_NORAML, STATUS_TRANSITIONING, STATUS_INSPECTING_COVER, STATUS_INSPECTING_NOTES } - -@export var enabled := true: - set(val): - enabled = val - if is_node_ready() and not Engine.is_editor_hint(): - sign_mark.enabled = val -# sign_mark 节点在 ready 时会直接读取 -@export var sign_mark_offset := Vector2.ZERO: - set(val): - sign_mark_offset = val - sign_mark_offset_updated.emit(val) -# @export var entity_name: String = "" -@export var content_centered: bool = false -@export var action_key := 4 -@export var texture_cover: Texture2D -@export var note_sign_texture: Texture2D -@export_enum("none", "c01", "c02", "c03", "c04", "c05", "c06") var editor_filter := "none": - set(val): - editor_filter = val - if is_node_ready() and Engine.is_editor_hint(): - notify_property_list_changed() -var content_key: String = "" - -@onready var sign_mark = %Sign as Sign -@onready var sign_snapper = %SignSnapper as SignSnapper -@onready var area2d = %Area2D as Area2D - -@onready var sfx = %Sfx -@onready var container = %Container -@onready var cover_rect = %Cover as TextureRect -@onready var content_label = %ContentLabel as Label -@onready var tip_label = %TipLabel as Label - -var tip_cover_hide_notes = "Q: " + tr("ui_退出") + " " + "E: " + tr("ui_阅读") -var tip_cover_without_notes = "Q: " + tr("ui_退出") + " " + "E: " + tr("ui_检阅") -var tip_notes = "Q: " + tr("ui_退出") + " " + "E: " + tr("ui_收起") - -static var content_dialogue = ( - preload("res://asset/dialogue/inspect_content.dialogue") as DialogueResource -) - -var status := STATUS_NORAML -var blinking_tween: Tween - -var ground_archive: GroundArchive -# 尝试互动的次数 -var tried_times: int: - set(val): - tried_times = val - ground_archive.set_pair(name, "tried_times", val) - if tried_times >= 1 and sign_mark: - sign_mark.sprite2d.texture = note_sign_texture - - -func _ready() -> void: - $InspectLayer.layer = GlobalConfig.CANVAS_LAYER_PROP_INSPECTOR - container.modulate.a = 0.0 - content_label.modulate.a = 0.0 - content_label.text = _get_tr_content() - tip_label.text = tip_cover_hide_notes - cover_rect.texture = texture_cover - if Engine.is_editor_hint(): - return - sign_mark.enabled = enabled - # setup default value - ground_archive = ArchiveManager.archive.ground_archive() - tried_times = ground_archive.get_value(name, "tried_times", 0) - - if content_centered: - content_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER - # sign_mark.interacted.connect(_on_interacted) - sign_snapper.arrived.connect(_on_interacted) - sign_mark.cancel.connect(_on_cancel) - - -func _get_tr_content(): - if content_key == "": - return "" - var inspection_note = "" - # get note content - var line_id = content_dialogue.titles.get(content_key) - while line_id and line_id != "end": - var line = content_dialogue.lines[line_id] - if line.has("text"): - inspection_note += tr(line.get("text")) + "\n" - line_id = line.get("next_id") - return inspection_note - - -func _on_interacted() -> void: - if STATUS_TRANSITIONING == status: - return - if status == STATUS_NORAML: - tried_times += 1 - sfx.play() - SceneManager.focus_node(self) - SceneManager.get_camera_marker().tween_zoom(2.0) - status = STATUS_TRANSITIONING - var tween = create_tween() - tween.tween_interval(0.8) - tween.tween_property(container, "modulate:a", 1.0, 0.7) - tween.tween_callback(func(): status = STATUS_INSPECTING_COVER) - sign_mark.display_sign = false - SceneManager.freeze_player(0.0, action_key) - cover_rect.texture = texture_cover - if content_key == "": - tip_label.text = tip_cover_without_notes - else: - tip_label.text = tip_cover_hide_notes - _blink_label(true) - start_inspecting.emit() - elif status == STATUS_INSPECTING_COVER: - sfx.play() - status = STATUS_INSPECTING_NOTES - tip_label.text = tip_notes - create_tween().tween_property(content_label, "modulate:a", 1.0, 0.15) - elif status == STATUS_INSPECTING_NOTES: - sfx.play() - status = STATUS_INSPECTING_COVER - if content_key == "": - tip_label.text = tip_cover_without_notes - else: - tip_label.text = tip_cover_hide_notes - create_tween().tween_property(content_label, "modulate:a", 0.0, 0.15) - - -func _blink_label(init := true): - if status == STATUS_NORAML: - return - blinking_tween = create_tween() - if init: - blinking_tween.tween_property(tip_label, "modulate:a", 0.8, 2.0) - blinking_tween.tween_callback(_blink_label.bind(false)) - else: - blinking_tween.tween_property(tip_label, "modulate:a", 0.5, 1.0) - blinking_tween.tween_callback(_blink_label.bind(true)) - - -func _on_cancel(_body = null): - if STATUS_TRANSITIONING == status: - return - if status != STATUS_NORAML: - quit_inspecting.emit() - status = STATUS_TRANSITIONING - var tween = create_tween() - tween.tween_property(container, "modulate:a", 0.0, 0.15) - if blinking_tween and blinking_tween.is_running(): - blinking_tween.kill() - tween.parallel().tween_property(tip_label, "modulate:a", 0.0, 0.15) - tween.tween_interval(1.0) - tween.tween_callback(func(): status = STATUS_NORAML) - tween.tween_callback(func(): content_label.modulate.a = 0.0) - SceneManager.focus_player_and_reset_zoom() - SceneManager.release_player() - sign_mark.display_sign = true - - -func _set(property: StringName, value: Variant) -> bool: - if property == "content_key": - content_key = value - content_label.text = _get_tr_content() - return true - return false - - -func _get(property: StringName) -> Variant: - if property == "content_key": - return content_key - return null - - -func _get_property_list() -> Array[Dictionary]: - var titles = "" - # only show notes_ properties in editor - if Engine.is_editor_hint(): - var ordered_titles = content_dialogue.get_ordered_titles() - if editor_filter and editor_filter != "none": - var filted_titles = ordered_titles.filter(_filter_property) - if filted_titles.size() > 0: - titles = ",".join(filted_titles) - else: - titles = ",".join(ordered_titles) - return [ - { - "name": "content_key", - "type": TYPE_STRING, - "hint": PROPERTY_HINT_ENUM_SUGGESTION, - "hint_string": titles - } - ] - - -func _filter_property(property: StringName) -> bool: - return property.find(editor_filter) >= 0 diff --git a/scene/entity/local_inspectable.gd.uid b/scene/entity/local_inspectable.gd.uid deleted file mode 100644 index 7827cf0e..00000000 --- a/scene/entity/local_inspectable.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://cihyb26hjma4i diff --git a/scene/entity/local_inspectable.tscn b/scene/entity/local_inspectable.tscn deleted file mode 100644 index 3b940999..00000000 --- a/scene/entity/local_inspectable.tscn +++ /dev/null @@ -1,134 +0,0 @@ -[gd_scene load_steps=12 format=3 uid="uid://ci5anaxsa1apl"] - -[ext_resource type="Script" uid="uid://cihyb26hjma4i" path="res://scene/entity/local_inspectable.gd" id="1_85el0"] -[ext_resource type="Texture2D" uid="uid://c0rw25jl762a1" path="res://asset/art/ui/action_mark/UI眼睛.png" id="2_3pauf"] -[ext_resource type="AudioStream" uid="uid://byjcmxy5crce5" path="res://asset/audio/sfx/UI/纸条.mp3" id="3_3ldx7"] -[ext_resource type="Texture2D" uid="uid://bei1s1uucktso" path="res://asset/art/tool/neutral_point_light.webp" id="3_o562w"] -[ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="3_q18ff"] -[ext_resource type="PackedScene" uid="uid://c4tipnj1cr1j3" path="res://scene/entity/ux/sign.tscn" id="4_do8tr"] -[ext_resource type="Texture2D" uid="uid://dwgxa5j6602vv" path="res://asset/art/ui/prop/inspect文本衬底蒙版.png" id="6_q18ff"] -[ext_resource type="FontVariation" uid="uid://1ryw42kej6lv" path="res://config/font_ui.tres" id="7_ianbs"] -[ext_resource type="Texture2D" uid="uid://f186lvt5y2ql" path="res://asset/art/ui/prop/inspect背景遮罩.png" id="7_xawjo"] -[ext_resource type="Script" uid="uid://cnt01hiw52bmn" path="res://scene/entity/ux/sign_snapper.gd" id="10_mtbvd"] - -[sub_resource type="RectangleShape2D" id="RectangleShape2D_4fuic"] -resource_local_to_scene = true -size = Vector2(30, 70) - -[node name="LocalInspectable" type="Sprite2D"] -script = ExtResource("1_85el0") -note_sign_texture = ExtResource("2_3pauf") -content_key = "" - -[node name="Sfx" type="AudioStreamPlayer" parent="."] -unique_name_in_owner = true -stream = ExtResource("3_3ldx7") -bus = &"game_sfx" -script = ExtResource("3_q18ff") - -[node name="Sign" parent="." instance=ExtResource("4_do8tr")] -unique_name_in_owner = true - -[node name="PointLight2D" type="PointLight2D" parent="."] -unique_name_in_owner = true -position = Vector2(0, -35) -scale = Vector2(0.2, 0.2) -energy = 0.0 -texture = ExtResource("3_o562w") -texture_scale = 0.5 - -[node name="Area2D" type="Area2D" parent="."] -unique_name_in_owner = true -collision_layer = 0 - -[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] -unique_name_in_owner = true -shape = SubResource("RectangleShape2D_4fuic") - -[node name="InspectLayer" type="CanvasLayer" parent="."] -layer = 20 - -[node name="Root" type="Control" parent="InspectLayer"] -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -mouse_filter = 2 - -[node name="Container" type="MarginContainer" parent="InspectLayer/Root"] -unique_name_in_owner = true -modulate = Color(1, 1, 1, 0) -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -mouse_filter = 2 - -[node name="BGMask" type="TextureRect" parent="InspectLayer/Root/Container"] -layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 4 -mouse_filter = 2 -texture = ExtResource("7_xawjo") - -[node name="Cover" type="TextureRect" parent="InspectLayer/Root/Container"] -unique_name_in_owner = true -layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 4 -mouse_filter = 2 - -[node name="ContentLabel" type="Label" parent="InspectLayer/Root/Container"] -unique_name_in_owner = true -modulate = Color(1, 1, 1, 0) -z_index = 100 -custom_minimum_size = Vector2(130, 0) -layout_mode = 2 -size_flags_horizontal = 4 -vertical_alignment = 1 -autowrap_mode = 3 - -[node name="TextureRect" type="TextureRect" parent="InspectLayer/Root/Container/ContentLabel"] -self_modulate = Color(1, 1, 1, 0.733333) -show_behind_parent = true -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -mouse_filter = 2 -texture = ExtResource("6_q18ff") - -[node name="MarginContainer" type="MarginContainer" parent="InspectLayer/Root"] -layout_mode = 2 -offset_top = 263.0 -offset_right = 564.0 -offset_bottom = 316.0 -size_flags_vertical = 8 -mouse_filter = 2 -theme_override_constants/margin_bottom = 38 - -[node name="TipLabel" type="Label" parent="InspectLayer/Root/MarginContainer"] -unique_name_in_owner = true -modulate = Color(1, 1, 1, 0) -z_index = 100 -layout_mode = 2 -size_flags_horizontal = 4 -size_flags_vertical = 8 -theme_override_fonts/font = ExtResource("7_ianbs") -text = "Q: 退出 E: 阅读" -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="SignSnapper" type="Marker2D" parent="."] -unique_name_in_owner = true -script = ExtResource("10_mtbvd") -release_player_on_arrived = false -radius = 3.0 -delay_arrived = 0.2 -metadata/_custom_type_script = "uid://cnt01hiw52bmn" diff --git a/scene/entity/note.gd b/scene/entity/note.gd index 3b6559a0..4023fad5 100644 --- a/scene/entity/note.gd +++ b/scene/entity/note.gd @@ -14,6 +14,13 @@ signal sign_mark_offset_updated enabled = val if is_node_ready(): sign_mark.enabled = val +@export var collision_width_and_x := Vector2(20.0, 0): + set(val): + collision_width_and_x = val + if is_node_ready(): + var shape = area2d.get_node("CollisionShape2D").shape + shape.size.x = collision_width_and_x.x + area2d.position.x = collision_width_and_x.y @export var action := 4 #3为none; 4为lookup_wall; 之后为其他动作,请参考 PlayerAnimationConfig @export_enum("os", "ballon") var mode = "os" @export_enum("items", "c01", "c02", "c03", "c04", "c05", "c06") var dialogue := "items": @@ -70,6 +77,9 @@ var tried_times: int: func _ready() -> void: + var shape = area2d.get_node("CollisionShape2D").shape + shape.size.x = collision_width_and_x.x + area2d.position.x = collision_width_and_x.y if Engine.is_editor_hint(): notify_property_list_changed() return diff --git a/scene/entity/npc.gd b/scene/entity/npc.gd index 84c814c6..f15b15db 100644 --- a/scene/entity/npc.gd +++ b/scene/entity/npc.gd @@ -3,6 +3,9 @@ class_name Npc2D extends AnimatedSprite2D signal interacted +# <0 means no walk to edge +@export var walk_to_edge_width := 25.0 +@export var action_key := 4 @export var enabled := true: set(val): enabled = val @@ -13,10 +16,17 @@ signal interacted height = val if is_node_ready(): speaking_sign.position.y = -height - +@export var collision_width_and_x := Vector2(20.0, 0): + set(val): + collision_width_and_x = val + if is_node_ready(): + var shape = area2d.get_node("CollisionShape2D").shape + shape.size.x = collision_width_and_x.x + area2d.position.x = collision_width_and_x.y @onready var speaking_animation = %SpeakingAnimationPlayer @onready var speaking_sign = %SpeakingSign2D as Node2D @onready var sign_mark = %Sign as Sign +@onready var sign_snapper = %SignSnapper as SignSnapper @onready var area2d = %Area2D as Area2D var dialogue_title := "" @@ -25,8 +35,13 @@ var dialogue_res = preload("res://asset/dialogue/npc.dialogue") var base_scale := Vector2.ONE var base_mod := Color.WHITE_SMOKE + func _ready() -> void: speaking_sign.position.y = -height + var shape = area2d.get_node("CollisionShape2D").shape + shape.size.x = collision_width_and_x.x + area2d.position.x = collision_width_and_x.y + sign_snapper.action_on_arrived = action_key if Engine.is_editor_hint(): # editor 直接展示 speaking_sign.visible = true @@ -38,7 +53,12 @@ func _ready() -> void: base_mod = speaking_sign.modulate area2d.body_entered.connect(_on_entered) area2d.body_exited.connect(_on_exited) - sign_mark.interacted.connect(_on_interacted) + if walk_to_edge_width >= 0: + sign_snapper.radius = walk_to_edge_width + sign_snapper.arrived.connect(_on_interacted) + else: + sign_snapper.enabled = false + sign_mark.interacted.connect(_on_interacted) # sign_mark.cancel.connect(_stop_speaking) sign_mark.toggle_active.connect(_on_toggle_active) _check_sign_mark_enable() @@ -55,10 +75,12 @@ func _check_sign_mark_enable(): speaking_sign.visible = enabled sign_mark.enabled = enabled and visible + func _on_entered(_body = null) -> void: var tween = create_tween() tween.tween_property(speaking_sign, "modulate:a", 1.0, 0.5) + func _on_exited(_body = null) -> void: var tween = create_tween() tween.tween_property(speaking_sign, "modulate:a", 0.0, 0.5) @@ -70,8 +92,10 @@ func _on_toggle_active(activated: bool) -> void: else: _stop_speaking() + var speaking := false + func _on_interacted() -> void: if speaking: return diff --git a/scene/entity/npc.tscn b/scene/entity/npc.tscn index a2dccb9f..e14ccd18 100644 --- a/scene/entity/npc.tscn +++ b/scene/entity/npc.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=15 format=3 uid="uid://0sofmhrl358m"] +[gd_scene load_steps=16 format=3 uid="uid://0sofmhrl358m"] [ext_resource type="Script" uid="uid://cqd5dqafxnwl1" path="res://scene/entity/npc.gd" id="1_jegr2"] [ext_resource type="AudioStream" uid="uid://cvttds81trcoc" path="res://asset/audio/sfx/UI/click.wav" id="3_7lwt5"] @@ -7,6 +7,7 @@ [ext_resource type="Texture2D" uid="uid://bwt5nxyncfuqu" path="res://asset/art/ui/action_mark/说话标识1.png" id="5_foitt"] [ext_resource type="Texture2D" uid="uid://8bnn3s72o87y" path="res://asset/art/ui/action_mark/说话标识2.png" id="6_2n6ge"] [ext_resource type="Texture2D" uid="uid://by0rbde26tyn5" path="res://asset/art/ui/action_mark/说话标识3.png" id="7_afjxr"] +[ext_resource type="Script" uid="uid://cnt01hiw52bmn" path="res://scene/entity/ux/sign_snapper.gd" id="8_7lwt5"] [sub_resource type="Animation" id="Animation_soodi"] length = 0.001 @@ -122,11 +123,12 @@ animations = [{ [sub_resource type="RectangleShape2D" id="RectangleShape2D_4fuic"] resource_local_to_scene = true -size = Vector2(30, 100) +size = Vector2(25, 100) [node name="Npc" type="AnimatedSprite2D"] light_mask = 5 script = ExtResource("1_jegr2") +collision_width_and_x = Vector2(25, 0) dialogue_title = "" [node name="Sfx" type="AudioStreamPlayer" parent="."] @@ -174,3 +176,14 @@ collision_layer = 0 [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] unique_name_in_owner = true shape = SubResource("RectangleShape2D_4fuic") + +[node name="SignSnapper" type="Marker2D" parent="."] +unique_name_in_owner = true +script = ExtResource("8_7lwt5") +release_player_on_arrived = false +radius = 20.0 +walk_to_edge = true +delay_arrived = 0.1 +action_on_arrived = 4 +delay_after_action = 0.4 +metadata/_custom_type_script = "uid://cnt01hiw52bmn" diff --git a/scene/entity/pickable.gd b/scene/entity/pickable.gd index b5f826e9..c9b58f27 100644 --- a/scene/entity/pickable.gd +++ b/scene/entity/pickable.gd @@ -17,12 +17,20 @@ signal sign_mark_offset_updated _check_sign_display() # 除了 picked 必然隐藏,其他情况下跟随 enabled 状态 @export var visible_follow_enabled := true +@export var collision_width_and_x := Vector2(20.0, 0): + set(val): + collision_width_and_x = val + if is_node_ready(): + var shape = area2d.get_node("CollisionShape2D").shape + shape.size.x = collision_width_and_x.x + area2d.position.x = collision_width_and_x.y var prop_key := "" @onready var sfx = $Sfx as Sfx @onready var sign_mark := %Sign as Sign -@onready var area := %Area2D as Area2D +@onready var sign_snapper = %SignSnapper as SignSnapper +@onready var area2d := %Area2D as Area2D var ground_archive: GroundArchive var picked: bool: set(val): @@ -47,6 +55,9 @@ func enable_with_ease(duration := 1.0): # Called when the node enters the scene tree for the first time. func _ready() -> void: + var shape = area2d.get_node("CollisionShape2D").shape + shape.size.x = collision_width_and_x.x + area2d.position.x = collision_width_and_x.y if Engine.is_editor_hint(): var animation_player = _get_animation_player() # 更新 hook_animation 的可选项 @@ -61,7 +72,7 @@ func _ready() -> void: if picked: if GlobalConfig.DEBUG: print("Prop has picked, name=", name, " key=", prop_key) - sign_mark.interacted.connect(_interacted) + sign_snapper.arrived.connect(_interacted) func _check_sign_display(): diff --git a/scene/entity/pickable.tscn b/scene/entity/pickable.tscn index 172400e9..e1c0e6d7 100644 --- a/scene/entity/pickable.tscn +++ b/scene/entity/pickable.tscn @@ -1,14 +1,15 @@ -[gd_scene load_steps=7 format=3 uid="uid://dsa6frlw6e6gg"] +[gd_scene load_steps=8 format=3 uid="uid://dsa6frlw6e6gg"] [ext_resource type="Script" uid="uid://cd3tb2he77vv4" path="res://scene/entity/pickable.gd" id="1_jk1u0"] [ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="3_1h8r3"] [ext_resource type="AudioStream" uid="uid://dutk2d7nilv3m" path="res://asset/audio/sfx/UI/令牌道具获取.wav" id="3_dxdbj"] [ext_resource type="PackedScene" uid="uid://c4tipnj1cr1j3" path="res://scene/entity/ux/sign.tscn" id="4_44f4h"] [ext_resource type="Texture2D" uid="uid://bei1s1uucktso" path="res://asset/art/tool/neutral_point_light.webp" id="5_yhysn"] +[ext_resource type="Script" uid="uid://cnt01hiw52bmn" path="res://scene/entity/ux/sign_snapper.gd" id="6_4qt5l"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_k6och"] resource_local_to_scene = true -size = Vector2(10, 60) +size = Vector2(20, 60) [node name="Pickable" type="Sprite2D"] script = ExtResource("1_jk1u0") @@ -37,3 +38,12 @@ collision_layer = 0 [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] shape = SubResource("RectangleShape2D_k6och") + +[node name="SignSnapper" type="Marker2D" parent="."] +unique_name_in_owner = true +script = ExtResource("6_4qt5l") +radius = 10.0 +delay_arrived = 0.1 +action_on_arrived = 4 +delay_after_action = 0.4 +metadata/_custom_type_script = "uid://cnt01hiw52bmn" diff --git a/scene/entity/portal.gd b/scene/entity/portal.gd index 64389527..22ee3a7a 100644 --- a/scene/entity/portal.gd +++ b/scene/entity/portal.gd @@ -9,6 +9,13 @@ signal sign_mark_offset_updated set(val): sign_mark_offset = val sign_mark_offset_updated.emit(val) +@export var collision_width_and_x := Vector2(20.0, 0): + set(val): + collision_width_and_x = val + if is_node_ready(): + var shape = area2d.get_node("CollisionShape2D").shape + shape.size.x = collision_width_and_x.x + area2d.position.x = collision_width_and_x.y @export_multiline var debug_note: String = "" @export var enabled := true: set(val): @@ -58,6 +65,7 @@ var prop_key := "" # 门被锁定,无法打开的音效 @onready var sfx_locked = %SfxLocked as Sfx @onready var sign_mark = %Sign as Sign +@onready var sign_snapper = %SignSnapper as SignSnapper @onready var area2d = %Area2D as Area2D var activated := false @@ -76,6 +84,9 @@ var tried_times: int: # Called when the node enters the scene tree for the first time. func _ready() -> void: name = "portal_" + portal_name + var shape = area2d.get_node("CollisionShape2D").shape + shape.size.x = collision_width_and_x.x + area2d.position.x = collision_width_and_x.y if Engine.is_editor_hint(): _check_sign_mark_and_texture() _reload_items() @@ -88,7 +99,7 @@ func _ready() -> void: _check_sign_mark_and_texture() area2d.body_entered.connect(_reset) area2d.body_exited.connect(_on_cancel) - sign_mark.interacted.connect(_on_interacted) + sign_snapper.arrived.connect(_on_interacted) sign_mark.cancel.connect(_on_cancel) @@ -107,14 +118,18 @@ func _reload_items() -> void: func _check_sign_mark_and_texture(): if not is_node_ready(): - return + return + # 切换自身 texture if status == "opened" and opened_texture: texture = opened_texture elif default_texture: texture = default_texture + # 切换 sign_mark texture, 同时设置 sign_snapper 的 action if status == "default": sign_mark.sprite2d.texture = default_sign_texture + sign_snapper.action_on_arrived = 3 else: + sign_snapper.action_on_arrived = 4 # holding 状态下,同样显示 unrevealed_sign_texture if tried_times == 0 or holding: sign_mark.sprite2d.texture = unrevealed_sign_texture @@ -124,6 +139,7 @@ func _check_sign_mark_and_texture(): sign_mark.sprite2d.texture = locked_sign_texture "opened": sign_mark.sprite2d.texture = opened_sign_texture + # 设置 sign_mark 启用状态 if target_portal == "none" or not enabled: sign_mark.enabled = false else: diff --git a/scene/entity/portal.tscn b/scene/entity/portal.tscn index 0bc3a3d2..5f460081 100644 --- a/scene/entity/portal.tscn +++ b/scene/entity/portal.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=13 format=3 uid="uid://61pis75a8fdq"] +[gd_scene load_steps=14 format=3 uid="uid://61pis75a8fdq"] [ext_resource type="Script" uid="uid://b2dvvhawm820r" path="res://scene/entity/portal.gd" id="1_jyh6v"] [ext_resource type="Texture2D" uid="uid://bc4lpa8aao60n" path="res://asset/art/ui/action_mark/传送.png" id="2_ay30q"] @@ -11,14 +11,16 @@ [ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="6_bxihn"] [ext_resource type="AudioStream" uid="uid://c1eftumrd4mgw" path="res://asset/audio/sfx/交互/开门.wav" id="6_p48ld"] [ext_resource type="AudioStream" uid="uid://inmdv5gqqius" path="res://asset/audio/sfx/UI/门锁互动.mp3" id="7_bjcty"] +[ext_resource type="Script" uid="uid://cnt01hiw52bmn" path="res://scene/entity/ux/sign_snapper.gd" id="12_bxihn"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_munml"] resource_local_to_scene = true -size = Vector2(25, 130) +size = Vector2(30, 130) [node name="portal_left" type="Sprite2D"] script = ExtResource("1_jyh6v") sign_mark_offset = Vector2(0, -50) +collision_width_and_x = Vector2(30, 0) unrevealed_sign_texture = ExtResource("2_fr7ak") default_sign_texture = ExtResource("2_bxihn") opened_sign_texture = ExtResource("2_bxihn") @@ -68,3 +70,13 @@ unique_name_in_owner = true [node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] shape = SubResource("RectangleShape2D_munml") + +[node name="SignSnapper" type="Marker2D" parent="."] +unique_name_in_owner = true +script = ExtResource("12_bxihn") +release_player_on_arrived = false +radius = 10.0 +delay_arrived = 0.1 +action_on_arrived = 4 +delay_after_action = 0.4 +metadata/_custom_type_script = "uid://cnt01hiw52bmn" diff --git a/scene/entity/ux/sign_snapper.gd b/scene/entity/ux/sign_snapper.gd index bcc6cb8c..ca2ab0b1 100644 --- a/scene/entity/ux/sign_snapper.gd +++ b/scene/entity/ux/sign_snapper.gd @@ -4,13 +4,18 @@ class_name SignSnapper signal arrived +@export var enabled := true @export var release_player_on_arrived := true # 仅使用 x 坐标;否则也用 y 进行 walk to @export var use_x_only := true # x 左右有效范围 @export_range(0.0, 20.0, 0.1) var radius := 0.0 +# 让玩家走到边缘,特别适用于 npc 对话等情景 +@export var walk_to_edge := false # arrived 延时 @export_range(0.0, 10.0, 0.1) var delay_arrived := 0.0 +@export var action_on_arrived := 3 +@export_range(0.0, 10.0, 0.1) var delay_after_action := 0.0 @export_tool_button("debug 检查玩家触发位置") var debug_check_player_pos = _debug_check_player_pos var detacted_sign: Sign @@ -31,15 +36,26 @@ func _ready(): func _on_interacted(): - if not detacted_sign: + if not detacted_sign or not enabled: return var player = SceneManager.get_player() var target_pos = global_position if use_x_only: target_pos.y = player.global_position.y + var player_x = player.global_position.x + if (radius > 0 and absf(target_pos.x - player_x) > radius) or walk_to_edge: + # clamp in range + if target_pos.x > player_x: + target_pos.x -= radius + else: + target_pos.x += radius var tween = player.walk_to(target_pos, release_player_on_arrived) if delay_arrived > 0: tween.tween_interval(delay_arrived) + if action_on_arrived != 3: + tween.tween_callback(SceneManager.player_action.bind(action_on_arrived)) + if delay_after_action > 0: + tween.tween_interval(delay_after_action) tween.tween_callback(arrived.emit) diff --git a/scene/ground/scene/c01/s05_院长房间.tscn b/scene/ground/scene/c01/s05_院长房间.tscn index f236e0d0..f1f56d54 100644 --- a/scene/ground/scene/c01/s05_院长房间.tscn +++ b/scene/ground/scene/c01/s05_院长房间.tscn @@ -717,7 +717,7 @@ default_texture = ExtResource("4_gdhoy") [node name="床" parent="Ground/DeployLayer" index="2" instance=ExtResource("10_18v0g")] position = Vector2(84, 50) texture = ExtResource("7_xakd0") -sign_mark_offset = Vector2(0, -17.59) +sign_mark_offset = Vector2(0, -17.22) enabled = false title_filter = "c01" note_key = "c01_院长床" @@ -725,7 +725,7 @@ note_key = "c01_院长床" [node name="桌椅" parent="Ground/DeployLayer" index="3" instance=ExtResource("10_18v0g")] position = Vector2(155, 45.5094) texture = ExtResource("9_x837o") -sign_mark_offset = Vector2(0, -4.6) +sign_mark_offset = Vector2(0, -16.45) title_filter = "c01" note_key = "c01_院长书桌" @@ -738,6 +738,7 @@ note_key = "c01_倾斜的洋相片" [node name="座钟" parent="Ground/DeployLayer" index="5" instance=ExtResource("10_18v0g")] position = Vector2(335, 20) +sign_mark_offset = Vector2(0, 2.3) title_filter = "c01" note_key = "c01_院长座钟" @@ -794,7 +795,9 @@ frame = 9 [node name="钢琴" parent="Ground/DeployLayer" index="10" instance=ExtResource("14_lq1ou")] position = Vector2(414, 51) texture = ExtResource("8_mnduo") -sign_mark_offset = Vector2(0.95, -1.35) +sign_mark_offset = Vector2(4.12, -17.54) +enable_snapper = false +collision_width_and_x = Vector2(49.03, 0) mute_when_interacted = true mute_when_invalid = true one_shot = false diff --git a/scene/ground/scene/c01/s11_黄包车演出.tscn b/scene/ground/scene/c01/s11_黄包车演出.tscn index 67ed47ae..74428198 100644 --- a/scene/ground/scene/c01/s11_黄包车演出.tscn +++ b/scene/ground/scene/c01/s11_黄包车演出.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=31 format=3 uid="uid://coiumaaenimbc"] +[gd_scene load_steps=32 format=3 uid="uid://coiumaaenimbc"] [ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_1sveo"] [ext_resource type="Script" uid="uid://dcn7u7v3fsscj" path="res://scene/ground/scene/c01/s11_animation.gd" id="2_espm6"] @@ -12,6 +12,7 @@ [ext_resource type="AudioStream" uid="uid://b8rg7adnnkjll" path="res://asset/audio/BGM/戏曲声.wav" id="6_68ynl"] [ext_resource type="SpriteFrames" uid="uid://bk54qlc8dr5xr" path="res://asset/art/gif/c01_黄包车长场景/c01_黄包车长场景_frames.tres" id="7_wo6md"] [ext_resource type="AudioStream" uid="uid://bi6gm533oqsa" path="res://asset/audio/BGM/街道背景音.wav" id="7_yajus"] +[ext_resource type="Texture2D" uid="uid://c7m10rk4cw3lf" path="res://asset/art/scene/c01/s09_黄包车长场景/bg_夜晚黄包车场景.jpg" id="8_yajus"] [ext_resource type="Script" uid="uid://dvmw38syi54l3" path="res://scene/ground/script/c01/s11_路灯序列.gd" id="9_6p5hp"] [ext_resource type="Texture2D" uid="uid://cg1ey0l55acvs" path="res://asset/art/scene/c01/s09_黄包车长场景/e_单个路灯.png" id="9_u6881"] [ext_resource type="Texture2D" uid="uid://cgsq1im2q63f8" path="res://asset/art/scene/c01/s09_黄包车长场景/e_路灯灯芯.png" id="11_2w2ir"] @@ -180,9 +181,11 @@ metadata/_custom_type_script = "uid://rq6w1vuhuq1m" [node name="BGSprite2D" parent="Ground" index="1"] position = Vector2(-12, 2) -offset = Vector2(0, -646) +texture = ExtResource("8_yajus") +offset = Vector2(-4, -627) [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Ground/BGSprite2D" index="0"] +visible = false position = Vector2(-4, -5) sprite_frames = ExtResource("7_wo6md") animation = &"bg_黄包车场景" diff --git a/scene/ground/scene/c02/s01_公寓门口.tscn b/scene/ground/scene/c02/s01_公寓门口.tscn index 47e9b4eb..b35dc565 100644 --- a/scene/ground/scene/c02/s01_公寓门口.tscn +++ b/scene/ground/scene/c02/s01_公寓门口.tscn @@ -6,7 +6,7 @@ [ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="4_vc2dw"] [ext_resource type="Texture2D" uid="uid://d05pqud4yoxx3" path="res://asset/art/scene/c02/s01_公寓门口/bg_公寓门口.png" id="5_j2ctx"] [ext_resource type="PackedScene" uid="uid://jr1yd46wm5je" path="res://scene/entity/note.tscn" id="6_bhi7l"] -[ext_resource type="PackedScene" uid="uid://ci5anaxsa1apl" path="res://scene/entity/local_inspectable.tscn" id="7_vc2dw"] +[ext_resource type="PackedScene" uid="uid://ci5anaxsa1apl" path="res://scene/entity/inspectable.tscn" id="7_vc2dw"] [ext_resource type="Texture2D" uid="uid://qls0yc054048" path="res://asset/art/scene/c02/小蝉寻人启事/e_寻人启事残破.png" id="8_j2ctx"] [ext_resource type="Texture2D" uid="uid://cuyfloebe2mht" path="res://asset/art/scene/c02/小蝉寻人启事/ux_寻人启事残破.png" id="9_bhi7l"] diff --git a/scene/ground/scene/c02/s02_过道.tscn b/scene/ground/scene/c02/s02_过道.tscn index fc2b0350..02cc0af4 100644 --- a/scene/ground/scene/c02/s02_过道.tscn +++ b/scene/ground/scene/c02/s02_过道.tscn @@ -17,7 +17,7 @@ [ext_resource type="Texture2D" uid="uid://bt37pw8hhgsec" path="res://asset/art/prop/c02/海报(小)/剪辫子侦探.png" id="10_jg8g0"] [ext_resource type="PackedScene" uid="uid://cuuej0j8q5ixu" path="res://scene/ground/script/c02/刮海报_过道.tscn" id="11_jg8g0"] [ext_resource type="AudioStream" uid="uid://dq2ndg5yd3rps" path="res://asset/audio/sfx/旧版/c02/出现.mp3" id="11_u68d7"] -[ext_resource type="PackedScene" uid="uid://ci5anaxsa1apl" path="res://scene/entity/local_inspectable.tscn" id="12_0fckv"] +[ext_resource type="PackedScene" uid="uid://ci5anaxsa1apl" path="res://scene/entity/inspectable.tscn" id="12_0fckv"] [ext_resource type="PackedScene" uid="uid://cw3q5pvciumil" path="res://scene/entity/interactable.tscn" id="13_ck13g"] [ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="14_jg8g0"] [ext_resource type="Texture2D" uid="uid://cyctvbeqxqvpb" path="res://asset/art/prop/c02/海报特写/青岛啤酒.png" id="16_vqhm5"] @@ -122,17 +122,20 @@ position = Vector2(203, -31) sign_mark_offset = Vector2(-1.58, 8.6) content_centered = true texture_cover = ExtResource("7_jg8g0") +content_key = "c02_海报1" [node name="Closeup刮海报" parent="Ground/DeployLayer" index="6" instance=ExtResource("19_6wwyd")] position = Vector2(253, -31) texture = ExtResource("10_jg8g0") first_interact_os_key = "c02_海报_剪辫子侦探" packed_scene = ExtResource("11_jg8g0") +enable_snapper = true [node name="青岛啤酒" parent="Ground/DeployLayer" index="7" instance=ExtResource("12_0fckv")] position = Vector2(253, -31) enabled = false texture_cover = ExtResource("16_vqhm5") +content_key = "c02_青岛啤酒" [node name="鼠疫海报" parent="Ground/DeployLayer" index="8" instance=ExtResource("12_0fckv")] position = Vector2(439, -29) @@ -209,10 +212,16 @@ hook_method = "check_if_show_shoes" position = Vector2(122, -15) gaslight_energy = 2.0 gaslight_ground_energy = 0.0 +collision_width_and_x = true +one_shot = false +one_shot_max_times = true +disable_prop_after_interacted = 1 +interacted_texture = false [node name="Closeup八音盒" parent="Ground/DeployLayer" index="17" instance=ExtResource("19_6wwyd")] position = Vector2(533, 65) packed_scene = ExtResource("10_ifae7") +enable_snapper = true [node name="Sprite2D" type="Sprite2D" parent="Ground/DeployLayer/Closeup八音盒"] visible = false diff --git a/scene/ground/scene/c02/s03_animation.gd b/scene/ground/scene/c02/s03_animation.gd index 7d649d2e..6535ce05 100644 --- a/scene/ground/scene/c02/s03_animation.gd +++ b/scene/ground/scene/c02/s03_animation.gd @@ -296,9 +296,9 @@ func run_away(): player.visible = false var ambush_xiaochan = burning_layer.get_node("Ambush等待的小蝉") ambush_xiaochan.enabled = false - var node = burning_layer.get_node("牵手跑") as Node2D + var node = burning_layer.get_node("牵手跑") as Node2D var sprite_together = node.get_node("牵手跑动画") as AnimatedSprite2D - sprite_together.visible = true + node.visible = true SceneManager.get_camera_marker().focus_node(sprite_together) player.reparent_light(sprite_together) # 牵手动作 @@ -308,6 +308,7 @@ func run_away(): await sprite_together.animation_finished sprite_xiaochan.visible = false sprite_together.play("一起牵手跑步") + node.get_node("Sfx2D跑步").play() # 一起跑 var tween = create_tween() tween.tween_property(node, "global_position:x", 20.0, 18.0) diff --git a/scene/ground/scene/c02/s03_院子.tscn b/scene/ground/scene/c02/s03_院子.tscn index 35000d9c..369c3f37 100644 --- a/scene/ground/scene/c02/s03_院子.tscn +++ b/scene/ground/scene/c02/s03_院子.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=73 format=3 uid="uid://djc2uaefhmu7"] +[gd_scene load_steps=78 format=3 uid="uid://djc2uaefhmu7"] [ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_0dylx"] [ext_resource type="Script" uid="uid://dsp5plrdkrsd7" path="res://scene/ground/scene/c02/s03_animation.gd" id="2_dt5aj"] @@ -52,6 +52,9 @@ [ext_resource type="SpriteFrames" uid="uid://b0icyhxpj16tv" path="res://asset/art/gif/c02_谢幕演出/c02_谢幕演出_frames.tres" id="39_rnk1v"] [ext_resource type="AudioStream" uid="uid://dxoj6vg0wrj0j" path="res://asset/audio/peiyin_new/c02/c02_8小男孩童谣.wav" id="46_qqdxs"] [ext_resource type="Script" uid="uid://cnt01hiw52bmn" path="res://scene/entity/ux/sign_snapper.gd" id="51_vddfx"] +[ext_resource type="AudioStream" uid="uid://bxp3f263aaqkp" path="res://asset/audio/sfx/脚步/02_室外_1.wav" id="52_qqdxs"] +[ext_resource type="AudioStream" uid="uid://dwa7xdvg5o0i" path="res://asset/audio/sfx/脚步/02_室外_3.wav" id="53_jhod7"] +[ext_resource type="AudioStream" uid="uid://d3h0xe0qtai18" path="res://asset/audio/sfx/脚步/02_室外_2.wav" id="54_lq23y"] [ext_resource type="Script" uid="uid://wapo47a1oddf" path="res://scene/entity/audio/sfx2d.gd" id="54_o1qbs"] [sub_resource type="Animation" id="Animation_rt2lh"] @@ -190,7 +193,7 @@ height = 300 [sub_resource type="RectangleShape2D" id="RectangleShape2D_er6ob"] resource_local_to_scene = true -size = Vector2(40, 70) +size = Vector2(20, 70) [sub_resource type="RectangleShape2D" id="RectangleShape2D_mdix7"] size = Vector2(5, 100) @@ -221,10 +224,6 @@ animations = [{ "speed": 4.0 }] -[sub_resource type="RectangleShape2D" id="RectangleShape2D_2y8cu"] -resource_local_to_scene = true -size = Vector2(30, 100) - [sub_resource type="RectangleShape2D" id="RectangleShape2D_bbhbr"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_d7h4s"] @@ -236,6 +235,28 @@ size = Vector2(250, 50) [sub_resource type="RectangleShape2D" id="RectangleShape2D_vddfx"] size = Vector2(20, 100) +[sub_resource type="AudioStreamSynchronized" id="AudioStreamSynchronized_qt2qg"] +stream_count = 2 +stream_0/stream = ExtResource("52_qqdxs") +stream_0/volume = 0.0 +stream_1/stream = ExtResource("53_jhod7") +stream_1/volume = 0.0 + +[sub_resource type="AudioStreamSynchronized" id="AudioStreamSynchronized_2b6vx"] +stream_count = 2 +stream_0/stream = ExtResource("54_lq23y") +stream_0/volume = 0.0 +stream_1/stream = ExtResource("52_qqdxs") +stream_1/volume = 0.0 + +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_fxne6"] +playback_mode = 1 +random_pitch = 2.0 +random_volume_offset_db = 1.0 +streams_count = 2 +stream_0/stream = SubResource("AudioStreamSynchronized_qt2qg") +stream_1/stream = SubResource("AudioStreamSynchronized_2b6vx") + [sub_resource type="Gradient" id="Gradient_em2ma"] offsets = PackedFloat32Array(0.00928382, 0.681698, 1) colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0) @@ -514,7 +535,11 @@ texture = ExtResource("6_1tart") position = Vector2(290, 1) gaslight_energy = 1.5 gaslight_ground_energy = 0.7 +collision_width_and_x = true mute_when_interacted = false +one_shot = false +disable_prop_after_interacted = true +interacted_texture = false [node name="煤油灯2" parent="Ground/DeployLayer" index="17" instance=ExtResource("10_jme4f")] position = Vector2(610, 1) @@ -522,7 +547,11 @@ gaslight_texture = ExtResource("11_g0qhj") ground_light_texture = ExtResource("12_ni5ro") gaslight_energy = 1.5 gaslight_ground_energy = 0.7 +collision_width_and_x = true mute_when_interacted = false +one_shot = false +disable_prop_after_interacted = true +interacted_texture = false [node name="煤油灯3" parent="Ground/DeployLayer" index="18" instance=ExtResource("10_jme4f")] position = Vector2(857, 1) @@ -530,7 +559,11 @@ gaslight_texture = ExtResource("13_hw832") ground_light_texture = ExtResource("14_7pq5y") gaslight_energy = 1.5 gaslight_ground_energy = 0.7 +collision_width_and_x = true mute_when_interacted = false +one_shot = false +disable_prop_after_interacted = true +interacted_texture = false [node name="井" type="Sprite2D" parent="Ground/DeployLayer" index="19"] self_modulate = Color(0.739288, 0.739288, 0.739288, 1) @@ -548,11 +581,14 @@ texture = ExtResource("22_3y5s5") [node name="Closeup敲门游戏" parent="Ground/DeployLayer" index="21" instance=ExtResource("23_81juy")] position = Vector2(466, 3) packed_scene = ExtResource("24_0o4rt") +enable_snapper = true +collision_width_and_x = Vector2(40, 0) [node name="Closeup井" parent="Ground/DeployLayer" index="22" instance=ExtResource("23_81juy")] z_index = 6 position = Vector2(2063, 50) packed_scene = ExtResource("26_yy4fp") +enable_snapper = true [node name="Ambush惊悚闪电" parent="Ground/DeployLayer" index="23" instance=ExtResource("25_iyaiw")] position = Vector2(1319, 40) @@ -576,20 +612,14 @@ position = Vector2(2037, 67) sprite_frames = ExtResource("4_gd6xp") animation = &"疯子看井" frame_progress = 0.298829 +walk_to_edge_width = -1.0 +action_key = 3 height = 49.11 +collision_width_and_x = Vector2(37.08, 0) dialogue_title = "c02_s11_井边疯子对话" -[node name="SpeakingSign2D" parent="Ground/DeployLayer/Npc井边疯子" index="4"] -position = Vector2(0, -49.11) - -[node name="Area2D" parent="Ground/DeployLayer/Npc井边疯子" index="5"] -position = Vector2(-11, -2) - -[node name="CollisionShape2D" parent="Ground/DeployLayer/Npc井边疯子/Area2D" index="0"] -shape = SubResource("RectangleShape2D_2y8cu") - [node name="StaticBody2D" type="StaticBody2D" parent="Ground/DeployLayer/Npc井边疯子"] -position = Vector2(2, 3) +position = Vector2(11, 7) collision_layer = 2 [node name="CollisionShape2D" type="CollisionShape2D" parent="Ground/DeployLayer/Npc井边疯子/StaticBody2D"] @@ -863,14 +893,14 @@ move_configs = Array[Dictionary]([{ [node name="Ambush等待的小蝉" parent="Ground/DeployLayer/火灾" instance=ExtResource("25_iyaiw")] position = Vector2(2142, 71) -sign_mark_offset = Vector2(19.04, -38.54) +sign_mark_offset = Vector2(13.57, -39.84) enabled = false trigger_mode = "interact" one_shot = false [node name="小婵呼吸" type="AnimatedSprite2D" parent="Ground/DeployLayer/火灾/Ambush等待的小蝉"] z_index = 9 -position = Vector2(21, -32) +position = Vector2(16, -36) sprite_frames = ExtResource("39_rnk1v") animation = &"小婵呼吸_牵手前" autoplay = "小婵呼吸_牵手前" @@ -881,19 +911,27 @@ script = ExtResource("51_vddfx") metadata/_custom_type_script = "uid://cnt01hiw52bmn" [node name="牵手跑" type="AnimatableBody2D" parent="Ground/DeployLayer/火灾"] +visible = false position = Vector2(2133, 46) collision_layer = 4 [node name="牵手跑动画" parent="Ground/DeployLayer/火灾/牵手跑" instance=ExtResource("33_ycojw")] -visible = false z_index = 5 -position = Vector2(17, -6) +position = Vector2(17, -11) sprite_frames = ExtResource("39_rnk1v") -animation = &"一起牵手跑步" +animation = &"吕萍牵手动作" [node name="CollisionShape2D" type="CollisionShape2D" parent="Ground/DeployLayer/火灾/牵手跑"] shape = SubResource("RectangleShape2D_vddfx") +[node name="Sfx2D跑步" type="AudioStreamPlayer2D" parent="Ground/DeployLayer/火灾/牵手跑"] +stream = SubResource("AudioStreamRandomizer_fxne6") +volume_db = 3.0 +bus = &"game_sfx" +script = ExtResource("54_o1qbs") +loop = true +metadata/_custom_type_script = "uid://wapo47a1oddf" + [node name="Interactable柜子" parent="Ground/DeployLayer" index="29" instance=ExtResource("8_xt8j0")] visible = false position = Vector2(1772, 48) @@ -946,4 +984,3 @@ blend_mode = 1 [editable path="Ground"] [editable path="Ground/DeployLayer/Interactable铁门"] [editable path="Ground/DeployLayer/Interactable铁门/Sign"] -[editable path="Ground/DeployLayer/Npc井边疯子"] diff --git a/scene/ground/scene/c02/s04_保卫科.tscn b/scene/ground/scene/c02/s04_保卫科.tscn index 0b09eb73..27d45738 100644 --- a/scene/ground/scene/c02/s04_保卫科.tscn +++ b/scene/ground/scene/c02/s04_保卫科.tscn @@ -22,7 +22,7 @@ [sub_resource type="RectangleShape2D" id="RectangleShape2D_gk1h4"] resource_local_to_scene = true -size = Vector2(5, 70) +size = Vector2(20, 70) [node name="S04" type="Node2D"] @@ -88,16 +88,19 @@ texture = ExtResource("6_gk1h4") [node name="Closeup折锡纸" parent="Ground/DeployLayer" index="3" instance=ExtResource("6_66gue")] position = Vector2(189, 15) packed_scene = ExtResource("7_fvlg0") +enable_snapper = null [node name="Closeup老鼠精" parent="Ground/DeployLayer" index="4" instance=ExtResource("6_66gue")] position = Vector2(207.5, -40.5) texture = ExtResource("11_ffvrp") packed_scene = ExtResource("8_cm3g6") +enable_snapper = null [node name="Closeup花名册" parent="Ground/DeployLayer" index="5" instance=ExtResource("6_66gue")] -position = Vector2(345, 31) +position = Vector2(351, 31) first_interact_os_key = "c02_保卫科花名册os" packed_scene = ExtResource("6_fvlg0") +enable_snapper = null [node name="煤油灯" parent="Ground/DeployLayer" index="6" instance=ExtResource("8_wpvss")] position = Vector2(370, 39) @@ -105,6 +108,7 @@ animation_low_mode = true hide_texture = true gaslight_texture = ExtResource("9_a43aq") ground_light_texture = ExtResource("10_svuj3") +enable_snapper = null [node name="CollisionShape2D" parent="Ground/DeployLayer/煤油灯/Area2D" index="0"] shape = SubResource("RectangleShape2D_gk1h4") diff --git a/scene/ground/scene/c02/s05_一楼内侧楼道.tscn b/scene/ground/scene/c02/s05_一楼内侧楼道.tscn index e263f80e..daa3c926 100644 --- a/scene/ground/scene/c02/s05_一楼内侧楼道.tscn +++ b/scene/ground/scene/c02/s05_一楼内侧楼道.tscn @@ -204,6 +204,7 @@ texture = ExtResource("8_mrltr") [node name="Closeup戏台" parent="Ground/DeployLayer" index="6" instance=ExtResource("10_2yvhw")] position = Vector2(320, 23) packed_scene = ExtResource("11_2yvhw") +enable_snapper = null [node name="Note一楼内侧通道" parent="Ground/DeployLayer" index="7" instance=ExtResource("10_8t4w6")] position = Vector2(394, 26) @@ -221,6 +222,7 @@ texture = ExtResource("15_s2g5k") [node name="Interactable粘鼠板" parent="Ground/DeployLayer" index="10" instance=ExtResource("13_uj0pt")] position = Vector2(604, 81) +enable_snapper = null disable_prop_after_interacted = true interacted_texture = ExtResource("16_jknyg") prop_key = "prop_粘鼠板" @@ -285,7 +287,7 @@ texture = ExtResource("8_tueh3") [node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"] points = PackedVector2Array(37, 150, 700, 150) -[node name="DirectionalLight2D" parent="Ground" index="8"] +[node name="DirectionalLight2D" parent="Ground" index="7"] visible = false energy = 0.9 blend_mode = 1 diff --git a/scene/ground/scene/c02/s06_animation.gd b/scene/ground/scene/c02/s06_animation.gd index 6e85511f..8cdeedb6 100644 --- a/scene/ground/scene/c02/s06_animation.gd +++ b/scene/ground/scene/c02/s06_animation.gd @@ -143,10 +143,6 @@ func _c02_final_show(): func _on_exit_final_show(_arg): - var player = SceneManager.get_player() - # 显示角色光源,但不显示 sprite - player.visible = true - player.hide_sprite = true # 瞎、胖、蝉三人离开 play("c02_final_show_end") SceneManager.freeze_player(0) @@ -161,5 +157,4 @@ func _on_exit_final_show(_arg): await animation_finished c02_final_layer.queue_free() SceneManager.release_player() - player.hide_sprite = false ArchiveManager.set_global_entry("c02_burning_end", true) diff --git a/scene/ground/scene/c02/s06_二楼.tscn b/scene/ground/scene/c02/s06_二楼.tscn index 8d5be738..0c93d6bc 100644 --- a/scene/ground/scene/c02/s06_二楼.tscn +++ b/scene/ground/scene/c02/s06_二楼.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=48 format=3 uid="uid://cootarwb44vvh"] +[gd_scene load_steps=49 format=3 uid="uid://cootarwb44vvh"] [ext_resource type="PackedScene" uid="uid://dayyx4jerj7io" path="res://scene/ground/ground.tscn" id="1_qkymk"] [ext_resource type="Script" uid="uid://cbt0ubygchxvv" path="res://scene/ground/scene/c02/s06_animation.gd" id="2_4dg6u"] +[ext_resource type="Script" uid="uid://cpejxlfni6n52" path="res://manager/audio_manager/vibe_sfx.gd" id="3_h3h1a"] [ext_resource type="Texture2D" uid="uid://6ol2om68cd1q" path="res://asset/art/scene/c02/s06_二楼楼道/bg_背景.png" id="3_och2w"] [ext_resource type="AudioStream" uid="uid://dvc2emnfcmabx" path="res://asset/audio/sfx/环境音/白噪音/白噪声楼道1.wav" id="3_tqnu8"] [ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="4_2e08x"] @@ -32,7 +33,7 @@ [ext_resource type="AudioStream" uid="uid://bxp3f263aaqkp" path="res://asset/audio/sfx/脚步/02_室外_1.wav" id="29_tqnu8"] [ext_resource type="AudioStream" uid="uid://d3h0xe0qtai18" path="res://asset/audio/sfx/脚步/02_室外_2.wav" id="30_r7b2r"] [ext_resource type="AudioStream" uid="uid://dwa7xdvg5o0i" path="res://asset/audio/sfx/脚步/02_室外_3.wav" id="31_rpn6g"] -[ext_resource type="PackedScene" uid="uid://ci5anaxsa1apl" path="res://scene/entity/local_inspectable.tscn" id="32_4ndyv"] +[ext_resource type="PackedScene" uid="uid://ci5anaxsa1apl" path="res://scene/entity/inspectable.tscn" id="32_4ndyv"] [ext_resource type="Texture2D" uid="uid://day38kany2gmr" path="res://asset/art/scene/c02/小蝉寻人启事/e_寻人启事完整.png" id="33_h3h1a"] [ext_resource type="Texture2D" uid="uid://ce3d785v5lxg2" path="res://asset/art/scene/c02/小蝉寻人启事/ux_寻人启事完整.png" id="34_3u30v"] @@ -89,371 +90,62 @@ tracks/3/keys = { tracks/4/type = "value" tracks/4/imported = false tracks/4/enabled = true -tracks/4/path = NodePath("DeployLayer/c02_final/吕萍:flip_h") +tracks/4/path = NodePath("DirectionalLight2D:energy") tracks/4/interp = 1 tracks/4/loop_wrap = true tracks/4/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} -tracks/5/type = "value" -tracks/5/imported = false -tracks/5/enabled = true -tracks/5/path = NodePath("DirectionalLight2D:energy") -tracks/5/interp = 1 -tracks/5/loop_wrap = true -tracks/5/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), "update": 0, "values": [0.9] } -tracks/6/type = "value" -tracks/6/imported = false -tracks/6/enabled = true -tracks/6/path = NodePath("DeployLayer/c02_final/L环境光/L火柴光:energy") -tracks/6/interp = 1 -tracks/6/loop_wrap = true -tracks/6/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [0.0] -} -tracks/7/type = "value" -tracks/7/imported = false -tracks/7/enabled = true -tracks/7/path = NodePath("AnimationPlayer/Sfx擦亮火柴:playing") -tracks/7/interp = 1 -tracks/7/loop_wrap = true -tracks/7/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} -tracks/8/type = "value" -tracks/8/imported = false -tracks/8/enabled = true -tracks/8/path = NodePath("AnimationPlayer/Sfx翻找东西:playing") -tracks/8/interp = 1 -tracks/8/loop_wrap = true -tracks/8/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} -tracks/9/type = "value" -tracks/9/imported = false -tracks/9/enabled = true -tracks/9/path = NodePath("DeployLayer/c02_final/L环境光:position") -tracks/9/interp = 1 -tracks/9/loop_wrap = true -tracks/9/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector2(627, 29)] -} -tracks/10/type = "value" -tracks/10/imported = false -tracks/10/enabled = true -tracks/10/path = NodePath("DeployLayer/煤油灯/PointLight2D:visible") -tracks/10/interp = 1 -tracks/10/loop_wrap = true -tracks/10/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/11/type = "value" -tracks/11/imported = false -tracks/11/enabled = true -tracks/11/path = NodePath("DeployLayer/煤油灯/PointLightGround2D:visible") -tracks/11/interp = 1 -tracks/11/loop_wrap = true -tracks/11/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/12/type = "value" -tracks/12/imported = false -tracks/12/enabled = true -tracks/12/path = NodePath("DeployLayer/煤油灯/灯光:visible") -tracks/12/interp = 1 -tracks/12/loop_wrap = true -tracks/12/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/13/type = "value" -tracks/13/imported = false -tracks/13/enabled = true -tracks/13/path = NodePath("DeployLayer/c02_final:visible") -tracks/13/interp = 1 -tracks/13/loop_wrap = true -tracks/13/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} -tracks/14/type = "value" -tracks/14/imported = false -tracks/14/enabled = true -tracks/14/path = NodePath("DeployLayer/c02_final/吕萍:visible") -tracks/14/interp = 1 -tracks/14/loop_wrap = true -tracks/14/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/15/type = "value" -tracks/15/imported = false -tracks/15/enabled = true -tracks/15/path = NodePath("MainPlayer:hide_sprite") -tracks/15/interp = 1 -tracks/15/loop_wrap = true -tracks/15/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} -tracks/16/type = "value" -tracks/16/imported = false -tracks/16/enabled = true -tracks/16/path = NodePath("DeployLayer/c02_final/小蝉:visible") -tracks/16/interp = 1 -tracks/16/loop_wrap = true -tracks/16/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} -tracks/17/type = "value" -tracks/17/imported = false -tracks/17/enabled = true -tracks/17/path = NodePath("DeployLayer/c02_final/胖子:visible") -tracks/17/interp = 1 -tracks/17/loop_wrap = true -tracks/17/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} -tracks/18/type = "value" -tracks/18/imported = false -tracks/18/enabled = true -tracks/18/path = NodePath("DeployLayer/c02_final/瞎子:visible") -tracks/18/interp = 1 -tracks/18/loop_wrap = true -tracks/18/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} -tracks/19/type = "value" -tracks/19/imported = false -tracks/19/enabled = true -tracks/19/path = NodePath("MainPlayer:visible") -tracks/19/interp = 1 -tracks/19/loop_wrap = true -tracks/19/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/20/type = "value" -tracks/20/imported = false -tracks/20/enabled = true -tracks/20/path = NodePath("DeployLayer/c02_final/小蝉:frame") -tracks/20/interp = 1 -tracks/20/loop_wrap = true -tracks/20/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [0] -} -tracks/21/type = "value" -tracks/21/imported = false -tracks/21/enabled = true -tracks/21/path = NodePath("DeployLayer/c02_final/小蝉:animation") -tracks/21/interp = 1 -tracks/21/loop_wrap = true -tracks/21/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [&"小婵捂脸"] -} -tracks/22/type = "value" -tracks/22/imported = false -tracks/22/enabled = true -tracks/22/path = NodePath("DeployLayer/c02_final/吕萍:animation") -tracks/22/interp = 1 -tracks/22/loop_wrap = true -tracks/22/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [&"小蝶擦火柴转身"] -} -tracks/23/type = "value" -tracks/23/imported = false -tracks/23/enabled = true -tracks/23/path = NodePath("DeployLayer/c02_final/吕萍:frame") -tracks/23/interp = 1 -tracks/23/loop_wrap = true -tracks/23/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [3] -} -tracks/24/type = "value" -tracks/24/imported = false -tracks/24/enabled = true -tracks/24/path = NodePath("DeployLayer/c02_final/L环境光:visible") -tracks/24/interp = 1 -tracks/24/loop_wrap = true -tracks/24/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} - -[sub_resource type="Animation" id="Animation_lh55k"] -resource_name = "c02_final_show_end" -length = 14.0 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("DeployLayer/c02_final:visible") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/1/type = "method" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath("DeployLayer/c02_final/吕萍") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0, 2.93333), -"transitions": PackedFloat32Array(1, 1), -"values": [{ -"args": [&"小蝶蹲下呼吸"], -"method": &"play" -}, { -"args": [&"小蝶擦火柴蹲下起身"], -"method": &"play" -}] -} -tracks/2/type = "value" -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/path = NodePath("DeployLayer/c02_final/吕萍:flip_h") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/keys = { -"times": PackedFloat32Array(3.93333), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/3/type = "value" -tracks/3/imported = false -tracks/3/enabled = true -tracks/3/path = NodePath("DeployLayer/c02_final/吕萍:visible") -tracks/3/interp = 1 -tracks/3/loop_wrap = true -tracks/3/keys = { -"times": PackedFloat32Array(0, 4.3), -"transitions": PackedFloat32Array(1, 1), -"update": 1, -"values": [true, false] -} -tracks/4/type = "value" -tracks/4/imported = false -tracks/4/enabled = true -tracks/4/path = NodePath("MainPlayer:hide_sprite") -tracks/4/interp = 1 -tracks/4/loop_wrap = true -tracks/4/keys = { -"times": PackedFloat32Array(0, 4.3), -"transitions": PackedFloat32Array(1, 1), -"update": 1, -"values": [true, false] -} tracks/5/type = "value" tracks/5/imported = false tracks/5/enabled = true -tracks/5/path = NodePath("DeployLayer/c02_final/小蝉:visible") +tracks/5/path = NodePath("DeployLayer/c02_final/L环境光/L火柴光:energy") tracks/5/interp = 1 tracks/5/loop_wrap = true tracks/5/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] +"update": 0, +"values": [0.0] } tracks/6/type = "value" tracks/6/imported = false tracks/6/enabled = true -tracks/6/path = NodePath("DeployLayer/c02_final/胖子:visible") +tracks/6/path = NodePath("AnimationPlayer/Sfx擦亮火柴:playing") tracks/6/interp = 1 tracks/6/loop_wrap = true tracks/6/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, -"values": [true] +"values": [false] } tracks/7/type = "value" tracks/7/imported = false tracks/7/enabled = true -tracks/7/path = NodePath("DeployLayer/c02_final/瞎子:visible") +tracks/7/path = NodePath("AnimationPlayer/Sfx翻找东西:playing") tracks/7/interp = 1 tracks/7/loop_wrap = true tracks/7/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, -"values": [true] +"values": [false] } tracks/8/type = "value" tracks/8/imported = false tracks/8/enabled = true -tracks/8/path = NodePath("DeployLayer/c02_final/L环境光:visible") +tracks/8/path = NodePath("DeployLayer/c02_final/L环境光:position") tracks/8/interp = 1 tracks/8/loop_wrap = true tracks/8/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] +"update": 0, +"values": [Vector2(627, 29)] } tracks/9/type = "value" tracks/9/imported = false @@ -491,6 +183,325 @@ tracks/11/keys = { "update": 1, "values": [true] } +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("DeployLayer/c02_final:visible") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("DeployLayer/c02_final/吕萍:visible") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("MainPlayer:hide_sprite") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("DeployLayer/c02_final/小蝉:visible") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("DeployLayer/c02_final/胖子:visible") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("DeployLayer/c02_final/瞎子:visible") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("MainPlayer:visible") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("DeployLayer/c02_final/小蝉:frame") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [0] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("DeployLayer/c02_final/小蝉:animation") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"小婵捂脸"] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("DeployLayer/c02_final/吕萍:animation") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"小蝶擦火柴转身"] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("DeployLayer/c02_final/吕萍:frame") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [3] +} +tracks/23/type = "value" +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/path = NodePath("DeployLayer/c02_final/L环境光:visible") +tracks/23/interp = 1 +tracks/23/loop_wrap = true +tracks/23/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_lh55k"] +resource_name = "c02_final_show_end" +length = 14.0 +capture_included = true +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("DeployLayer/c02_final:visible") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/1/type = "method" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("DeployLayer/c02_final/吕萍") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [&"小蝶蹲下呼吸"], +"method": &"play" +}] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("DeployLayer/c02_final/吕萍:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 3.8), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("MainPlayer:hide_sprite") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 3.8), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("DeployLayer/c02_final/小蝉:visible") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("DeployLayer/c02_final/胖子:visible") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("DeployLayer/c02_final/瞎子:visible") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("DeployLayer/c02_final/L环境光:visible") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("DeployLayer/煤油灯/PointLight2D:visible") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("DeployLayer/煤油灯/PointLightGround2D:visible") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("DeployLayer/煤油灯/灯光:visible") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("DeployLayer/c02_final/吕萍:animation") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(2.66667), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [&"小蝶擦火柴蹲下起身"] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("DeployLayer/c02_final/吕萍:frame") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(2.66667, 3.5), +"transitions": PackedFloat32Array(1, 1), +"update": 2, +"values": [0, 3] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("MainPlayer:visible") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} [sub_resource type="Animation" id="Animation_ciatp"] resource_name = "c02_final_show_join" @@ -515,10 +526,10 @@ tracks/1/path = NodePath("DeployLayer/c02_final/L环境光:position") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { -"times": PackedFloat32Array(3.46667, 5.76667, 5.9, 6.13333, 6.73333, 7.53333, 9.6, 10.1333), +"times": PackedFloat32Array(3.46667, 5.83333, 5.96667, 6.26667, 6.93333, 7.53333, 9.6, 10.1333), "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1), "update": 0, -"values": [Vector2(631, 27), Vector2(631, 30.0694), Vector2(663, 24.212), Vector2(674, 29), Vector2(673.571, 31.016), Vector2(682, 80), Vector2(682, 80), Vector2(673, 63)] +"values": [Vector2(624, 26), Vector2(624, 27.069), Vector2(648.75, 27.214), Vector2(670, 30), Vector2(664.571, 28.016), Vector2(682, 80), Vector2(682, 80), Vector2(673, 63)] } tracks/2/type = "method" tracks/2/imported = false @@ -527,7 +538,7 @@ tracks/2/path = NodePath("DeployLayer/c02_final/吕萍") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { -"times": PackedFloat32Array(0.533333, 11.1667), +"times": PackedFloat32Array(0.533333, 11.9667), "transitions": PackedFloat32Array(1, 1), "values": [{ "args": [&"小蝶擦火柴呼吸"], @@ -542,7 +553,7 @@ tracks/3/imported = false tracks/3/enabled = true tracks/3/path = NodePath("DeployLayer/c02_final/吕萍:animation") tracks/3/interp = 1 -tracks/3/loop_wrap = true +tracks/3/loop_wrap = false tracks/3/keys = { "times": PackedFloat32Array(3.6, 9.2), "transitions": PackedFloat32Array(1, 1), @@ -554,12 +565,12 @@ tracks/4/imported = false tracks/4/enabled = true tracks/4/path = NodePath("DeployLayer/c02_final/吕萍:frame") tracks/4/interp = 1 -tracks/4/loop_wrap = false +tracks/4/loop_wrap = true tracks/4/keys = { -"times": PackedFloat32Array(3.6, 7.53333, 9.2, 10.6), +"times": PackedFloat32Array(3.6, 7.63333, 9.2, 11.5667), "transitions": PackedFloat32Array(1, 1, 1, 1), "update": 2, -"values": [0, 15, 0, 3] +"values": [0, 15, 0, 5] } tracks/5/type = "value" tracks/5/imported = false @@ -782,7 +793,7 @@ _data = { [sub_resource type="RectangleShape2D" id="RectangleShape2D_lh55k"] resource_local_to_scene = true -size = Vector2(5, 70) +size = Vector2(20, 70) [sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_wywax"] playback_mode = 1 @@ -838,7 +849,11 @@ data = { } oneshot_animation = "" -[node name="背景音效" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="0"] +[node name="VibeSfx" type="Node" parent="Ground/AnimationPlayer" index="0"] +script = ExtResource("3_h3h1a") +metadata/_custom_type_script = "uid://cpejxlfni6n52" + +[node name="背景音效" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="1"] stream = ExtResource("3_tqnu8") volume_db = -3.0 autoplay = true @@ -850,13 +865,13 @@ mode = "场景背景音" "感应玩家操作" = false metadata/_custom_type_script = "uid://rq6w1vuhuq1m" -[node name="Sfx翻找东西" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="1"] +[node name="Sfx翻找东西" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="2"] stream = ExtResource("5_lh55k") bus = &"game_sfx" script = ExtResource("4_2e08x") metadata/_custom_type_script = "uid://rq6w1vuhuq1m" -[node name="Sfx擦亮火柴" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="2"] +[node name="Sfx擦亮火柴" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="3"] stream = ExtResource("5_wywax") bus = &"game_sfx" script = ExtResource("4_2e08x") @@ -919,6 +934,9 @@ debug_mov_animation = "小小小蝶动画(跑)" position = Vector2(616, -14) ground_light_texture = ExtResource("8_7x2h6") ground_height_offset = 15.0 +enable_snapper = null +one_shot = false +disable_prop_after_interacted = true [node name="CollisionShape2D" parent="Ground/DeployLayer/煤油灯/Area2D" index="0"] shape = SubResource("RectangleShape2D_lh55k") @@ -932,10 +950,14 @@ position = Vector2(329, -14) ground_light_texture = ExtResource("6_vbvbc") gaslight_energy = 2.0 ground_height_offset = 15.0 +enable_snapper = null +one_shot = false +disable_prop_after_interacted = true [node name="Interactable老鼠洞" parent="Ground/DeployLayer" index="8" instance=ExtResource("7_0d746")] position = Vector2(610, 50) enabled = false +enable_snapper = null one_shot_max_times = 2 disable_prop_after_interacted = true prop_key = "prop_小鞋子1" @@ -999,16 +1021,19 @@ frame_progress = 0.121203 position = Vector2(322, -269) packed_scene = ExtResource("12_intre") quit_closeup_on_escape = false +enable_snapper = null [node name="Closeup水盆" parent="Ground/DeployLayer" index="14" instance=ExtResource("11_owxx3")] position = Vector2(289, 16) packed_scene = ExtResource("16_p6da7") +enable_snapper = null [node name="Closeup谢幕演出" parent="Ground/DeployLayer" index="15" instance=ExtResource("11_owxx3")] position = Vector2(518, -272) action_key = 3 packed_scene = ExtResource("25_m28ab") quit_closeup_on_escape = false +enable_snapper = null [node name="c02_final" type="Node2D" parent="Ground/DeployLayer" index="16"] visible = false @@ -1035,7 +1060,7 @@ move_configs = Array[Dictionary]([{ debug_mov_animation = "胖子走路" [node name="吕萍" type="AnimatedSprite2D" parent="Ground/DeployLayer/c02_final"] -position = Vector2(653, 38) +position = Vector2(646, 39.5) sprite_frames = ExtResource("15_k01ve") animation = &"小蝶擦火柴转身" autoplay = "小蝶擦火柴呼吸" @@ -1116,6 +1141,7 @@ texture = SubResource("GradientTexture2D_p6da7") position = Vector2(749, -2) texture = ExtResource("33_h3h1a") texture_cover = ExtResource("34_3u30v") +content_key = "c02_寻人启事_完整" [node name="MainPlayer" parent="Ground" index="4"] position = Vector2(650, 98) diff --git a/scene/ground/scene/c02/s10_空房间.tscn b/scene/ground/scene/c02/s10_空房间.tscn index ca604040..d0097132 100644 --- a/scene/ground/scene/c02/s10_空房间.tscn +++ b/scene/ground/scene/c02/s10_空房间.tscn @@ -154,6 +154,7 @@ texture = ExtResource("8_3ftnp") position = Vector2(364, 55) texture = ExtResource("6_mty8e") enabled = false +enable_snapper = false mute_when_interacted = true one_shot = false @@ -187,7 +188,13 @@ texture = ExtResource("12_27dvh") position = Vector2(373, -13.8031) gaslight_energy = 2.0 gaslight_ground_energy = 2.0 +enable_snapper = null +collision_width_and_x = true mute_when_interacted = false +one_shot = false +one_shot_max_times = true +disable_prop_after_interacted = 1 +interacted_texture = false [node name="拼接小猫玩具" type="AnimatedSprite2D" parent="Ground/DeployLayer" index="12"] visible = false diff --git a/scene/ground/script/c02/s00_煤油灯.tscn b/scene/ground/script/c02/s00_煤油灯.tscn index b2428564..25f1e925 100644 --- a/scene/ground/script/c02/s00_煤油灯.tscn +++ b/scene/ground/script/c02/s00_煤油灯.tscn @@ -1,8 +1,7 @@ -[gd_scene load_steps=14 format=3 uid="uid://cxw5rovg5mu1a"] +[gd_scene load_steps=15 format=3 uid="uid://cxw5rovg5mu1a"] [ext_resource type="Script" uid="uid://c8vsfqoeu26gk" path="res://scene/ground/script/c02/s00_煤油灯.gd" id="1_0aa53"] [ext_resource type="Texture2D" uid="uid://b3qgmrfslj135" path="res://asset/art/scene/c02/s03_公寓一楼院子/光晕/光晕1.png" id="2_uusov"] -[ext_resource type="AudioStream" uid="uid://inmdv5gqqius" path="res://asset/audio/sfx/UI/门锁互动.mp3" id="3_1xq2f"] [ext_resource type="Texture2D" uid="uid://c1nrsyh1ss82v" path="res://asset/art/scene/c02/s03_公寓一楼院子/地面物品反光/地反光1.png" id="3_y2gsk"] [ext_resource type="Texture2D" uid="uid://dtyg0nugb2tnf" path="res://asset/art/ui/action_mark/UI探索.png" id="4_abb1f"] [ext_resource type="PackedScene" uid="uid://c4tipnj1cr1j3" path="res://scene/entity/ux/sign.tscn" id="4_w1aco"] @@ -11,17 +10,20 @@ [ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="8_abb1f"] [ext_resource type="AudioStream" uid="uid://cljr4g0sivpdh" path="res://asset/audio/sfx/交互/sfx_煤油灯点燃成功.wav" id="9_abb1f"] [ext_resource type="SpriteFrames" uid="uid://3nas025c2c5u" path="res://asset/art/gif/c02_杂项/c02_杂项_frames.tres" id="9_h0ajm"] +[ext_resource type="AudioStream" uid="uid://dph8v3v5mq1xl" path="res://asset/audio/sfx/交互/sfx_交互失败.wav" id="9_l338h"] [ext_resource type="Texture2D" uid="uid://djfn6ya63emu0" path="res://asset/art/scene/c02/s02_大门过道/e_煤油灯座.png" id="10_h0ajm"] +[ext_resource type="Script" uid="uid://cnt01hiw52bmn" path="res://scene/entity/ux/sign_snapper.gd" id="13_l338h"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_h0ajm"] resource_local_to_scene = true -size = Vector2(5, 70) +size = Vector2(20, 70) [node name="煤油灯" type="Sprite2D"] script = ExtResource("1_0aa53") gaslight_texture = ExtResource("2_uusov") ground_light_texture = ExtResource("3_y2gsk") debug_light_switch = true +enable_snapper = null unrevealed_sign_texture = ExtResource("4_abb1f") unmatched_sign_texture = ExtResource("5_l338h") matched_sign_texture = ExtResource("6_ivr1s") @@ -31,7 +33,7 @@ prop_key2 = "" prop_key3 = "" [node name="SfxInvalid" type="AudioStreamPlayer" parent="."] -stream = ExtResource("3_1xq2f") +stream = ExtResource("9_l338h") bus = &"game_sfx" script = ExtResource("8_abb1f") @@ -69,3 +71,12 @@ texture = ExtResource("10_h0ajm") [node name="Sign" parent="." instance=ExtResource("4_w1aco")] unique_name_in_owner = true + +[node name="SignSnapper" type="Marker2D" parent="."] +unique_name_in_owner = true +script = ExtResource("13_l338h") +radius = 3.0 +delay_arrived = 0.1 +action_on_arrived = 4 +delay_after_action = 0.4 +metadata/_custom_type_script = "uid://cnt01hiw52bmn" diff --git a/scene/ground/script/c02/小手讨东西.tscn b/scene/ground/script/c02/小手讨东西.tscn index e7ef3b4a..fa749176 100644 --- a/scene/ground/script/c02/小手讨东西.tscn +++ b/scene/ground/script/c02/小手讨东西.tscn @@ -3,10 +3,10 @@ [ext_resource type="Texture2D" uid="uid://cawpq7rnho5px" path="res://asset/art/gif/c02_小手/洞.png" id="1_47cqy"] [ext_resource type="Script" uid="uid://my5xqi3bkka6" path="res://scene/ground/script/c02/小手讨东西.gd" id="1_n7thl"] [ext_resource type="Texture2D" uid="uid://dtyg0nugb2tnf" path="res://asset/art/ui/action_mark/UI探索.png" id="3_lr23o"] -[ext_resource type="AudioStream" uid="uid://inmdv5gqqius" path="res://asset/audio/sfx/UI/门锁互动.mp3" id="3_n7thl"] [ext_resource type="Texture2D" uid="uid://xcmvfp72l061" path="res://asset/art/ui/action_mark/UI锁.png" id="4_0tuif"] [ext_resource type="PackedScene" uid="uid://c4tipnj1cr1j3" path="res://scene/entity/ux/sign.tscn" id="5_3c204"] [ext_resource type="Texture2D" uid="uid://gui0ubwlwoi0" path="res://asset/art/ui/action_mark/UI手.png" id="5_n2hq3"] +[ext_resource type="AudioStream" uid="uid://dph8v3v5mq1xl" path="res://asset/audio/sfx/交互/sfx_交互失败.wav" id="6_lr23o"] [ext_resource type="Script" uid="uid://rq6w1vuhuq1m" path="res://scene/entity/audio/sfx.gd" id="7_7dftu"] [ext_resource type="PackedScene" uid="uid://b50n0hvs4yh75" path="res://addons/property-inspector/pro_animation_sprite2d/pro_animated_sprite.tscn" id="7_brfob"] [ext_resource type="AudioStream" uid="uid://44slgncnt6sj" path="res://asset/audio/sfx/交互/第一章/sfx_手交互成功.wav" id="8_7dftu"] @@ -28,7 +28,7 @@ unmatched_sign_texture = ExtResource("4_0tuif") matched_sign_texture = ExtResource("5_n2hq3") [node name="SfxInvalid" type="AudioStreamPlayer" parent="."] -stream = ExtResource("3_n7thl") +stream = ExtResource("6_lr23o") bus = &"game_sfx" script = ExtResource("7_7dftu") metadata/_custom_type_script = "uid://rq6w1vuhuq1m" @@ -120,4 +120,7 @@ texture = ExtResource("10_47cqy") [node name="SignSnapper" type="Marker2D" parent="."] unique_name_in_owner = true script = ExtResource("15_lr23o") +delay_arrived = 0.1 +action_on_arrived = 4 +delay_after_action = 0.4 metadata/_custom_type_script = "uid://cnt01hiw52bmn"