Files
whale-town-front/scenes/MainScene.gd
王浩 e335a35f6c feat(chat-ui): 更新聊天UI和场景配置
- 优化聊天消息显示
- 调整UI布局
2026-01-09 23:23:41 +08:00

142 lines
4.7 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
extends Control
# ============================================================================
# MainScene.gd - 主场景控制器
# ============================================================================
# 这是游戏的主入口场景,负责管理所有图像显示和界面切换
# 功能包括:
# - 登录/注册界面管理
# - 主游戏界面显示
# - 用户状态管理
# - 游戏功能模块入口
# ============================================================================
# 场景节点引用
@onready var auth_scene: Control = $AuthScene
@onready var main_game_ui: Control = $MainGameUI
@onready var chat_ui: Control = %ChatUI
@onready var user_label: Label = $MainGameUI/TopBar/HBoxContainer/UserLabel
@onready var logout_button: Button = $MainGameUI/TopBar/HBoxContainer/LogoutButton
# 游戏功能按钮
@onready var explore_button: Button = $MainGameUI/MainContent/CenterContainer/VBoxContainer/GameMenuGrid/ExploreButton
@onready var inventory_button: Button = $MainGameUI/MainContent/CenterContainer/VBoxContainer/GameMenuGrid/InventoryButton
@onready var shop_button: Button = $MainGameUI/MainContent/CenterContainer/VBoxContainer/GameMenuGrid/ShopButton
@onready var friends_button: Button = $MainGameUI/MainContent/CenterContainer/VBoxContainer/GameMenuGrid/FriendsButton
# 状态标签
@onready var level_label: Label = $MainGameUI/MainContent/CenterContainer/VBoxContainer/StatusPanel/StatusContainer/StatusGrid/LevelLabel
@onready var coins_label: Label = $MainGameUI/MainContent/CenterContainer/VBoxContainer/StatusPanel/StatusContainer/StatusGrid/CoinsLabel
@onready var exp_label: Label = $MainGameUI/MainContent/CenterContainer/VBoxContainer/StatusPanel/StatusContainer/StatusGrid/ExpLabel
@onready var energy_label: Label = $MainGameUI/MainContent/CenterContainer/VBoxContainer/StatusPanel/StatusContainer/StatusGrid/EnergyLabel
# 游戏状态
enum GameState {
AUTH, # 登录/注册状态
MAIN_GAME # 主游戏状态
}
var current_state: GameState = GameState.AUTH
var current_user: String = ""
# 玩家数据
var player_level: int = 1
var player_coins: int = 100
var player_exp: int = 0
var player_max_exp: int = 100
var player_energy: int = 100
var player_max_energy: int = 100
func _ready():
# 初始化游戏状态
setup_game()
# 连接登录成功信号
auth_scene.login_success.connect(_on_login_success)
# 连接按钮信号
logout_button.pressed.connect(_on_logout_pressed)
explore_button.pressed.connect(_on_explore_pressed)
inventory_button.pressed.connect(_on_inventory_pressed)
shop_button.pressed.connect(_on_shop_pressed)
friends_button.pressed.connect(_on_friends_pressed)
func setup_game():
# 设置初始状态为登录界面
show_auth_scene()
func show_auth_scene():
current_state = GameState.AUTH
auth_scene.visible = true
main_game_ui.visible = false
func show_main_game():
current_state = GameState.MAIN_GAME
auth_scene.visible = false
main_game_ui.visible = true
user_label.text = "当前用户: " + current_user
update_player_status()
print("进入主游戏界面")
func update_player_status():
level_label.text = "等级: " + str(player_level)
coins_label.text = "金币: " + str(player_coins)
exp_label.text = "经验: " + str(player_exp) + "/" + str(player_max_exp)
energy_label.text = "体力: " + str(player_energy) + "/" + str(player_max_energy)
func _on_login_success(username: String):
# 登录成功后的处理
current_user = username
print("用户 ", username, " 登录成功!")
# 连接到聊天服务器(在进入游戏界面之前)
print("🔌 开始连接聊天服务器...")
ChatManager.connect_to_chat_server()
show_main_game()
# 登录成功后隐藏聊天框需要按Enter才显示
chat_ui.hide_chat()
func _on_logout_pressed():
# 登出处理
current_user = ""
# 断开聊天服务器连接
print("🔌 断开聊天服务器...")
ChatManager.disconnect_from_chat_server()
show_auth_scene()
# 游戏功能按钮处理
func _on_explore_pressed():
print("探索小镇功能")
show_game_message("🗺️ 探索功能开发中...")
func _on_inventory_pressed():
print("背包功能")
show_game_message("🎒 背包功能开发中...")
func _on_shop_pressed():
print("商店功能")
show_game_message("🏪 商店功能开发中...")
func _on_friends_pressed():
print("好友功能")
show_game_message("👥 好友功能开发中...")
func show_game_message(message: String):
print("游戏消息: ", message)
# 这里可以添加UI提示框显示消息
# 处理全局输入
func _input(event):
if event.is_action_pressed("ui_cancel"):
match current_state:
GameState.AUTH:
# 在登录界面按ESC退出游戏
get_tree().quit()
GameState.MAIN_GAME:
# 在游戏中按ESC可能显示菜单或返回登录
show_auth_scene()