forked from moyin/whale-town-front
## 🏗️ 主要变更 ### 目录结构重构 - 将 core/ 迁移到 _Core/(框架层) - 将 scenes/ 重构为 Scenes/(玩法层)和 UI/(界面层) - 将 data/ 迁移到 Config/(配置层) - 添加 Assets/ 资源层和 Utils/ 工具层 - 将 scripts/ 迁移到 tools/(开发工具) ### 架构分层 - **_Core/**: 框架层 - 全局单例和管理器 - **Scenes/**: 玩法层 - 游戏场景和实体 - **UI/**: 界面层 - HUD、窗口、对话系统 - **Assets/**: 资源层 - 精灵图、音频、字体 - **Config/**: 配置层 - 游戏配置和本地化 - **Utils/**: 工具层 - 通用辅助脚本 ### 文件更新 - 更新 project.godot 中的所有路径引用 - 更新自动加载脚本路径 - 更新测试文件的引用路径 - 添加 REFACTORING.md 详细说明 - 添加 MIGRATION_COMPLETE.md 迁移完成标记 - 更新 README.md 反映新架构 ### 设计原则 - ✅ 清晰的分层(框架/玩法/界面) - ✅ 场景内聚(脚本紧邻场景文件) - ✅ 组件化设计(可复用组件) - ✅ 职责单一(每个目录职责明确) ## 📋 详细信息 查看 REFACTORING.md 了解完整的重构说明和迁移映射表 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
76 lines
2.0 KiB
GDScript
76 lines
2.0 KiB
GDScript
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/Maps/main_scene.tscn",
|
|
"auth": "res://UI/Windows/LoginWindow.tscn",
|
|
"game": "res://Scenes/Maps/game_scene.tscn",
|
|
"battle": "res://Scenes/Maps/battle_scene.tscn",
|
|
"inventory": "res://UI/Windows/InventoryWindow.tscn",
|
|
"shop": "res://UI/Windows/ShopWindow.tscn",
|
|
"settings": "res://UI/Windows/SettingsWindow.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
|