172 lines
5.2 KiB
GDScript
172 lines
5.2 KiB
GDScript
extends Control
|
|
## Main Scene
|
|
##
|
|
## Entry point for the application.
|
|
## Displays loading screen with logged in player info.
|
|
## Provides "Play Now" and "Logout" buttons for authenticated users.
|
|
|
|
# Scene paths
|
|
const SCENE_LOGIN = "res://scenes/auth/login.tscn"
|
|
const SCENE_CHARACTER_LIST = "res://scenes/character/character_list.tscn"
|
|
|
|
# UI node references (from scene)
|
|
@onready var background_panel: Panel = $BackgroundPanel
|
|
@onready var title_label: Label = $CenterContainer/PanelContainer/MarginContainer/VBoxContainer/TitleLabel
|
|
@onready var welcome_label: Label = $CenterContainer/PanelContainer/MarginContainer/VBoxContainer/WelcomeLabel
|
|
@onready var status_label: Label = $CenterContainer/PanelContainer/MarginContainer/VBoxContainer/StatusLabel
|
|
@onready var button_container: HBoxContainer = $CenterContainer/PanelContainer/MarginContainer/VBoxContainer/ButtonContainer
|
|
@onready var play_now_button: Button = $CenterContainer/PanelContainer/MarginContainer/VBoxContainer/ButtonContainer/PlayNowButton
|
|
@onready var logout_button: Button = $CenterContainer/PanelContainer/MarginContainer/VBoxContainer/ButtonContainer/LogoutButton
|
|
|
|
|
|
func _ready() -> void:
|
|
print("=== Code of Conquest Starting ===")
|
|
print("Godot Version: ", Engine.get_version_info())
|
|
print("Platform: ", OS.get_name())
|
|
|
|
# Connect button signals
|
|
play_now_button.pressed.connect(_on_play_now_pressed)
|
|
logout_button.pressed.connect(_on_logout_pressed)
|
|
|
|
# Initially hide buttons (will show after auth check)
|
|
button_container.visible = false
|
|
|
|
# Wait a frame for services to initialize
|
|
await get_tree().process_frame
|
|
|
|
# Check authentication status
|
|
_check_authentication()
|
|
|
|
|
|
|
|
## Check if user is authenticated
|
|
func _check_authentication() -> void:
|
|
if StateManager.is_authenticated():
|
|
print("[Main] User is authenticated")
|
|
|
|
# Get user info and display
|
|
var user_data = StateManager.get_current_user()
|
|
var username = user_data.get("email", user_data.get("name", "Player"))
|
|
welcome_label.text = "Welcome, %s" % username
|
|
|
|
status_label.text = "Validating session..."
|
|
|
|
# Validate token with backend
|
|
_validate_token()
|
|
else:
|
|
print("[Main] User not authenticated")
|
|
welcome_label.text = "Not authenticated"
|
|
status_label.text = "Please log in to continue"
|
|
|
|
# Wait a moment then navigate to login
|
|
await get_tree().create_timer(1.5).timeout
|
|
_navigate_to_login()
|
|
|
|
|
|
## Validate auth token with backend
|
|
func _validate_token() -> void:
|
|
# TODO: Replace with actual validation endpoint
|
|
# For now, assume token is valid and show buttons
|
|
|
|
print("[Main] Token validation not yet implemented")
|
|
print("[Main] Assuming valid, showing play options...")
|
|
|
|
# Uncomment when endpoint exists:
|
|
# HTTPClient.http_get("/api/v1/auth/validate", _on_token_valid, _on_token_invalid)
|
|
|
|
# For now, just show buttons (remove this when validation is implemented)
|
|
await get_tree().create_timer(0.5).timeout
|
|
_show_play_options()
|
|
|
|
|
|
## Show play/logout buttons
|
|
func _show_play_options() -> void:
|
|
status_label.text = "Ready to play!"
|
|
button_container.visible = true
|
|
|
|
|
|
## Handle valid token
|
|
func _on_token_valid(response: APIResponse) -> void:
|
|
if response.is_success():
|
|
print("[Main] Token is valid")
|
|
_show_play_options()
|
|
else:
|
|
print("[Main] Token validation failed: ", response.get_error_message())
|
|
_handle_invalid_token()
|
|
|
|
|
|
## Handle invalid token
|
|
#func _on_token_invalid(response: APIResponse) -> void:
|
|
#print("[Main] Token invalid or network error")
|
|
#_handle_invalid_token()
|
|
|
|
|
|
## Clear session and go to login
|
|
func _handle_invalid_token() -> void:
|
|
status_label.text = "Session expired"
|
|
welcome_label.text = "Please log in again"
|
|
button_container.visible = false
|
|
|
|
StateManager.clear_user_session()
|
|
|
|
await get_tree().create_timer(1.5).timeout
|
|
_navigate_to_login()
|
|
|
|
|
|
## Handle "Play Now" button press
|
|
func _on_play_now_pressed() -> void:
|
|
print("[Main] Play Now button pressed")
|
|
|
|
# Disable buttons during navigation
|
|
button_container.visible = false
|
|
status_label.text = "Loading characters..."
|
|
|
|
# Navigate to character list
|
|
_navigate_to_character_list()
|
|
|
|
|
|
## Handle "Logout" button press
|
|
func _on_logout_pressed() -> void:
|
|
print("[Main] Logout button pressed")
|
|
|
|
# Disable buttons
|
|
button_container.visible = false
|
|
status_label.text = "Logging out..."
|
|
welcome_label.text = "Goodbye!"
|
|
|
|
# Clear session
|
|
StateManager.clear_user_session()
|
|
|
|
# Wait a moment then navigate to login
|
|
await get_tree().create_timer(1.0).timeout
|
|
_navigate_to_login()
|
|
|
|
|
|
## Navigate to login scene
|
|
func _navigate_to_login() -> void:
|
|
print("[Main] Navigating to login...")
|
|
|
|
# Check if scene exists
|
|
if not FileAccess.file_exists(SCENE_LOGIN):
|
|
print("[Main] ERROR: Login scene not found at ", SCENE_LOGIN)
|
|
status_label.text = "Login scene not yet created.\nSee Phase 2 in GETTING_STARTED.md"
|
|
return
|
|
|
|
# Navigate
|
|
get_tree().change_scene_to_file(SCENE_LOGIN)
|
|
|
|
|
|
## Navigate to character list
|
|
func _navigate_to_character_list() -> void:
|
|
print("[Main] Navigating to character list...")
|
|
|
|
# Check if scene exists
|
|
if not FileAccess.file_exists(SCENE_CHARACTER_LIST):
|
|
print("[Main] ERROR: Character list scene not found at ", SCENE_CHARACTER_LIST)
|
|
status_label.text = "Character list not yet created.\nSee Phase 3 in GETTING_STARTED.md"
|
|
button_container.visible = true # Re-show buttons
|
|
return
|
|
|
|
# Navigate
|
|
get_tree().change_scene_to_file(SCENE_CHARACTER_LIST)
|