增加 closeup 时隐藏 hud 的功能

This commit is contained in:
cakipaul 2025-07-29 16:10:16 +08:00
parent b6ede0c4e6
commit f9263862d2
12 changed files with 47 additions and 27 deletions

View File

@ -8,9 +8,12 @@ signal exit(arg)
@export var packed_scene: PackedScene
@export var quit_closeup_on_cancel := true
@export var on_display_hide_hud := 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
# 在 exit 信号前,禁用 cancel
var _holding_cancel_before_exit := false
var current_child: Node
@ -22,11 +25,17 @@ func _ready() -> void:
interacted.connect(display)
func hold_cancel_before_exit() -> void:
_holding_cancel_before_exit = true
# 可以直接调用
func display() -> void:
if current_child:
return
if packed_scene:
if on_display_hide_hud and SceneManager.get_ground().display_hud:
SceneManager.get_prop_hud().hide_hud()
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)
@ -43,6 +52,8 @@ func display() -> void:
func _exit(arg = null):
if current_child:
if on_display_hide_hud and SceneManager.get_ground().display_hud:
SceneManager.get_prop_hud().display_hud()
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")
@ -54,14 +65,17 @@ func _exit(arg = null):
exit.emit(arg)
# 退出时,恢复 sign_mark 的输入
sign_mark.pass_unhandled_input = false
# exit 信号后,恢复处理 cancel 事件
_holding_cancel_before_exit = false
func _unhandled_input(event: InputEvent) -> void:
if not current_child:
return
if quit_closeup_on_cancel and event.is_action_pressed("cancel"):
get_viewport().set_input_as_handled()
_exit()
if event.is_action_pressed("cancel"):
if quit_closeup_on_cancel and not _holding_cancel_before_exit:
get_viewport().set_input_as_handled()
_exit()
# 在有特写界面时,阻塞 interact 输入
elif event.is_action_pressed("interact"):
get_viewport().set_input_as_handled()

View File

@ -131,6 +131,7 @@ content_key = "c02_海报1"
position = Vector2(253, -31)
texture = ExtResource("10_jg8g0")
packed_scene = ExtResource("11_jg8g0")
on_display_hide_hud = true
first_interact_os_key = "c02_海报_剪辫子侦探"
[node name="青岛啤酒" parent="Ground/DeployLayer" index="7" instance=ExtResource("12_0fckv")]
@ -260,10 +261,7 @@ player_movement_rect = Rect2(19, -158, 667, 316)
facing_direction = Vector2(1, 0)
[node name="CameraFocusMarker" parent="Ground" index="6"]
limit_left = 0
limit_top = -158
limit_right = 700
limit_bottom = 158
[node name="PlayerLine2D" parent="Ground/ParallaxForeground" index="2"]
points = PackedVector2Array(19, 150, 686, 150)

View File

@ -644,6 +644,7 @@ texture = ExtResource("22_3y5s5")
[node name="Closeup敲门游戏" parent="Ground/DeployLayer" index="23" instance=ExtResource("23_81juy")]
position = Vector2(466, 3)
packed_scene = ExtResource("24_0o4rt")
on_display_hide_hud = true
collision_width_and_x = Vector2(40, 0)
[node name="Ambush惊悚闪电" parent="Ground/DeployLayer" index="24" instance=ExtResource("25_iyaiw")]
@ -666,6 +667,7 @@ frame_progress = 0.643855
z_index = 6
position = Vector2(2063, 50)
packed_scene = ExtResource("26_yy4fp")
on_display_hide_hud = true
action_key = 3
[node name="Npc井边疯子" parent="Ground/DeployLayer" index="28" instance=ExtResource("35_plfv5")]
@ -1059,10 +1061,7 @@ player_movement_rect = Rect2(17, -158, 2233, 316)
facing_direction = Vector2(1, 0)
[node name="CameraFocusMarker" parent="Ground" index="6"]
limit_left = 0
limit_top = -158
limit_right = 2380
limit_bottom = 158
[node name="BGParallaxLayer" parent="Ground/ParallaxForeground" index="0"]
use_parent_material = true

View File

@ -92,6 +92,7 @@ texture = ExtResource("9_k74x7")
unique_name_in_owner = true
position = Vector2(189, 15)
packed_scene = ExtResource("7_fvlg0")
on_display_hide_hud = true
first_interact_os_key = "c02_保卫科祭台os"
[node name="Closeup老鼠精" parent="Ground/DeployLayer" index="7" instance=ExtResource("6_66gue")]
@ -99,11 +100,13 @@ light_mask = 5
position = Vector2(207.5, -40.5)
texture = ExtResource("11_ffvrp")
packed_scene = ExtResource("8_cm3g6")
on_display_hide_hud = true
[node name="Closeup花名册" parent="Ground/DeployLayer" index="8" instance=ExtResource("6_66gue")]
unique_name_in_owner = true
position = Vector2(351, 31)
packed_scene = ExtResource("6_fvlg0")
on_display_hide_hud = true
first_interact_os_key = "c02_保卫科花名册os"
[node name="煤油灯" type="Sprite2D" parent="Ground/DeployLayer" index="9"]

View File

@ -179,6 +179,7 @@ hook_method = "wood_puppet"
position = Vector2(-108, -168)
packed_scene = ExtResource("10_7mq0m")
quit_closeup_on_cancel = false
on_display_hide_hud = true
on_display_changed_volumn_db = 0.0
action_key = 3
first_interact_os_key = "c02_一楼戏台"
@ -219,6 +220,7 @@ texture = ExtResource("8_mrltr")
[node name="Closeup戏台" parent="Ground/DeployLayer" index="7" instance=ExtResource("10_2yvhw")]
position = Vector2(305, -249)
packed_scene = ExtResource("11_2yvhw")
on_display_hide_hud = true
first_interact_os_key = "c02_一楼戏台"
[node name="Note一楼内侧通道" parent="Ground/DeployLayer" index="8" instance=ExtResource("10_8t4w6")]

View File

@ -1179,12 +1179,14 @@ quit_closeup_on_cancel = false
[node name="Closeup水盆" parent="Ground/DeployLayer" index="16" instance=ExtResource("11_owxx3")]
position = Vector2(289, 16)
packed_scene = ExtResource("16_p6da7")
on_display_hide_hud = true
first_interact_os_key = "c02_二楼水盆"
[node name="Closeup谢幕演出" parent="Ground/DeployLayer" index="17" instance=ExtResource("11_owxx3")]
position = Vector2(518, -272)
packed_scene = ExtResource("25_m28ab")
quit_closeup_on_cancel = false
on_display_hide_hud = true
action_key = 3
[node name="c02_final" type="Node2D" parent="Ground/DeployLayer" index="18"]
@ -1352,10 +1354,7 @@ player_movement_rect = Rect2(26, -158, 874, 316)
facing_direction = Vector2(1, 0)
[node name="CameraFocusMarker" parent="Ground" index="6"]
limit_left = 0
limit_top = -158
limit_right = 927
limit_bottom = 158
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(0, -5)

View File

@ -77,6 +77,7 @@ position = Vector2(-5, 78)
position = Vector2(292, -11)
texture = ExtResource("10_6ivku")
packed_scene = ExtResource("11_vxng8")
on_display_hide_hud = true
first_interact_os_key = "c02_海报_戏法班"
[node name="Note老鼠洞" parent="Ground/DeployLayer" index="7" instance=ExtResource("13_s75vl")]
@ -115,10 +116,7 @@ position = Vector2(41, 98)
player_movement_rect = Rect2(37, -158, 573, 316)
[node name="CameraFocusMarker" parent="Ground" index="6"]
limit_left = 0
limit_top = -158
limit_right = 645
limit_bottom = 158
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
position = Vector2(11, -1)

View File

@ -197,11 +197,13 @@ 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")
on_display_hide_hud = true
enabled = false
[node name="Closeup讨厌他们" parent="Ground/DeployLayer" index="4" instance=ExtResource("10_a48k2")]
position = Vector2(214, -19)
packed_scene = ExtResource("16_nub1x")
on_display_hide_hud = true
enabled = false
[node name="灯座Sprite2D" type="Sprite2D" parent="Ground/DeployLayer" index="5"]
@ -361,10 +363,7 @@ texture = SubResource("GradientTexture2D_bp5fr")
current = true
[node name="CameraFocusMarker" parent="Ground" index="6"]
limit_left = 0
limit_top = -158
limit_right = 725
limit_bottom = 158
[node name="Sprite2D" type="Sprite2D" parent="Ground/ParallaxForeground/BGParallaxLayer" index="0"]
position = Vector2(291, 94)

View File

@ -183,6 +183,7 @@ texture = ExtResource("8_3ftnp")
position = Vector2(349, 15)
texture = ExtResource("18_3kyh4")
packed_scene = ExtResource("18_5t4pt")
on_display_hide_hud = true
sign_mark_offset = Vector2(0, -7.93)
first_interact_os_key = "c02_互动小蝉头套"
@ -271,12 +272,6 @@ position = Vector2(315, 98)
player_movement_rect = Rect2(50, -158, 460, 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"]
visible = false
position = Vector2(193, 0)

View File

@ -255,6 +255,7 @@ texture = SubResource("GradientTexture2D_4rrrd")
position = Vector2(573, -6)
texture = ExtResource("11_amci2")
packed_scene = ExtResource("7_d27sg")
on_display_hide_hud = true
[node name="小蜡烛系列" type="Node2D" parent="Ground/DeployLayer" index="6"]
position = Vector2(0, 6)
@ -360,10 +361,7 @@ player_movement_rect = Rect2(30, -158, 693, 316)
facing_direction = Vector2(1, 0)
[node name="CameraFocusMarker" parent="Ground" index="6"]
limit_left = 0
limit_top = -158
limit_right = 749
limit_bottom = 158
[node name="FGSprite2D" parent="Ground/ParallaxForeground/FGParallaxLayer" index="0"]
visible = false

View File

@ -263,6 +263,13 @@ func _chechout_stage(s: int, play_sfx := true) -> void:
stage = s
_hide_all()
var display_handle_outline = false
if s >= 3:
# 隐藏道具栏
SceneManager.get_prop_hud().hide_hud()
# 禁止退出特写
var closeup = get_parent() as Closeup2D
if closeup:
closeup.hold_cancel_before_exit()
# 1关闭 2打开 3放入小蝉人偶 4全部放置正确可摇手柄 5已播放完成
match s:
0:
@ -327,6 +334,10 @@ func _unhandled_input(event: InputEvent) -> void:
hud.on_toggle_invalid_prop()
elif event.is_action_pressed("cancel"):
get_viewport().set_input_as_handled()
if stage == 3:
# 摇把手阶段不可退出
return
SceneManager.get_prop_hud().display_hud()
exit.emit(false)

View File

@ -73,6 +73,9 @@ var shooting = false
func checkout_round(r: int):
if r == 0:
# 游戏开始,隐藏 hud
SceneManager.get_prop_hud().hide_hud()
round_id = r
# 关闭所有碰撞
for i in range(3):
@ -260,6 +263,7 @@ func game_win() -> void:
var scene = DialogueManager.show_dialogue_balloon_scene(dialog_balloon_scene, dialogue_c02, "c02_弹珠游戏4")
await scene.ball_dialogue_ended
await Util.wait(3.0)
SceneManager.get_prop_hud().display_hud()
exit.emit(true)