Files
skelly/scenes/main/Main.gd
Vladimir nett00n Budylnikov 35ee2f9a5e
Some checks failed
Continuous Integration / Code Formatting (push) Successful in 33s
Continuous Integration / Code Quality Check (push) Successful in 28s
Continuous Integration / Test Execution (push) Failing after 16s
Continuous Integration / CI Summary (push) Failing after 3s
format
2025-10-01 15:35:34 +04:00

103 lines
2.9 KiB
GDScript

extends Control
const MAIN_MENU_SCENE = preload("res://scenes/ui/MainMenu.tscn")
const SETTINGS_MENU_SCENE = preload("res://scenes/ui/SettingsMenu.tscn")
var current_menu: Control = null
@onready var splash_screen: Node = $SplashScreen
func _ready() -> void:
DebugManager.log_debug("Main scene ready", "Main")
# Use alternative connection method with input handling
_setup_splash_screen_connection()
func _setup_splash_screen_connection() -> void:
# Wait for all nodes to be ready
await get_tree().process_frame
await get_tree().process_frame
# Try to find SplashScreen node
splash_screen = get_node_or_null("SplashScreen")
if not splash_screen:
DebugManager.log_warn(
"SplashScreen node not found, trying alternative methods", "Main"
)
# Try to find by class or group
var splash_nodes = get_tree().get_nodes_in_group("localizable")
for node in splash_nodes:
if node.scene_file_path.ends_with("SplashScreen.tscn"):
splash_screen = node
break
if splash_screen:
DebugManager.log_debug(
"SplashScreen node found: %s" % splash_screen.name, "Main"
)
# Try connecting to the signal if it exists
if splash_screen.has_signal("confirm_pressed"):
splash_screen.confirm_pressed.connect(_on_confirm_pressed)
DebugManager.log_debug(
"Connected to confirm_pressed signal", "Main"
)
else:
# Fallback: use input handling directly on the main scene
DebugManager.log_warn("Using fallback input handling", "Main")
_use_fallback_input_handling()
else:
DebugManager.log_error("Could not find SplashScreen node", "Main")
_use_fallback_input_handling()
func _use_fallback_input_handling() -> void:
# Fallback: handle input directly in the main scene
set_process_unhandled_input(true)
func _unhandled_input(event: InputEvent) -> void:
if splash_screen and splash_screen.is_inside_tree():
# Forward input to splash screen or handle directly
if event.is_action_pressed("action_confirm"):
_on_confirm_pressed()
get_viewport().set_input_as_handled()
func _on_confirm_pressed() -> void:
DebugManager.log_debug("Transitioning to main menu", "Main")
splash_screen.queue_free()
show_main_menu()
func show_main_menu() -> void:
clear_current_menu()
var main_menu = MAIN_MENU_SCENE.instantiate()
main_menu.open_settings.connect(_on_open_settings)
add_child(main_menu)
current_menu = main_menu
func show_settings_menu() -> void:
clear_current_menu()
var settings_menu = SETTINGS_MENU_SCENE.instantiate()
settings_menu.back_to_main_menu.connect(_on_back_to_main_menu)
add_child(settings_menu)
current_menu = settings_menu
func clear_current_menu() -> void:
if current_menu:
current_menu.queue_free()
current_menu = null
func _on_open_settings() -> void:
DebugManager.log_debug("Opening settings menu", "Main")
show_settings_menu()
func _on_back_to_main_menu() -> void:
DebugManager.log_debug("Back to main menu", "Main")
show_main_menu()