refactor:重构项目架构为分层结构

## 🏗️ 主要变更

### 目录结构重构
- 将 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>
This commit is contained in:
王浩
2025-12-31 11:36:01 +08:00
parent b1f3c0feff
commit 0b533189ec
93 changed files with 1466 additions and 470 deletions

238
tools/build_web.sh Normal file
View File

@@ -0,0 +1,238 @@
#!/bin/bash
# 鲸鱼镇 Web版本导出工具 (Linux/macOS)
# 版本: 1.0.0
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 配置变量 - 请根据实际情况修改
PROJECT_NAME="whaleTown"
BUILD_DIR="build/web"
GODOT_PATH="/usr/local/bin/godot" # macOS Homebrew默认路径
# GODOT_PATH="/usr/bin/godot" # Linux包管理器默认路径
# GODOT_PATH="$HOME/Applications/Godot.app/Contents/MacOS/Godot" # macOS应用程序路径
EXPORT_PRESET="Web"
VERSION="1.0.0"
echo "========================================"
echo " 鲸鱼镇 Web版本导出工具 v1.0"
echo "========================================"
echo
# 检查Godot是否存在
echo -e "${BLUE}[检查]${NC} 验证Godot安装..."
if [ ! -f "$GODOT_PATH" ]; then
echo -e "${RED}[错误]${NC} 未找到Godot: $GODOT_PATH"
echo
echo "请修改脚本中的GODOT_PATH变量或安装Godot 4.5+"
echo "安装方法:"
echo " macOS: brew install godot"
echo " Ubuntu: sudo apt install godot3"
echo " 或从官网下载: https://godotengine.org/download"
echo
exit 1
fi
# 检查项目文件
echo -e "${BLUE}[检查]${NC} 验证项目文件..."
if [ ! -f "project.godot" ]; then
echo -e "${RED}[错误]${NC} 未找到project.godot文件"
echo "请在项目根目录运行此脚本"
echo
exit 1
fi
# 显示项目信息
echo -e "${GREEN}[信息]${NC} 项目信息:"
echo " 项目名称: $PROJECT_NAME"
echo " 版本号: $VERSION"
echo " Godot路径: $GODOT_PATH"
echo " 导出预设: $EXPORT_PRESET"
echo " 输出目录: $BUILD_DIR"
echo
# 创建构建目录结构
echo -e "${BLUE}[构建]${NC} 准备构建环境..."
mkdir -p "$BUILD_DIR"
mkdir -p "scripts"
# 备份旧版本(如果存在)
if [ -f "$BUILD_DIR/index.html" ]; then
echo -e "${YELLOW}[备份]${NC} 备份旧版本..."
BACKUP_DIR="build/backup/$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
cp -r "$BUILD_DIR"/* "$BACKUP_DIR/" 2>/dev/null
echo " 备份位置: $BACKUP_DIR/"
fi
# 清理旧文件
echo -e "${BLUE}[清理]${NC} 清理旧的导出文件..."
rm -f "$BUILD_DIR"/*
# 检查导出预设
echo -e "${BLUE}[验证]${NC} 检查导出预设..."
"$GODOT_PATH" --headless --export-debug "$EXPORT_PRESET" --check-only >/dev/null 2>&1
if [ $? -ne 0 ]; then
echo -e "${RED}[错误]${NC} 导出预设 \"$EXPORT_PRESET\" 不存在或配置错误!"
echo "请在Godot编辑器中创建Web导出预设"
echo
exit 1
fi
# 导出项目
echo -e "${GREEN}[导出]${NC} 开始导出Web版本..."
echo " 目标文件: $BUILD_DIR/index.html"
echo " 请稍候..."
echo
"$GODOT_PATH" --headless --export-release "$EXPORT_PRESET" "$BUILD_DIR/index.html"
if [ $? -ne 0 ]; then
echo -e "${RED}[失败]${NC} 导出失败!"
echo
echo "可能的原因:"
echo "1. 导出模板未安装"
echo "2. 项目配置错误"
echo "3. 资源文件损坏"
echo
exit 1
fi
# 验证导出文件
echo -e "${BLUE}[验证]${NC} 验证导出文件..."
REQUIRED_FILES="index.html index.js index.wasm index.pck"
MISSING_FILES=""
for file in $REQUIRED_FILES; do
if [ ! -f "$BUILD_DIR/$file" ]; then
MISSING_FILES="$MISSING_FILES $file"
fi
done
if [ -n "$MISSING_FILES" ]; then
echo -e "${RED}[错误]${NC} 缺少必要文件:$MISSING_FILES"
echo "导出可能不完整请检查Godot配置"
echo
exit 1
fi
# 复制额外资源
echo -e "${BLUE}[复制]${NC} 复制额外资源..."
[ -f "assets/web/favicon.ico" ] && cp "assets/web/favicon.ico" "$BUILD_DIR/"
[ -f "assets/web/manifest.json" ] && cp "assets/web/manifest.json" "$BUILD_DIR/"
[ -f "assets/web/service-worker.js" ] && cp "assets/web/service-worker.js" "$BUILD_DIR/"
[ -f "assets/web/custom_shell.html" ] && cp "assets/web/custom_shell.html" "$BUILD_DIR/"
# 生成部署信息
echo -e "${BLUE}[生成]${NC} 生成部署信息..."
cat > "$BUILD_DIR/deploy_info.json" << EOF
{
"project": "$PROJECT_NAME",
"version": "$VERSION",
"build_time": "$(date)",
"platform": "web",
"godot_version": "4.5",
"export_preset": "$EXPORT_PRESET",
"build_machine": "$(hostname)",
"build_user": "$(whoami)",
"build_os": "$(uname -s)"
}
EOF
# 生成.htaccess文件
echo -e "${BLUE}[配置]${NC} 生成Apache配置文件..."
cat > "$BUILD_DIR/.htaccess" << 'EOF'
# 鲸鱼镇 Web版本 Apache配置
# 自动生成
# MIME类型配置
AddType application/wasm .wasm
AddType application/octet-stream .pck
AddType application/javascript .js
# 启用压缩
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/css application/javascript application/wasm
AddOutputFilterByType DEFLATE application/json application/xml
</IfModule>
# 缓存控制
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType application/wasm "access plus 1 month"
ExpiresByType application/octet-stream "access plus 1 month"
ExpiresByType application/javascript "access plus 1 week"
ExpiresByType text/html "access plus 1 hour"
</IfModule>
# CORS配置
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type, Authorization"
Header set Cross-Origin-Embedder-Policy "require-corp"
Header set Cross-Origin-Opener-Policy "same-origin"
</IfModule>
EOF
# 计算文件大小
echo -e "${BLUE}[统计]${NC} 计算文件大小..."
TOTAL_SIZE=$(du -sb "$BUILD_DIR" | cut -f1)
TOTAL_MB=$((TOTAL_SIZE / 1024 / 1024))
# 显示构建结果
echo
echo "========================================"
echo -e "${GREEN} 导出成功!${NC}"
echo "========================================"
echo
echo -e "${GREEN}[完成]${NC} 构建统计:"
echo " 导出位置: $BUILD_DIR/"
echo " 总文件大小: ${TOTAL_MB} MB"
echo " 构建时间: $(date)"
echo
echo -e "${BLUE}[文件]${NC} 导出文件列表:"
for file in "$BUILD_DIR"/*; do
if [ -f "$file" ]; then
filename=$(basename "$file")
size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file" 2>/dev/null)
size_mb=$((size / 1024 / 1024))
if [ $size_mb -gt 0 ]; then
echo " $filename: ${size_mb} MB"
else
size_kb=$((size / 1024))
echo " $filename: ${size_kb} KB"
fi
fi
done
echo
echo -e "${YELLOW}[下一步]${NC} 部署选项:"
echo " 1. 本地测试: ./scripts/serve_web.sh"
echo " 2. 上传到服务器: 将 $BUILD_DIR/ 目录上传"
echo " 3. 查看文档: docs/web_deployment_guide.md"
echo
echo -e "${GREEN}[提示]${NC} 部署前请确保:"
echo " - 服务器支持WASM MIME类型"
echo " - 配置了正确的CORS头"
echo " - 启用了文件压缩"
echo
# 询问是否启动本地服务器
echo -n "是否启动本地测试服务器?(y/N): "
read -r START_SERVER
if [[ $START_SERVER =~ ^[Yy]$ ]]; then
echo
echo -e "${GREEN}[启动]${NC} 启动本地服务器..."
./scripts/serve_web.sh
else
echo
echo "构建完成!可以手动运行 ./scripts/serve_web.sh 进行测试"
fi