xiandie/scene/ground/script/c03/鬼母子游戏.gd

88 lines
2.3 KiB
GDScript3
Raw Normal View History

extends Node2D
# 游戏暂停
var freezing := true:
set(val):
freezing = val
for i in range(1, 5):
get_node("kid" + str(i)).freezing = val
var _state_map = ["", "", "", ""]
# 0背 1右 2正 3左
2025-07-09 12:39:43 +00:00
var states: Array = [0, 0, 0, 0]:
set(val):
if not val or len(val) != 4:
val = [0, 0, 0, 0]
states = val
ArchiveManager.set_global_entry("c03_s03_hariti_states", states)
2025-07-09 12:39:43 +00:00
# 2正 1右 3左 0背
var success_states: Array = [2, 1, 3, 0]
func _ready() -> void:
$"../刮刮乐".visible = true
var shaven = ArchiveManager.get_global_value("c03_s03_flyer_shaven")
states = ArchiveManager.get_global_value("c03_s03_hariti_states", [])
2025-07-09 12:39:43 +00:00
_setup_state()
if _check_success():
get_node("../刮刮乐").queue_free()
freezing = true
elif shaven:
_on_shaven_fulfilled()
else:
get_parent().shaven_fulfilled.connect(_on_shaven_fulfilled)
get_parent().shaven_fulfilled.connect(
ArchiveManager.set_global_entry.bind("c03_s03_flyer_shaven", true)
)
for i in range(1, 5):
get_node("kid" + str(i)).picked.connect(_on_picked.bind(i))
func _on_shaven_fulfilled():
get_node("../刮刮乐").queue_free()
freezing = false
var texture_dir = "res://asset/art/scene/c03/s03_瞎子理发店/鬼母子神/"
func _on_picked(node, id):
var kid_state = wrapi(states[id - 1] + 1, 0, 4)
states[id - 1] = kid_state
var texture_path = texture_dir + str(id) + _state_map[kid_state] + ".png"
node.texture = load(texture_path)
if not _check_success():
$SfxFlip.play()
elif not freezing:
$SfxSuccess.play()
freezing = true
2025-07-09 12:39:43 +00:00
_on_game_success()
func _on_game_success():
SceneManager.enable_prop_item_silently("prop_纸舌头")
SceneManager.enable_prop_item("prop_剪刀")
await SceneManager.get_inspector().quit_and_hidden
SceneManager.enable_prop_item("prop_纸舌头")
await SceneManager.get_inspector().quit_and_hidden
get_parent().exit.emit(true)
func _setup_state():
for i in range(1, 5):
var kid = get_node("kid" + str(i)) as Draggable2D
var kid_state = states[i - 1]
var texture_path = texture_dir + str(i) + _state_map[kid_state] + ".png"
kid.texture = load(texture_path)
func _check_success() -> bool:
return success_states == states
func _unhandled_input(event: InputEvent) -> void:
2025-07-09 12:39:43 +00:00
if event.is_action_pressed("cancel"):
get_viewport().set_input_as_handled()
get_parent().exit.emit(_check_success())