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")