79 lines
2.3 KiB
GDScript
79 lines
2.3 KiB
GDScript
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()
|
|
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
|
|
return
|
|
button.disabled = true
|
|
DialogueManager.show_dialogue_balloon(dialogue, "c02_s03_敲门游戏intro")
|
|
await DialogueManager.dialogue_ended
|
|
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
|