From 28223ed89048e81bd450a374dfce1c94743100c0 Mon Sep 17 00:00:00 2001 From: cakipaul Date: Fri, 25 Jul 2025 16:44:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B9=A6=E6=9E=B6=E4=B8=8E=E4=BF=A1=E4=BB=B6?= =?UTF-8?q?=E6=B8=B8=E6=88=8F=20sfx=20=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scene/entity/audio/sfx.gd | 23 ++++++++------------ scene/entity/audio/sfx2d.gd | 23 +++++++++----------- scene/entity/closeup.gd | 15 +++++++------ scene/ground/ground.tscn | 6 +++++ scene/ground/scene/c01/s08_书店.gd | 13 +++++++++++ scene/ground/scene/c01/s08_书店.tscn | 7 ++---- scene/ground/scene/c02/s04_保卫科.tscn | 6 ----- scene/ground/scene/c02/s05_一楼内侧楼道.tscn | 4 +--- scene/ground/scene/c02/s08_瞎子卧室.tscn | 2 -- 9 files changed, 49 insertions(+), 50 deletions(-) diff --git a/scene/entity/audio/sfx.gd b/scene/entity/audio/sfx.gd index 8cb2e79f..a3825d20 100644 --- a/scene/entity/audio/sfx.gd +++ b/scene/entity/audio/sfx.gd @@ -106,12 +106,12 @@ func global_stop(duration := 1.5) -> void: func easing_kill(duration: float = 2.0) -> Tween: # stop with easing var tween = create_tween() - tween.bind_node(self) if playing: tween.tween_property(self, "volume_linear", 0.01, duration) tween.tween_callback(stop) # set volume_db back to default tween.tween_callback(func(): volume_db = default_db) + tween.tween_interval(0.001) # 防止 no step return tween @@ -167,18 +167,13 @@ func _get(property: StringName) -> Variant: return null -var resume_on_close_up_exit := false +func change_volumn_db(changed_volumn_db: float, duration := 1.0) -> void: + if changed_volumn_db != 0.0: + var target_linear = db_to_linear(default_db + changed_volumn_db) + var tween = create_tween() + tween.tween_property(self, "volume_linear", target_linear, duration) -func on_toggle_close_up(display: bool) -> void: - if not is_in_group(GlobalConfig.GROUP_GROUND_SFX): - return - if display: - if stream and not stream_paused: - resume_on_close_up_exit = true - var tween = create_tween() - tween.tween_property(self, "volume_linear", 0.01, 1.0) - else: - if resume_on_close_up_exit: - var tween = create_tween() - tween.tween_property(self, "volume_linear", default_linear, 1.0) +func reset_volumn_to_default(duration := 1.0) -> void: + var tween = create_tween() + tween.tween_property(self, "volume_linear", default_linear, duration) \ No newline at end of file diff --git a/scene/entity/audio/sfx2d.gd b/scene/entity/audio/sfx2d.gd index b3ac7d78..1f07fecd 100644 --- a/scene/entity/audio/sfx2d.gd +++ b/scene/entity/audio/sfx2d.gd @@ -78,20 +78,17 @@ func easing_kill(duration: float = 2.0) -> Tween: tween.tween_callback(stop) # set volume_db back to default tween.tween_callback(func(): volume_db = default_db) + tween.tween_interval(0.001) # 防止 no step return tween -var resume_on_close_up_exit := false +func change_volumn_db(changed_volumn_db: float, duration := 1.0) -> void: + if changed_volumn_db != 0.0: + var target_linear = db_to_linear(default_db + changed_volumn_db) + var tween = create_tween() + tween.tween_property(self, "volume_linear", target_linear, duration) -func on_toggle_close_up(display: bool) -> void: - if not is_in_group(GlobalConfig.GROUP_GROUND_SFX2D): - return - if display: - if stream and not stream_paused: - resume_on_close_up_exit = true - var tween = create_tween() - tween.tween_property(self, "volume_linear", 0.01, 1.0) - else: - if resume_on_close_up_exit: - var tween = create_tween() - tween.tween_property(self, "volume_linear", default_linear, 1.0) + +func reset_volumn_to_default(duration := 1.0) -> void: + var tween = create_tween() + tween.tween_property(self, "volume_linear", default_linear, duration) \ No newline at end of file diff --git a/scene/entity/closeup.gd b/scene/entity/closeup.gd index eca9e364..f08f8c2f 100644 --- a/scene/entity/closeup.gd +++ b/scene/entity/closeup.gd @@ -8,7 +8,8 @@ signal exit(arg) @export var packed_scene: PackedScene @export var quit_closeup_on_cancel := true -@export var pause_sfx_on_display := false +@export var on_display_change_volumn := true +@export var on_display_changed_volumn_db := -7.0 @export_tool_button("新建特写场景") var create_closeup_scene = _create_scene_with_script var current_child: Node @@ -26,9 +27,9 @@ func display() -> void: if current_child: return if packed_scene: - if pause_sfx_on_display: - get_tree().call_group(GlobalConfig.GROUP_GROUND_SFX, "on_toggle_close_up" , true) - get_tree().call_group(GlobalConfig.GROUP_GROUND_SFX2D, "on_toggle_close_up" , true) + if on_display_change_volumn: + get_tree().call_group(GlobalConfig.GROUP_GROUND_SFX, "change_volumn_db" , on_display_changed_volumn_db) + get_tree().call_group(GlobalConfig.GROUP_GROUND_SFX2D, "change_volumn_db" , on_display_changed_volumn_db) SceneManager.lock_player(0, action_key) # 展示时,禁用 sign_mark 的输入 sign_mark.pass_unhandled_input = true @@ -42,9 +43,9 @@ func display() -> void: func _exit(arg = null): if current_child: - if pause_sfx_on_display: - get_tree().call_group(GlobalConfig.GROUP_GROUND_SFX, "on_toggle_close_up" , false) - get_tree().call_group(GlobalConfig.GROUP_GROUND_SFX2D, "on_toggle_close_up" , false) + if on_display_change_volumn: + get_tree().call_group(GlobalConfig.GROUP_GROUND_SFX, "reset_volumn_to_default") + get_tree().call_group(GlobalConfig.GROUP_GROUND_SFX2D, "reset_volumn_to_default") SceneManager.unlock_player() remove_child(current_child) current_child.queue_free() diff --git a/scene/ground/ground.tscn b/scene/ground/ground.tscn index 6b00ae9b..e1816f4b 100644 --- a/scene/ground/ground.tscn +++ b/scene/ground/ground.tscn @@ -49,9 +49,14 @@ unique_name_in_owner = true position = Vector2(41, 88) reenter_lock = NodePath("../PlayerReenterLock") camera_marker = NodePath("../CameraFocusMarker") +player_movement_rect = Rect2(20, -158, 524, 316) [node name="CameraFocusMarker" parent="." node_paths=PackedStringArray("focusing_node") instance=ExtResource("4_mgk0a")] unique_name_in_owner = true +limit_left = 0 +limit_top = -158 +limit_right = 564 +limit_bottom = 158 focusing_node = NodePath("../MainPlayer") [node name="ParallaxForeground" type="ParallaxBackground" parent="."] @@ -81,6 +86,7 @@ height = 0.5 [node name="FootstepAudioPlayer" type="AudioStreamPlayer" parent="."] unique_name_in_owner = true +volume_db = -5.0 bus = &"game_sfx" script = ExtResource("5_7mb2q") metadata/_custom_type_script = "uid://dpnny2y808k71" diff --git a/scene/ground/scene/c01/s08_书店.gd b/scene/ground/scene/c01/s08_书店.gd index ff0fe0f2..ab9c6399 100644 --- a/scene/ground/scene/c01/s08_书店.gd +++ b/scene/ground/scene/c01/s08_书店.gd @@ -120,6 +120,7 @@ func play_shelf_game() -> void: if shelf_game_node.get_parent() != get_parent(): get_parent().add_child(shelf_game_node) SceneManager.lock_player() + _toggle_amb_sfx_volumn(true) func _on_shelf_game_exiting() -> void: @@ -127,9 +128,11 @@ func _on_shelf_game_exiting() -> void: print("书架游戏 exiting") create_tween().tween_property(mask, "color:a", 0.0, 1.0).from(1.0) SceneManager.unlock_player() + _toggle_amb_sfx_volumn(false) func _on_shelf_game_success() -> void: + _toggle_amb_sfx_volumn(false) ArchiveManager.set_global_entry(&"c01_shelf_game_success", true) shelf_game_success = true _setup_weird_bookstore() @@ -187,6 +190,7 @@ func play_envelope_game() -> void: if envelope_game_node.get_parent() != get_parent(): get_parent().add_child.call_deferred(envelope_game_node) SceneManager.lock_player() + _toggle_amb_sfx_volumn(true) func _on_envelope_game_exiting() -> void: @@ -194,6 +198,7 @@ func _on_envelope_game_exiting() -> void: print("信封游戏 exiting") create_tween().tween_property(mask, "color:a", 0.0, 1.0).from(1.0) SceneManager.unlock_player() + _toggle_amb_sfx_volumn(false) func _on_envelope_game_success() -> void: @@ -203,6 +208,7 @@ func _on_envelope_game_success() -> void: envelope_game_success = true _check_portal() SceneManager.unlock_player() + _toggle_amb_sfx_volumn(false) func pay_off_wage() -> void: @@ -213,3 +219,10 @@ func pay_off_wage() -> void: func _on_quit_inspect_coin() -> void: SceneManager.pop_os_with_str("c01_s08_获得袁大头后") + + +func _toggle_amb_sfx_volumn(hold_down: bool) -> void: + if hold_down: + get_tree().call_group(GlobalConfig.GROUP_GROUND_SFX, "change_volumn_db", -7.0) + else: + get_tree().call_group(GlobalConfig.GROUP_GROUND_SFX, "reset_volumn_to_default") diff --git a/scene/ground/scene/c01/s08_书店.tscn b/scene/ground/scene/c01/s08_书店.tscn index 023c65d4..c71f13fb 100644 --- a/scene/ground/scene/c01/s08_书店.tscn +++ b/scene/ground/scene/c01/s08_书店.tscn @@ -44,7 +44,7 @@ script = ExtResource("2_0lque") [node name="环境音" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="0"] process_mode = 1 stream = ExtResource("3_0x288") -volume_db = -8.0 +volume_db = 5.0 autoplay = true bus = &"game_sfx" script = ExtResource("4_p6k3c") @@ -56,7 +56,7 @@ metadata/_custom_type_script = "uid://rq6w1vuhuq1m" [node name="诡异环境音" type="AudioStreamPlayer" parent="Ground/AnimationPlayer" index="1"] process_mode = 1 stream = ExtResource("5_eerhd") -volume_db = -7.0 +volume_db = -4.0 bus = &"game_sfx" script = ExtResource("4_p6k3c") mode = "场景背景音" @@ -191,10 +191,7 @@ character = "小小蝶" player_movement_rect = Rect2(22, -158, 523, 316) [node name="CameraFocusMarker" parent="Ground" index="6"] -limit_left = 0 -limit_top = -158 limit_right = 576 -limit_bottom = 158 [node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"] position = Vector2(-1, 22) diff --git a/scene/ground/scene/c02/s04_保卫科.tscn b/scene/ground/scene/c02/s04_保卫科.tscn index e021873b..68c019e9 100644 --- a/scene/ground/scene/c02/s04_保卫科.tscn +++ b/scene/ground/scene/c02/s04_保卫科.tscn @@ -136,12 +136,6 @@ position = Vector2(447, 98) player_movement_rect = Rect2(66, -158, 429, 316) facing_direction = Vector2(-1, 0) -[node name="CameraFocusMarker" parent="Ground" index="6"] -limit_left = 0 -limit_top = -158 -limit_right = 564 -limit_bottom = 158 - [node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"] position = Vector2(45, -76) scale = Vector2(1.05, 1.05) diff --git a/scene/ground/scene/c02/s05_一楼内侧楼道.tscn b/scene/ground/scene/c02/s05_一楼内侧楼道.tscn index 76d15cf9..f4429685 100644 --- a/scene/ground/scene/c02/s05_一楼内侧楼道.tscn +++ b/scene/ground/scene/c02/s05_一楼内侧楼道.tscn @@ -179,6 +179,7 @@ hook_method = "wood_puppet" position = Vector2(-108, -168) packed_scene = ExtResource("10_7mq0m") quit_closeup_on_cancel = false +on_display_changed_volumn_db = -50.0 action_key = 3 first_interact_os_key = "c02_一楼戏台" @@ -343,10 +344,7 @@ player_movement_rect = Rect2(23, -158, 677, 316) current = true [node name="CameraFocusMarker" parent="Ground" index="6"] -limit_left = 0 -limit_top = -158 limit_right = 716 -limit_bottom = 158 [node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"] position = Vector2(45, -9) diff --git a/scene/ground/scene/c02/s08_瞎子卧室.tscn b/scene/ground/scene/c02/s08_瞎子卧室.tscn index c3dff033..0c2fa0da 100644 --- a/scene/ground/scene/c02/s08_瞎子卧室.tscn +++ b/scene/ground/scene/c02/s08_瞎子卧室.tscn @@ -197,13 +197,11 @@ texture_scale = 0.15 [node name="Closeup画" parent="Ground/DeployLayer" index="3" instance=ExtResource("10_a48k2")] position = Vector2(214, -19) packed_scene = ExtResource("11_mc126") -pause_sfx_on_display = true enabled = false [node name="Closeup讨厌他们" parent="Ground/DeployLayer" index="4" instance=ExtResource("10_a48k2")] position = Vector2(214, -19) packed_scene = ExtResource("16_nub1x") -pause_sfx_on_display = true enabled = false [node name="灯座Sprite2D" type="Sprite2D" parent="Ground/DeployLayer" index="5"]