extends CanvasLayer signal exit(success: bool) @onready var knock_sfx = $Knock as AudioStreamPlayer @onready var button = $TextureButton as TextureButton var dialogue = preload("res://asset/dialogue/c02.dialogue") var fail_time = 0.0 func _ready() -> void: layer = GlobalConfig.CANVAS_LAYER_LITTLE_GAME button.pressed.connect(_on_button_pressed) DialogueManager.show_dialogue_balloon(dialogue, "c02_s03_敲门游戏intro") fail_time = Time.get_ticks_msec() if ( # 未偷听,或已敲门成功,则禁用 not ArchiveManager.get_global_value("c02_eavesdrop_finished", false) or ArchiveManager.get_global_value("c02_meat_bucket_enabled", false) ): button.disabled = true var current_id = 0 var knock_time := 0.0 func _on_button_pressed() -> void: knock_sfx.play() current_id += 1 var last_knock_time = knock_time knock_time = Time.get_ticks_msec() var diff = knock_time - last_knock_time # 敲门游戏节奏: 三快(<0.8s)三慢(>1s & <5s) if current_id > 1 and current_id <= 3: if diff > 800: current_id = 0 try_play_failed() elif current_id > 3: if diff < 1000 or diff > 5000: current_id = 0 try_play_failed() if current_id == 6: ArchiveManager.set_global_entry("c02_eavesdrop_finished", true) current_id = 0 button.disabled = true # 肉落下的声音,然后自动退出界面 SceneManager.pop_debug_dialog_info("音效", "肉落下的声音(敲门游戏成功)") await get_tree().create_timer(2.0).timeout exit.emit(true) else: SceneManager.pop_debug_dialog_info("音效", "敲门:" + str(current_id)) func try_play_failed(): var current_time = Time.get_ticks_msec() if current_time - fail_time < 5000: return fail_time = current_time DialogueManager.show_dialogue_balloon(dialogue, "c02_s03_敲门游戏fail")