89 lines
2.4 KiB
GDScript
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")
|