first commit
This commit is contained in:
171
godot_client/scripts/main.gd
Normal file
171
godot_client/scripts/main.gd
Normal file
@@ -0,0 +1,171 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user