From 73478c050043b088c4eef808dbf7fc75cb1ef955 Mon Sep 17 00:00:00 2001 From: moyin <2443444649@qq.com> Date: Wed, 24 Dec 2025 20:38:57 +0800 Subject: [PATCH] =?UTF-8?q?chore=EF=BC=9A=E5=AE=8C=E5=96=84=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E7=9B=AE=E5=BD=95=E7=BB=93=E6=9E=84=E5=92=8C=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E6=A1=86=E6=9E=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加核心系统框架目录结构 - 创建游戏模块化组织架构 - 添加数据配置和本地化支持 - 建立脚本分类管理体系 - 创建场景预制件管理目录 --- core/components/.gitkeep | 1 + core/input_box/.gitkeep | 1 + core/interfaces/.gitkeep | 1 + core/managers/GameManager.gd | 50 +++++++++++++ core/managers/GameManager.gd.uid | 1 + core/managers/SceneManager.gd | 75 +++++++++++++++++++ core/managers/SceneManager.gd.uid | 1 + core/systems/EventSystem.gd | 80 ++++++++++++++++++++ core/systems/EventSystem.gd.uid | 1 + core/utils/StringUtils.gd | 105 ++++++++++++++++++++++++++ core/utils/StringUtils.gd.uid | 1 + data/.gitkeep | 0 data/characters/.gitkeep | 1 + data/configs/game_config.json | 29 ++++++++ data/dialogues/.gitkeep | 1 + data/items/.gitkeep | 1 + data/levels/.gitkeep | 1 + data/localization/zh_CN.json | 36 +++++++++ module/Character/.gitkeep | 1 + module/Combat/.gitkeep | 1 + module/Dialogue/.gitkeep | 1 + module/Inventory/.gitkeep | 1 + module/UI/animations/.gitkeep | 1 + module/UI/components/.gitkeep | 1 + module/UI/layouts/.gitkeep | 1 + scenes/prefabs/characters/.gitkeep | 1 + scenes/prefabs/effects/.gitkeep | 1 + scenes/prefabs/items/.gitkeep | 1 + scenes/prefabs/ui/.gitkeep | 1 + scripts/.gitkeep | 0 scripts/characters/.gitkeep | 1 + scripts/data/.gitkeep | 1 + scripts/gameplay/.gitkeep | 1 + scripts/network/NetworkTest.gd | 31 ++++++++ scripts/network/NetworkTest.gd.uid | 1 + scripts/scenes/AuthScene.gd.uid | 1 + scripts/scenes/MainScene.gd | 116 +++++++++++++++++++++++++++++ scripts/scenes/MainScene.gd.uid | 1 + scripts/ui/.gitkeep | 1 + 39 files changed, 551 insertions(+) create mode 100644 core/components/.gitkeep create mode 100644 core/input_box/.gitkeep create mode 100644 core/interfaces/.gitkeep create mode 100644 core/managers/GameManager.gd create mode 100644 core/managers/GameManager.gd.uid create mode 100644 core/managers/SceneManager.gd create mode 100644 core/managers/SceneManager.gd.uid create mode 100644 core/systems/EventSystem.gd create mode 100644 core/systems/EventSystem.gd.uid create mode 100644 core/utils/StringUtils.gd create mode 100644 core/utils/StringUtils.gd.uid delete mode 100644 data/.gitkeep create mode 100644 data/characters/.gitkeep create mode 100644 data/configs/game_config.json create mode 100644 data/dialogues/.gitkeep create mode 100644 data/items/.gitkeep create mode 100644 data/levels/.gitkeep create mode 100644 data/localization/zh_CN.json create mode 100644 module/Character/.gitkeep create mode 100644 module/Combat/.gitkeep create mode 100644 module/Dialogue/.gitkeep create mode 100644 module/Inventory/.gitkeep create mode 100644 module/UI/animations/.gitkeep create mode 100644 module/UI/components/.gitkeep create mode 100644 module/UI/layouts/.gitkeep create mode 100644 scenes/prefabs/characters/.gitkeep create mode 100644 scenes/prefabs/effects/.gitkeep create mode 100644 scenes/prefabs/items/.gitkeep create mode 100644 scenes/prefabs/ui/.gitkeep delete mode 100644 scripts/.gitkeep create mode 100644 scripts/characters/.gitkeep create mode 100644 scripts/data/.gitkeep create mode 100644 scripts/gameplay/.gitkeep create mode 100644 scripts/network/NetworkTest.gd create mode 100644 scripts/network/NetworkTest.gd.uid create mode 100644 scripts/scenes/AuthScene.gd.uid create mode 100644 scripts/scenes/MainScene.gd create mode 100644 scripts/scenes/MainScene.gd.uid create mode 100644 scripts/ui/.gitkeep diff --git a/core/components/.gitkeep b/core/components/.gitkeep new file mode 100644 index 0000000..a6022c8 --- /dev/null +++ b/core/components/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 组件脚本目录 \ No newline at end of file diff --git a/core/input_box/.gitkeep b/core/input_box/.gitkeep new file mode 100644 index 0000000..00e5009 --- /dev/null +++ b/core/input_box/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 输入框组件目录 \ No newline at end of file diff --git a/core/interfaces/.gitkeep b/core/interfaces/.gitkeep new file mode 100644 index 0000000..44d4798 --- /dev/null +++ b/core/interfaces/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 接口定义目录 \ No newline at end of file diff --git a/core/managers/GameManager.gd b/core/managers/GameManager.gd new file mode 100644 index 0000000..e636a5b --- /dev/null +++ b/core/managers/GameManager.gd @@ -0,0 +1,50 @@ +extends Node + +# 游戏管理器 - 全局游戏状态管理 +# 单例模式,管理游戏的整体状态和生命周期 + +signal game_state_changed(new_state: GameState) + +enum GameState { + LOADING, # 加载中 + AUTH, # 认证状态 + MAIN_MENU, # 主菜单 + IN_GAME, # 游戏中 + PAUSED, # 暂停 + SETTINGS # 设置 +} + +var current_state: GameState = GameState.LOADING +var previous_state: GameState = GameState.LOADING +var current_user: String = "" +var game_version: String = "1.0.0" + +func _ready(): + print("GameManager 初始化完成") + change_state(GameState.AUTH) + +func change_state(new_state: GameState): + if current_state == new_state: + return + + previous_state = current_state + current_state = new_state + + print("游戏状态变更: ", GameState.keys()[previous_state], " -> ", GameState.keys()[current_state]) + game_state_changed.emit(new_state) + +func get_current_state() -> GameState: + return current_state + +func get_previous_state() -> GameState: + return previous_state + +func set_current_user(username: String): + current_user = username + print("当前用户设置为: ", username) + +func get_current_user() -> String: + return current_user + +func is_user_logged_in() -> bool: + return not current_user.is_empty() diff --git a/core/managers/GameManager.gd.uid b/core/managers/GameManager.gd.uid new file mode 100644 index 0000000..a637acf --- /dev/null +++ b/core/managers/GameManager.gd.uid @@ -0,0 +1 @@ +uid://c6bl6k5kkfah6 diff --git a/core/managers/SceneManager.gd b/core/managers/SceneManager.gd new file mode 100644 index 0000000..f68d05c --- /dev/null +++ b/core/managers/SceneManager.gd @@ -0,0 +1,75 @@ +extends Node + +# 场景管理器 - 负责场景切换和管理 +# 提供场景切换的统一接口 + +signal scene_changed(scene_name: String) +signal scene_change_started(scene_name: String) + +var current_scene_name: String = "" +var is_changing_scene: bool = false + +# 场景路径映射 +var scene_paths: Dictionary = { + "main": "res://scenes/main_scene.tscn", + "auth": "res://scenes/auth_scene.tscn", + "game": "res://scenes/game_scene.tscn", + "battle": "res://scenes/battle_scene.tscn", + "inventory": "res://scenes/inventory_scene.tscn", + "shop": "res://scenes/shop_scene.tscn", + "settings": "res://scenes/settings_scene.tscn" +} + +func _ready(): + print("SceneManager 初始化完成") + +func change_scene(scene_name: String, use_transition: bool = true): + if is_changing_scene: + print("场景切换中,忽略新的切换请求") + return false + + if not scene_paths.has(scene_name): + print("错误: 未找到场景 ", scene_name) + return false + + var scene_path = scene_paths[scene_name] + print("开始切换场景: ", current_scene_name, " -> ", scene_name) + + is_changing_scene = true + scene_change_started.emit(scene_name) + + if use_transition: + await show_transition() + + var error = get_tree().change_scene_to_file(scene_path) + if error != OK: + print("场景切换失败: ", error) + is_changing_scene = false + return false + + current_scene_name = scene_name + is_changing_scene = false + scene_changed.emit(scene_name) + + if use_transition: + await hide_transition() + + print("场景切换完成: ", scene_name) + return true + +func get_current_scene_name() -> String: + return current_scene_name + +func register_scene(scene_name: String, scene_path: String): + scene_paths[scene_name] = scene_path + print("注册场景: ", scene_name, " -> ", scene_path) + +func show_transition(): + # TODO: 实现场景切换过渡效果 + print("显示场景切换过渡效果") + await get_tree().create_timer(0.2).timeout + +func hide_transition(): + # TODO: 隐藏场景切换过渡效果 + print("隐藏场景切换过渡效果") + await get_tree().create_timer(0.2).timeout diff --git a/core/managers/SceneManager.gd.uid b/core/managers/SceneManager.gd.uid new file mode 100644 index 0000000..7e8c271 --- /dev/null +++ b/core/managers/SceneManager.gd.uid @@ -0,0 +1 @@ +uid://bf5bmaqwstpuq diff --git a/core/systems/EventSystem.gd b/core/systems/EventSystem.gd new file mode 100644 index 0000000..76f091b --- /dev/null +++ b/core/systems/EventSystem.gd @@ -0,0 +1,80 @@ +extends Node + +# 全局事件系统 - 提供解耦的事件通信机制 +# 允许不同模块之间通过事件进行通信,避免直接依赖 + +# 事件监听器存储 +var event_listeners: Dictionary = {} + +func _ready(): + print("EventSystem 初始化完成") + +# 注册事件监听器 +func connect_event(event_name: String, callback: Callable, target: Node = null): + if not event_listeners.has(event_name): + event_listeners[event_name] = [] + + var listener_info = { + "callback": callback, + "target": target + } + + event_listeners[event_name].append(listener_info) + print("注册事件监听器: ", event_name, " -> ", callback) + +# 移除事件监听器 +func disconnect_event(event_name: String, callback: Callable, target: Node = null): + if not event_listeners.has(event_name): + return + + var listeners = event_listeners[event_name] + for i in range(listeners.size() - 1, -1, -1): + var listener = listeners[i] + if listener.callback == callback and listener.target == target: + listeners.remove_at(i) + print("移除事件监听器: ", event_name, " -> ", callback) + break + +# 发送事件 +func emit_event(event_name: String, data: Variant = null): + print("发送事件: ", event_name, " 数据: ", data) + + if not event_listeners.has(event_name): + return + + var listeners = event_listeners[event_name] + for listener_info in listeners: + var target = listener_info.target + var callback = listener_info.callback + + # 检查目标节点是否仍然有效 + if target != null and not is_instance_valid(target): + continue + + # 调用回调函数 + if data != null: + callback.call(data) + else: + callback.call() + +# 清理无效的监听器 +func cleanup_invalid_listeners(): + for event_name in event_listeners.keys(): + var listeners = event_listeners[event_name] + for i in range(listeners.size() - 1, -1, -1): + var listener = listeners[i] + var target = listener.target + if target != null and not is_instance_valid(target): + listeners.remove_at(i) + print("清理无效监听器: ", event_name) + +# 获取事件监听器数量 +func get_listener_count(event_name: String) -> int: + if not event_listeners.has(event_name): + return 0 + return event_listeners[event_name].size() + +# 清空所有事件监听器 +func clear_all_listeners(): + event_listeners.clear() + print("清空所有事件监听器") diff --git a/core/systems/EventSystem.gd.uid b/core/systems/EventSystem.gd.uid new file mode 100644 index 0000000..d2494dd --- /dev/null +++ b/core/systems/EventSystem.gd.uid @@ -0,0 +1 @@ +uid://csuxtwgni1dmf diff --git a/core/utils/StringUtils.gd b/core/utils/StringUtils.gd new file mode 100644 index 0000000..bee8874 --- /dev/null +++ b/core/utils/StringUtils.gd @@ -0,0 +1,105 @@ +class_name StringUtils + +# 字符串工具类 - 提供常用的字符串处理功能 + +# 验证邮箱格式 +static func is_valid_email(email: String) -> bool: + var regex = RegEx.new() + regex.compile("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$") + return regex.search(email) != null + +# 验证用户名格式(字母、数字、下划线) +static func is_valid_username(username: String) -> bool: + if username.is_empty() or username.length() > 50: + return false + + var regex = RegEx.new() + regex.compile("^[a-zA-Z0-9_]+$") + return regex.search(username) != null + +# 验证密码强度 +static func validate_password_strength(password: String) -> Dictionary: + var result = {"valid": false, "message": "", "strength": 0} + + if password.length() < 8: + result.message = "密码长度至少8位" + return result + + if password.length() > 128: + result.message = "密码长度不能超过128位" + return result + + var has_letter = false + var has_digit = false + var has_special = false + + for i in range(password.length()): + var char = password[i] + if char >= 'a' and char <= 'z' or char >= 'A' and char <= 'Z': + has_letter = true + elif char >= '0' and char <= '9': + has_digit = true + elif char in "!@#$%^&*()_+-=[]{}|;:,.<>?": + has_special = true + + var strength = 0 + if has_letter: + strength += 1 + if has_digit: + strength += 1 + if has_special: + strength += 1 + if password.length() >= 12: + strength += 1 + + result.strength = strength + + if not (has_letter and has_digit): + result.message = "密码必须包含字母和数字" + return result + + result.valid = true + result.message = "密码强度: " + ["弱", "中", "强", "很强"][min(strength - 1, 3)] + return result + +# 截断字符串 +static func truncate(text: String, max_length: int, suffix: String = "...") -> String: + if text.length() <= max_length: + return text + return text.substr(0, max_length - suffix.length()) + suffix + +# 首字母大写 +static func capitalize_first(text: String) -> String: + if text.is_empty(): + return text + return text[0].to_upper() + text.substr(1) + +# 转换为标题格式(每个单词首字母大写) +static func to_title_case(text: String) -> String: + var words = text.split(" ") + var result = [] + for word in words: + if not word.is_empty(): + result.append(capitalize_first(word.to_lower())) + return " ".join(result) + +# 移除HTML标签 +static func strip_html_tags(html: String) -> String: + var regex = RegEx.new() + regex.compile("<[^>]*>") + return regex.sub(html, "", true) + +# 格式化文件大小 +static func format_file_size(bytes: int) -> String: + var units = ["B", "KB", "MB", "GB", "TB"] + var size = float(bytes) + var unit_index = 0 + + while size >= 1024.0 and unit_index < units.size() - 1: + size /= 1024.0 + unit_index += 1 + + if unit_index == 0: + return str(int(size)) + " " + units[unit_index] + else: + return "%.1f %s" % [size, units[unit_index]] diff --git a/core/utils/StringUtils.gd.uid b/core/utils/StringUtils.gd.uid new file mode 100644 index 0000000..d266e49 --- /dev/null +++ b/core/utils/StringUtils.gd.uid @@ -0,0 +1 @@ +uid://bturviv4bm4yk diff --git a/data/.gitkeep b/data/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/data/characters/.gitkeep b/data/characters/.gitkeep new file mode 100644 index 0000000..2945a8f --- /dev/null +++ b/data/characters/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 角色数据目录 \ No newline at end of file diff --git a/data/configs/game_config.json b/data/configs/game_config.json new file mode 100644 index 0000000..a0a2485 --- /dev/null +++ b/data/configs/game_config.json @@ -0,0 +1,29 @@ +{ + "game": { + "name": "whaleTown", + "version": "1.0.0", + "debug_mode": true + }, + "network": { + "api_base_url": "https://whaletownend.xinghangee.icu", + "timeout": 30, + "retry_count": 3 + }, + "ui": { + "default_font_size": 14, + "toast_duration": 2.0, + "transition_duration": 0.3 + }, + "gameplay": { + "auto_save_interval": 300, + "max_inventory_slots": 50, + "default_player_stats": { + "level": 1, + "coins": 100, + "exp": 0, + "max_exp": 100, + "energy": 100, + "max_energy": 100 + } + } +} diff --git a/data/dialogues/.gitkeep b/data/dialogues/.gitkeep new file mode 100644 index 0000000..7b26e82 --- /dev/null +++ b/data/dialogues/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 对话数据目录 \ No newline at end of file diff --git a/data/items/.gitkeep b/data/items/.gitkeep new file mode 100644 index 0000000..83475d5 --- /dev/null +++ b/data/items/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 物品数据目录 \ No newline at end of file diff --git a/data/levels/.gitkeep b/data/levels/.gitkeep new file mode 100644 index 0000000..ae36434 --- /dev/null +++ b/data/levels/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 关卡数据目录 \ No newline at end of file diff --git a/data/localization/zh_CN.json b/data/localization/zh_CN.json new file mode 100644 index 0000000..82d2280 --- /dev/null +++ b/data/localization/zh_CN.json @@ -0,0 +1,36 @@ +{ + "ui": { + "login": "登录", + "register": "注册", + "username": "用户名", + "password": "密码", + "email": "邮箱", + "confirm_password": "确认密码", + "verification_code": "验证码", + "send_code": "发送验证码", + "forgot_password": "忘记密码", + "enter_town": "进入小镇", + "logout": "退出登录" + }, + "messages": { + "login_success": "登录成功!正在进入鲸鱼镇...", + "register_success": "注册成功!欢迎加入鲸鱼镇", + "network_error": "网络连接失败,请检查网络连接", + "invalid_username": "用户名只能包含字母、数字和下划线", + "invalid_email": "请输入有效的邮箱地址", + "password_too_short": "密码长度至少8位", + "password_mismatch": "两次输入的密码不一致", + "verification_code_sent": "验证码已发送到您的邮箱,请查收" + }, + "game": { + "level": "等级", + "coins": "金币", + "experience": "经验", + "energy": "体力", + "explore": "探索小镇", + "inventory": "背包", + "shop": "商店", + "friends": "好友", + "settings": "设置" + } +} \ No newline at end of file diff --git a/module/Character/.gitkeep b/module/Character/.gitkeep new file mode 100644 index 0000000..b2d0d88 --- /dev/null +++ b/module/Character/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 角色模块目录 \ No newline at end of file diff --git a/module/Combat/.gitkeep b/module/Combat/.gitkeep new file mode 100644 index 0000000..5f5d6c1 --- /dev/null +++ b/module/Combat/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 战斗模块目录 \ No newline at end of file diff --git a/module/Dialogue/.gitkeep b/module/Dialogue/.gitkeep new file mode 100644 index 0000000..0c50b0c --- /dev/null +++ b/module/Dialogue/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 对话模块目录 \ No newline at end of file diff --git a/module/Inventory/.gitkeep b/module/Inventory/.gitkeep new file mode 100644 index 0000000..dfdb180 --- /dev/null +++ b/module/Inventory/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 背包模块目录 \ No newline at end of file diff --git a/module/UI/animations/.gitkeep b/module/UI/animations/.gitkeep new file mode 100644 index 0000000..442951d --- /dev/null +++ b/module/UI/animations/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - UI动画目录 \ No newline at end of file diff --git a/module/UI/components/.gitkeep b/module/UI/components/.gitkeep new file mode 100644 index 0000000..1226e70 --- /dev/null +++ b/module/UI/components/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - UI组件目录 \ No newline at end of file diff --git a/module/UI/layouts/.gitkeep b/module/UI/layouts/.gitkeep new file mode 100644 index 0000000..bb708d7 --- /dev/null +++ b/module/UI/layouts/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - UI布局目录 \ No newline at end of file diff --git a/scenes/prefabs/characters/.gitkeep b/scenes/prefabs/characters/.gitkeep new file mode 100644 index 0000000..fb0695e --- /dev/null +++ b/scenes/prefabs/characters/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 角色预制体目录 \ No newline at end of file diff --git a/scenes/prefabs/effects/.gitkeep b/scenes/prefabs/effects/.gitkeep new file mode 100644 index 0000000..6691578 --- /dev/null +++ b/scenes/prefabs/effects/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 特效预制体目录 \ No newline at end of file diff --git a/scenes/prefabs/items/.gitkeep b/scenes/prefabs/items/.gitkeep new file mode 100644 index 0000000..2e3c48c --- /dev/null +++ b/scenes/prefabs/items/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 物品预制体目录 \ No newline at end of file diff --git a/scenes/prefabs/ui/.gitkeep b/scenes/prefabs/ui/.gitkeep new file mode 100644 index 0000000..884109f --- /dev/null +++ b/scenes/prefabs/ui/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - UI预制体目录 \ No newline at end of file diff --git a/scripts/.gitkeep b/scripts/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/scripts/characters/.gitkeep b/scripts/characters/.gitkeep new file mode 100644 index 0000000..5dde4ab --- /dev/null +++ b/scripts/characters/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 角色脚本目录 \ No newline at end of file diff --git a/scripts/data/.gitkeep b/scripts/data/.gitkeep new file mode 100644 index 0000000..626ed81 --- /dev/null +++ b/scripts/data/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 数据脚本目录 \ No newline at end of file diff --git a/scripts/gameplay/.gitkeep b/scripts/gameplay/.gitkeep new file mode 100644 index 0000000..37630f0 --- /dev/null +++ b/scripts/gameplay/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - 游戏玩法脚本目录 \ No newline at end of file diff --git a/scripts/network/NetworkTest.gd b/scripts/network/NetworkTest.gd new file mode 100644 index 0000000..6b81ca7 --- /dev/null +++ b/scripts/network/NetworkTest.gd @@ -0,0 +1,31 @@ +extends Node + +# 简单的API测试脚本 +const API_BASE_URL = "https://whaletownend.xinghangee.icu" + +func _ready(): + print("API测试脚本已加载") + print("服务器地址: ", API_BASE_URL) + + # 测试服务器连接 + test_server_status() + +func test_server_status(): + var http_request = HTTPRequest.new() + add_child(http_request) + http_request.request_completed.connect(_on_status_request_completed) + + print("正在测试服务器连接...") + var error = http_request.request(API_BASE_URL) + if error != OK: + print("请求失败: ", error) + +func _on_status_request_completed(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray): + var response_text = body.get_string_from_utf8() + print("服务器状态响应: ", response_code) + print("响应内容: ", response_text) + + if response_code == 200: + print("✅ 服务器连接正常") + else: + print("❌ 服务器连接失败") diff --git a/scripts/network/NetworkTest.gd.uid b/scripts/network/NetworkTest.gd.uid new file mode 100644 index 0000000..e8a640d --- /dev/null +++ b/scripts/network/NetworkTest.gd.uid @@ -0,0 +1 @@ +uid://bsfrdqpsvwgtb diff --git a/scripts/scenes/AuthScene.gd.uid b/scripts/scenes/AuthScene.gd.uid new file mode 100644 index 0000000..341b55c --- /dev/null +++ b/scripts/scenes/AuthScene.gd.uid @@ -0,0 +1 @@ +uid://nv8eitxieqtm diff --git a/scripts/scenes/MainScene.gd b/scripts/scenes/MainScene.gd new file mode 100644 index 0000000..004ae0d --- /dev/null +++ b/scripts/scenes/MainScene.gd @@ -0,0 +1,116 @@ +extends Control + +# 场景节点引用 +@onready var auth_scene: Control = $AuthScene +@onready var main_game_ui: Control = $MainGameUI +@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, " 登录成功!") + show_main_game() + +func _on_logout_pressed(): + # 登出处理 + current_user = "" + 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() diff --git a/scripts/scenes/MainScene.gd.uid b/scripts/scenes/MainScene.gd.uid new file mode 100644 index 0000000..44c5673 --- /dev/null +++ b/scripts/scenes/MainScene.gd.uid @@ -0,0 +1 @@ +uid://cejrxy23ldhug diff --git a/scripts/ui/.gitkeep b/scripts/ui/.gitkeep new file mode 100644 index 0000000..ea7947f --- /dev/null +++ b/scripts/ui/.gitkeep @@ -0,0 +1 @@ +# 保持目录结构 - UI脚本目录 \ No newline at end of file