first commit

This commit is contained in:
2025-11-24 23:10:55 -06:00
commit 8315fa51c9
279 changed files with 74600 additions and 0 deletions

View 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)