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>
188 lines
5.0 KiB
Bash
188 lines
5.0 KiB
Bash
#!/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
|
||
|
||
# 配置变量
|
||
BUILD_DIR="build/web"
|
||
PORT=8000
|
||
FALLBACK_PORT=8080
|
||
|
||
echo "========================================"
|
||
echo " 鲸鱼镇 本地Web服务器 v1.0"
|
||
echo "========================================"
|
||
echo
|
||
|
||
# 检查导出文件
|
||
echo -e "${BLUE}[检查]${NC} 验证Web导出文件..."
|
||
if [ ! -f "$BUILD_DIR/index.html" ]; then
|
||
echo -e "${RED}[错误]${NC} 未找到Web导出文件!"
|
||
echo
|
||
echo "请先运行以下命令导出项目:"
|
||
echo " ./scripts/build_web.sh"
|
||
echo
|
||
echo "或在Godot编辑器中导出Web版本到: $BUILD_DIR/"
|
||
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 "请重新导出项目"
|
||
echo
|
||
exit 1
|
||
fi
|
||
|
||
# 检查Python
|
||
echo -e "${BLUE}[检查]${NC} 验证Python环境..."
|
||
if ! command -v python3 &> /dev/null && ! command -v python &> /dev/null; then
|
||
echo -e "${RED}[错误]${NC} 未找到Python!"
|
||
echo
|
||
echo "请安装Python 3.x:"
|
||
echo " macOS: brew install python"
|
||
echo " Ubuntu: sudo apt install python3"
|
||
echo " 或访问: https://python.org/downloads"
|
||
echo
|
||
exit 1
|
||
fi
|
||
|
||
# 确定Python命令
|
||
PYTHON_CMD="python3"
|
||
if ! command -v python3 &> /dev/null; then
|
||
PYTHON_CMD="python"
|
||
fi
|
||
|
||
# 获取Python版本
|
||
PYTHON_VERSION=$($PYTHON_CMD --version 2>&1 | cut -d' ' -f2)
|
||
echo -e "${GREEN}[信息]${NC} Python版本: $PYTHON_VERSION"
|
||
|
||
# 显示文件信息
|
||
echo
|
||
echo -e "${GREEN}[信息]${NC} Web文件统计:"
|
||
TOTAL_SIZE=$(du -sb "$BUILD_DIR" | cut -f1)
|
||
TOTAL_MB=$((TOTAL_SIZE / 1024 / 1024))
|
||
|
||
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 " 总大小: ${TOTAL_MB} MB"
|
||
|
||
# 检查端口占用
|
||
echo
|
||
echo -e "${BLUE}[网络]${NC} 检查端口占用..."
|
||
if lsof -Pi :$PORT -sTCP:LISTEN -t >/dev/null 2>&1; then
|
||
echo -e "${YELLOW}[警告]${NC} 端口 $PORT 已被占用,尝试使用 $FALLBACK_PORT"
|
||
PORT=$FALLBACK_PORT
|
||
|
||
if lsof -Pi :$PORT -sTCP:LISTEN -t >/dev/null 2>&1; then
|
||
echo -e "${RED}[错误]${NC} 端口 $PORT 也被占用!"
|
||
echo "请手动指定端口: $PYTHON_CMD -m http.server [端口号]"
|
||
echo
|
||
exit 1
|
||
fi
|
||
fi
|
||
|
||
# 获取本机IP地址
|
||
LOCAL_IP=$(ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1' | head -1)
|
||
if [ -z "$LOCAL_IP" ]; then
|
||
LOCAL_IP=$(hostname -I | cut -d' ' -f1 2>/dev/null)
|
||
fi
|
||
if [ -z "$LOCAL_IP" ]; then
|
||
LOCAL_IP="localhost"
|
||
fi
|
||
|
||
# 显示启动信息
|
||
echo
|
||
echo -e "${GREEN}[启动]${NC} 启动HTTP服务器..."
|
||
echo " 端口: $PORT"
|
||
echo " 目录: $BUILD_DIR"
|
||
echo " Python: $PYTHON_VERSION"
|
||
echo
|
||
|
||
echo "========================================"
|
||
echo -e "${GREEN} 访问地址${NC}"
|
||
echo "========================================"
|
||
echo " 本地访问: http://localhost:$PORT"
|
||
echo " 局域网访问: http://$LOCAL_IP:$PORT"
|
||
echo
|
||
|
||
echo -e "${YELLOW}[控制]${NC} 服务器控制:"
|
||
echo " 停止服务器: Ctrl+C"
|
||
echo " 重启服务器: 关闭后重新运行脚本"
|
||
echo
|
||
|
||
echo -e "${BLUE}[调试]${NC} 调试工具:"
|
||
echo " 开发者工具: F12"
|
||
echo " 控制台日志: 查看浏览器Console"
|
||
echo " 网络请求: 查看Network标签"
|
||
echo
|
||
|
||
echo "========================================"
|
||
|
||
# 尝试自动打开浏览器
|
||
echo -e "${BLUE}[浏览器]${NC} 尝试打开默认浏览器..."
|
||
if command -v open &> /dev/null; then
|
||
# macOS
|
||
open "http://localhost:$PORT" 2>/dev/null
|
||
elif command -v xdg-open &> /dev/null; then
|
||
# Linux
|
||
xdg-open "http://localhost:$PORT" 2>/dev/null
|
||
else
|
||
echo -e "${YELLOW}[提示]${NC} 无法自动打开浏览器,请手动访问上述地址"
|
||
fi
|
||
|
||
echo
|
||
echo -e "${GREEN}[就绪]${NC} 服务器启动中..."
|
||
echo
|
||
|
||
# 切换到构建目录并启动服务器
|
||
cd "$BUILD_DIR"
|
||
|
||
# 创建简单的服务器日志
|
||
echo "[$(date)] 服务器启动 - 端口:$PORT" >> server.log
|
||
|
||
# 设置信号处理
|
||
trap 'echo -e "\n${YELLOW}[停止]${NC} 服务器已停止"; echo "[$(date)] 服务器停止" >> server.log; exit 0' INT
|
||
|
||
# 启动Python HTTP服务器
|
||
$PYTHON_CMD -m http.server $PORT
|
||
|
||
# 服务器停止后的清理
|
||
echo
|
||
echo -e "${YELLOW}[停止]${NC} 服务器已停止"
|
||
echo "[$(date)] 服务器停止" >> server.log
|
||
|
||
# 返回原目录
|
||
cd ../..
|
||
|
||
echo
|
||
echo -e "${GREEN}[完成]${NC} 感谢使用鲸鱼镇Web服务器!"
|
||
echo |