Files
Code_of_Conquest/godot_client/scenes/main.tscn
2025-11-24 23:10:55 -06:00

184 lines
5.0 KiB
Plaintext

[gd_scene load_steps=5 format=3 uid="uid://b8qxqvw3n2k4r"]
[ext_resource type="Script" uid="uid://d100mupmyal5" path="res://scripts/main.gd" id="1_main"]
[ext_resource type="Theme" uid="uid://bviqieumdiccr" path="res://assets/themes/main_theme.tres" id="1_sugp2"]
[ext_resource type="Texture2D" uid="uid://cja8kui47qb3d" path="res://assets/ui/main_menu.png" id="3_sugp2"]
[sub_resource type="GDScript" id="GDScript_0wfyh"]
script/source = "extends Button
class_name CustomButton
## Custom Button Component
##
## Enhanced button with icon support, loading state, and themed styling.
##
## Features:
## - Optional icon (left or right)
## - Loading spinner state
## - Hover effects
## - Disabled state management
## - Multiple visual variants
##
## Usage:
## var btn = CustomButton.new()
## btn.text = \"Login\"
## btn.variant = CustomButton.Variant.PRIMARY
## btn.set_loading(true)
signal button_clicked()
# Button variants
enum Variant {
PRIMARY, # Gold accent button (main actions)
SECONDARY, # Standard button
DANGER, # Red button (destructive actions)
SUCCESS, # Green button (positive actions)
GHOST # Transparent button (subtle actions)
}
# Icon position
enum IconPosition {
LEFT,
RIGHT,
NONE
}
# Export variables (editable in Godot Inspector)
@export var variant: Variant = Variant.SECONDARY
@export var icon_texture: Texture2D = null
@export var icon_position: IconPosition = IconPosition.LEFT
@export var show_loading: bool = false
# Internal nodes (set up in _ready)
#var _icon: TextureRect = null
#var _label: Label = null
#var _spinner: TextureRect = null
func _ready() -> void:
# Apply theme based on variant
# Connect press signal
pressed.connect(_on_button_pressed)
## Set loading state
func set_loading(loading: bool) -> void:
show_loading = loading
disabled = loading
_update_loading_state()
## Internal: Update loading spinner
func _update_loading_state() -> void:
# TODO: Implement loading spinner when scene is set up
if show_loading:
text = \"Loading...\"
else:
# Restore original text
pass
## Internal: Handle button press
func _on_button_pressed() -> void:
if not disabled and not show_loading:
button_clicked.emit()
"
[node name="Main" type="Control"]
layout_mode = 3
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
theme = ExtResource("1_sugp2")
script = ExtResource("1_main")
[node name="BackgroundPanel" type="Panel" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="TextureRect" type="TextureRect" parent="BackgroundPanel"]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
texture = ExtResource("3_sugp2")
expand_mode = 4
stretch_mode = 5
[node name="CenterContainer" type="CenterContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
[node name="PanelContainer" type="PanelContainer" parent="CenterContainer"]
layout_mode = 2
[node name="MarginContainer" type="MarginContainer" parent="CenterContainer/PanelContainer"]
layout_mode = 2
theme = ExtResource("1_sugp2")
theme_override_constants/margin_left = 15
theme_override_constants/margin_top = 15
theme_override_constants/margin_right = 15
theme_override_constants/margin_bottom = 15
[node name="VBoxContainer" type="VBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer"]
layout_mode = 2
theme_override_constants/separation = 20
[node name="TitleLabel" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
text = "Code of Conquest"
horizontal_alignment = 1
vertical_alignment = 1
[node name="Spacer1" type="Control" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(0, 20)
layout_mode = 2
[node name="WelcomeLabel" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
text = "Welcome, Player"
horizontal_alignment = 1
vertical_alignment = 1
[node name="StatusLabel" type="Label" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
text = "Loading..."
horizontal_alignment = 1
vertical_alignment = 1
[node name="Spacer2" type="Control" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer"]
custom_minimum_size = Vector2(0, 30)
layout_mode = 2
[node name="ButtonContainer" type="HBoxContainer" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_constants/separation = 16
alignment = 1
[node name="PlayNowButton" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/ButtonContainer"]
custom_minimum_size = Vector2(150, 0)
layout_mode = 2
text = "Play Now"
script = SubResource("GDScript_0wfyh")
[node name="LogoutButton" type="Button" parent="CenterContainer/PanelContainer/MarginContainer/VBoxContainer/ButtonContainer"]
custom_minimum_size = Vector2(150, 0)
layout_mode = 2
text = "Logout"
script = SubResource("GDScript_0wfyh")