extends CanvasLayer signal exit(success: bool) @onready var knock_wrong_sfx = $KnockWrong as AudioStreamPlayer @onready var knock_light_sfx = $KnockLight as AudioStreamPlayer @onready var knock_heavy_sfx = $KnockHeavy as AudioStreamPlayer @onready var drop_meat_sfx = $DropMeat 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) fail_time = Time.get_ticks_msec() button.disabled = true DialogueManager.show_dialogue_balloon(dialogue, "c02_s03_敲门游戏intro") await DialogueManager.dialogue_ended if ( # 未偷听,或已敲门成功,则禁用 not ArchiveManager.get_global_value("c02_eavesdrop_finished", false) or ArchiveManager.get_global_value("c02_meat_dropping", false) or ArchiveManager.get_global_value("c02_meat_given", false) ): button.disabled = true else: button.disabled = false var current_id = 0 var knock_time := 0.0 func _on_button_pressed() -> void: 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: knock_light_sfx.play() elif current_id > 1 and current_id <= 3: if diff > 800: failed() return knock_light_sfx.play() elif current_id > 3: if diff < 1000 or diff > 7000: failed() return knock_heavy_sfx.play() if current_id == 6: drop_meat_sfx.play() ArchiveManager.set_global_entry("c02_meat_dropping", true) 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 failed(): current_id = 0 knock_wrong_sfx.play() var current_time = Time.get_ticks_msec() if current_time - fail_time < 5000: return fail_time = current_time button.disabled = true DialogueManager.show_dialogue_balloon(dialogue, "c02_s03_敲门游戏fail") await DialogueManager.dialogue_ended button.disabled = false