xiandie/scene/ground/script/c02/敲门游戏.gd

63 lines
1.8 KiB
GDScript

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")