xiandie/scene/ground/script/c03/s04_closeup整理麻将游戏.gd

144 lines
4.5 KiB
GDScript3
Raw Normal View History

2025-07-09 15:04:08 +00:00
extends CanvasLayer
2025-07-09 16:07:36 +00:00
signal exit(success: bool)
2025-07-10 16:29:46 +00:00
var c03_dialog = preload("uid://b66v5hsf3tdox")
2025-07-09 15:04:08 +00:00
var mahjongs = {
2025-07-09 16:07:36 +00:00
"三条": preload("uid://b2ectbek7vksi"),
2025-07-09 15:04:08 +00:00
"三筒": preload("uid://b2pypf81rgqkw"),
2025-07-09 16:07:36 +00:00
"九筒": preload("uid://dis6qtf1hvop2"),
2025-07-09 15:04:08 +00:00
"二筒": preload("uid://doxc87cp3e8i4"),
2025-07-09 16:07:36 +00:00
"伍万": preload("uid://bo4hrg3sqpoou"),
2025-07-09 15:04:08 +00:00
"一条": preload("uid://dduhqah1p81tb"),
"一筒": preload("uid://dwyk0e1c2eg37")
}
2025-07-09 16:07:36 +00:00
var answer_of_in_hand_mahjongs = {
preload("uid://b2pypf81rgqkw"): "三筒",
preload("uid://dis6qtf1hvop2"): "九筒",
2025-07-09 16:07:36 +00:00
preload("uid://b2ectbek7vksi"): "三条"
}
2025-07-09 15:04:08 +00:00
@onready var box_init_btn = %"0"
@onready var box_mahjongs_btn: Array[TextureButton] = [%"1", %"2", %"3", %"4", %"5", %"6", %"7", %"8", %"9", %"10", %"11"]
@onready var hand_mahjongs_btn: Array[TextureButton] = [%"12", %"13", %"14"]
2025-07-09 15:04:08 +00:00
var freezing = true
var success = false
func _ready() -> void:
layer = GlobalConfig.CANVAS_LAYER_LITTLE_GAME
2025-07-09 16:07:36 +00:00
_toggle_activation_for_all(false)
if EventManager.get_stage("c03_mahjong_game") == 0 and not SceneManager.has_prop("prop_麻将2"):
2025-07-09 16:07:36 +00:00
%"12".visible = false
SceneManager.pop_center_notification("input_麻将游戏_麻将不足")
await Util.wait(3.0)
exit.emit(false)
return
# 游戏一开始就收起玩家麻将道具,设置 c03_mahjong_game 为 1
EventManager.set_stage_if_greater("c03_mahjong_game", 1)
SceneManager.disable_prop_item("prop_麻将")
SceneManager.disable_prop_item("prop_麻将2")
2025-07-09 15:04:08 +00:00
box_init_btn.pressed.connect(_start_game)
2025-07-10 09:13:31 +00:00
box_init_btn.mouse_entered.connect(_toggle_activation.bind(box_init_btn, true))
box_init_btn.mouse_exited.connect(_toggle_activation.bind(box_init_btn, false))
2025-07-09 15:04:08 +00:00
for b in box_mahjongs_btn:
b.mouse_entered.connect(_toggel_hover.bind(b, true))
b.mouse_exited.connect(_toggel_hover.bind(b, false))
b.pressed.connect(_on_btn_pressed.bind(b))
for b in hand_mahjongs_btn:
b.mouse_entered.connect(_toggel_hover.bind(b, true))
b.mouse_exited.connect(_toggel_hover.bind(b, false))
b.pressed.connect(_on_btn_pressed.bind(b))
Util.timer(0.5, SceneManager.pop_center_notification.bind("input_麻将整理游戏_开始方式"))
2025-07-09 15:04:08 +00:00
func _start_game() -> void:
$SfxStart.play()
SceneManager.pop_center_notification("input_麻将游戏_交换规则")
2025-07-09 15:04:08 +00:00
box_init_btn.queue_free()
%"14".show()
2025-07-09 15:04:08 +00:00
freezing = false
func _toggel_hover(btn: TextureButton, hovering: bool) -> void:
if freezing:
return
if activated_btn and btn == activated_btn:
return
2025-07-10 09:13:31 +00:00
_toggle_activation(btn, hovering)
2025-07-09 15:04:08 +00:00
var activated_btn: TextureButton
func _on_btn_pressed(btn: TextureButton) -> void:
if freezing:
return
if btn != activated_btn:
if activated_btn:
_exchange_texture(btn, activated_btn)
2025-07-10 09:13:31 +00:00
_toggle_activation(btn, false)
_toggle_activation(activated_btn, false)
2025-07-09 15:04:08 +00:00
activated_btn = null
else:
$SfxSelect.play()
2025-07-10 09:13:31 +00:00
_toggle_activation(btn, true)
2025-07-09 15:04:08 +00:00
activated_btn = btn
else:
$SfxSelect.play()
2025-07-10 09:13:31 +00:00
_toggle_activation(btn, false)
2025-07-09 15:04:08 +00:00
activated_btn = null
_check_if_success()
func _exchange_texture(btn1: TextureButton, btn2: TextureButton) -> void:
if btn1 and btn2:
$SfxSwitch.play()
var texture = btn1.texture_normal
btn1.texture_normal = btn2.texture_normal
btn2.texture_normal = texture
2025-07-10 09:13:31 +00:00
func _toggle_activation(btn: TextureButton, hightlight: bool) -> void:
2025-07-09 15:04:08 +00:00
if null == btn:
return
2025-07-10 09:13:31 +00:00
btn.get_node("光束").enabled = hightlight
2025-07-09 15:04:08 +00:00
func _toggle_activation_for_all(activated: bool) -> void:
if box_init_btn:
2025-07-10 09:13:31 +00:00
_toggle_activation(box_init_btn, activated)
2025-07-09 15:04:08 +00:00
for b in box_mahjongs_btn:
2025-07-10 09:13:31 +00:00
_toggle_activation(b, activated)
2025-07-09 15:04:08 +00:00
for b in hand_mahjongs_btn:
2025-07-10 09:13:31 +00:00
_toggle_activation(b, activated)
2025-07-09 15:04:08 +00:00
func _check_if_success() -> void:
2025-07-09 16:07:36 +00:00
success = true
for hb in hand_mahjongs_btn:
if not hb.texture_normal in answer_of_in_hand_mahjongs:
success = false
break
2025-07-09 15:04:08 +00:00
if success:
2025-07-10 16:29:46 +00:00
var animation_player = $AnimationPlayer as AnimationPlayer
2025-07-09 15:04:08 +00:00
$SfxSuccess.play()
freezing = true
2025-07-09 16:07:36 +00:00
# 下一阶段
SceneManager.enable_important_item("prop_两个麻将", false)
EventManager.set_stage_if_greater("c03_mahjong_game", 2)
2025-07-10 16:29:46 +00:00
DialogueManager.show_dialogue_balloon(c03_dialog, "c03_s04_整理麻将游戏0")
animation_player.play("take_to_the_desk")
await DialogueManager.dialogue_ended
2025-07-21 10:51:08 +00:00
$"Sfx黑屏转场".global_play()
2025-07-10 16:29:46 +00:00
if animation_player.is_playing():
await animation_player.animation_finished
DialogueManager.show_dialogue_balloon(c03_dialog, "c03_s04_整理麻将游戏1", [GlobalConfig.DIALOG_IGNORE_INPUT])
SceneManager.black_transition(0.7, 7.0)
ArchiveManager.runtime_set("c03_mahjong_game_black_transition_time", 7.0)
await Util.wait(1.0)
2025-07-09 16:07:36 +00:00
exit.emit(true)