Refactor Godot architecture into AppShell, modular menus and game domains
This commit is contained in:
@@ -0,0 +1,88 @@
|
||||
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")
|
||||
Reference in New Issue
Block a user