Files
autgame/menus/scripts/mode_select_dialog.gd
T

89 lines
2.4 KiB
GDScript

class_name ModeSelectDialog
extends CanvasLayer
## Logica del dialog Target/Infinita. La costruzione visuale è in ModeSelectView.
signal mode_chosen
signal back_requested
var target_button: Button
var infinite_button: Button
var zen_button: CheckButton
var play_button: Button
var back_button: Button
var card: Control
var _capture_enabled := false
func _ready() -> void:
process_mode = Node.PROCESS_MODE_ALWAYS
layer = 30
_capture_enabled = OS.get_cmdline_user_args().has("--capture-menus")
visible = false
var view := ModeSelectView.build(self)
card = view.card
target_button = view.target
infinite_button = view.infinite
zen_button = view.zen
play_button = view.play
back_button = view.back
view.group.pressed.connect(_on_mode_changed)
play_button.pressed.connect(_on_play)
back_button.pressed.connect(_on_back)
func show_menu() -> void:
if Settings.game_mode == 2:
infinite_button.button_pressed = true
target_button.button_pressed = false
zen_button.button_pressed = false
else:
target_button.button_pressed = true
infinite_button.button_pressed = false
zen_button.button_pressed = Settings.game_mode == 1
_on_mode_changed()
visible = true
get_tree().paused = true
_animate_in()
if _capture_enabled:
_capture_after_animation()
func hide_menu() -> void:
visible = false
get_tree().paused = false
func _on_mode_changed(_button: BaseButton = null) -> void:
zen_button.visible = target_button.button_pressed
func _on_back() -> void:
hide_menu()
back_requested.emit()
func _on_play() -> void:
Settings.game_mode = 2 if infinite_button.button_pressed else 1 if zen_button.button_pressed else 0
Settings.save_settings()
hide_menu()
mode_chosen.emit()
func _animate_in() -> void:
card.modulate.a = 0.0
card.scale = Vector2(0.93, 0.93)
card.pivot_offset = card.size * 0.5
play_button.modulate.a = 0.0
var tween := create_tween()
tween.set_pause_mode(Tween.TWEEN_PAUSE_PROCESS)
tween.set_parallel(true)
tween.tween_property(card, "modulate:a", 1.0, 0.22)
tween.tween_property(card, "scale", Vector2.ONE, 0.38).set_trans(Tween.TRANS_BACK).set_ease(Tween.EASE_OUT)
tween.tween_property(play_button, "modulate:a", 1.0, 0.3).set_delay(0.24)
func _capture_after_animation() -> void:
await get_tree().create_timer(0.7, true).timeout
await RenderingServer.frame_post_draw
get_viewport().get_texture().get_image().save_png("/tmp/autgame_menu_mode_dialog.png")