88 lines
2.3 KiB
GDScript
88 lines
2.3 KiB
GDScript
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左
|
|
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)
|
|
|
|
# 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", [])
|
|
_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
|
|
_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:
|
|
if event.is_action_pressed("cancel"):
|
|
get_viewport().set_input_as_handled()
|
|
get_parent().exit.emit(_check_success())
|