优化 closeup 退出逻辑;quit_closeup_on_cancel

This commit is contained in:
cakipaul 2025-07-09 20:48:46 +08:00
parent b97beaa66d
commit 1cb4e17309
8 changed files with 22 additions and 22 deletions

View File

@ -7,7 +7,7 @@ class_name Closeup2D
signal exit(arg) signal exit(arg)
@export var packed_scene: PackedScene @export var packed_scene: PackedScene
@export var quit_closeup_on_escape := true @export var quit_closeup_on_cancel := true
@export_tool_button("新建特写场景") var create_closeup_scene = _create_scene_with_script @export_tool_button("新建特写场景") var create_closeup_scene = _create_scene_with_script
var current_child: Node var current_child: Node
@ -52,10 +52,7 @@ func _exit(arg = null):
func _unhandled_input(event: InputEvent) -> void: func _unhandled_input(event: InputEvent) -> void:
if not current_child: if not current_child:
return return
if ( if quit_closeup_on_cancel and event.is_action_pressed("cancel"):
quit_closeup_on_escape
and (event.is_action_pressed("cancel") or event.is_action_pressed("escape"))
):
_exit() _exit()
get_viewport().set_input_as_handled() get_viewport().set_input_as_handled()
# 在有特写界面时,阻塞 interact 输入 # 在有特写界面时,阻塞 interact 输入
@ -73,7 +70,9 @@ var script_root_dir = "res://scene/ground/script/"
func _create_scene_with_script(): func _create_scene_with_script():
if packed_scene: if packed_scene:
print_rich("[color=orange][Closeup2D] packed_scene already exists, skip creating new scene and script.") print_rich(
"[color=orange][Closeup2D] packed_scene already exists, skip creating new scene and script."
)
return return
var script = script_template.duplicate(true) as Script var script = script_template.duplicate(true) as Script
var new_packed_scene = PackedScene.new() var new_packed_scene = PackedScene.new()

View File

@ -44,7 +44,7 @@ autoplay = "小蝶探头"
[node name="Closeup鬼差探头" parent="Ground/DeployLayer" index="3" instance=ExtResource("8_2jx0x")] [node name="Closeup鬼差探头" parent="Ground/DeployLayer" index="3" instance=ExtResource("8_2jx0x")]
packed_scene = ExtResource("5_dnd0r") packed_scene = ExtResource("5_dnd0r")
quit_closeup_on_escape = false quit_closeup_on_cancel = false
[node name="Light" parent="Ground/AmbientLayer" index="0" instance=ExtResource("5_rw4mf")] [node name="Light" parent="Ground/AmbientLayer" index="0" instance=ExtResource("5_rw4mf")]
position = Vector2(123, -20) position = Vector2(123, -20)

View File

@ -176,7 +176,7 @@ hook_method = "wood_puppet"
[node name="Closeup拿人偶后记忆闪回" parent="Ground/DeployLayer" index="5" instance=ExtResource("10_2yvhw")] [node name="Closeup拿人偶后记忆闪回" parent="Ground/DeployLayer" index="5" instance=ExtResource("10_2yvhw")]
position = Vector2(-108, -168) position = Vector2(-108, -168)
packed_scene = ExtResource("10_7mq0m") packed_scene = ExtResource("10_7mq0m")
quit_closeup_on_escape = false quit_closeup_on_cancel = false
action_key = 3 action_key = 3
first_interact_os_key = "c02_一楼戏台" first_interact_os_key = "c02_一楼戏台"

View File

@ -1164,7 +1164,7 @@ frame_progress = 0.121203
[node name="Closeup弹珠游戏" parent="Ground/DeployLayer" index="15" instance=ExtResource("11_owxx3")] [node name="Closeup弹珠游戏" parent="Ground/DeployLayer" index="15" instance=ExtResource("11_owxx3")]
position = Vector2(322, -269) position = Vector2(322, -269)
packed_scene = ExtResource("12_intre") packed_scene = ExtResource("12_intre")
quit_closeup_on_escape = false quit_closeup_on_cancel = false
[node name="Closeup水盆" parent="Ground/DeployLayer" index="16" instance=ExtResource("11_owxx3")] [node name="Closeup水盆" parent="Ground/DeployLayer" index="16" instance=ExtResource("11_owxx3")]
position = Vector2(289, 16) position = Vector2(289, 16)
@ -1174,7 +1174,7 @@ first_interact_os_key = "c02_二楼水盆"
[node name="Closeup谢幕演出" parent="Ground/DeployLayer" index="17" instance=ExtResource("11_owxx3")] [node name="Closeup谢幕演出" parent="Ground/DeployLayer" index="17" instance=ExtResource("11_owxx3")]
position = Vector2(518, -272) position = Vector2(518, -272)
packed_scene = ExtResource("25_m28ab") packed_scene = ExtResource("25_m28ab")
quit_closeup_on_escape = false quit_closeup_on_cancel = false
action_key = 3 action_key = 3
[node name="c02_final" type="Node2D" parent="Ground/DeployLayer" index="18"] [node name="c02_final" type="Node2D" parent="Ground/DeployLayer" index="18"]

View File

@ -70,7 +70,7 @@ var quitting = false
func _unhandled_input(event: InputEvent) -> void: func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("escape") or event.is_action_pressed("cancel"): if event.is_action_pressed("cancel"):
if quitting: if quitting:
# 禁止手动退出,需要 exit.emit(true) # 禁止手动退出,需要 exit.emit(true)
get_viewport().set_input_as_handled() get_viewport().set_input_as_handled()

View File

@ -324,7 +324,7 @@ func _unhandled_input(event: InputEvent) -> void:
else: else:
# hud 无效shaking # hud 无效shaking
hud.on_toggle_invalid_prop() hud.on_toggle_invalid_prop()
elif event.is_action_pressed("escape"): elif event.is_action_pressed("cancel"):
get_viewport().set_input_as_handled() get_viewport().set_input_as_handled()
exit.emit(false) exit.emit(false)

View File

@ -166,9 +166,8 @@ func _move_button(delta: int) -> void:
func _unhandled_input(event: InputEvent) -> void: func _unhandled_input(event: InputEvent) -> void:
if not visible: if not visible:
return return
# 阻止输入事件传递给其他节点 if event.is_action_pressed("cancel"):
get_viewport().set_input_as_handled() get_viewport().set_input_as_handled()
if event.is_action_pressed("cancel") or event.is_action_pressed("escape"):
var success = ArchiveManager.archive.bayinhe_mode == "finished" var success = ArchiveManager.archive.bayinhe_mode == "finished"
exit.emit(success) exit.emit(success)
visible = false visible = false
@ -178,12 +177,16 @@ func _unhandled_input(event: InputEvent) -> void:
if ArchiveManager.archive.bayinhe_mode == "closed": if ArchiveManager.archive.bayinhe_mode == "closed":
# move button # move button
if event.is_action_pressed("up"): if event.is_action_pressed("up"):
get_viewport().set_input_as_handled()
_move_button(1) _move_button(1)
elif event.is_action_pressed("down"): elif event.is_action_pressed("down"):
get_viewport().set_input_as_handled()
_move_button(-1) _move_button(-1)
elif event.is_action_pressed("left"): elif event.is_action_pressed("left"):
get_viewport().set_input_as_handled()
current_selected_btn = clampi(current_selected_btn - 1, 0, 8) current_selected_btn = clampi(current_selected_btn - 1, 0, 8)
elif event.is_action_pressed("right"): elif event.is_action_pressed("right"):
get_viewport().set_input_as_handled()
current_selected_btn = clampi(current_selected_btn + 1, 0, 8) current_selected_btn = clampi(current_selected_btn + 1, 0, 8)

View File

@ -156,11 +156,8 @@ func _post_success():
func _unhandled_input(event: InputEvent) -> void: func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("escape") or event.is_action_pressed("bag"):
return
# block all input except "escape" or "bag"
get_viewport().set_input_as_handled()
if event.is_action_pressed("cancel"): if event.is_action_pressed("cancel"):
get_viewport().set_input_as_handled()
if game_finished: if game_finished:
success.emit() success.emit()
else: else:
@ -194,6 +191,7 @@ func _unhandled_input(event: InputEvent) -> void:
_rotate_part() _rotate_part()
handled = true handled = true
if handled: if handled:
get_viewport().set_input_as_handled()
$SfxMove.play() $SfxMove.play()
_display_selected() _display_selected()
_check_answer() _check_answer()