174 lines
5.0 KiB
JavaScript
174 lines
5.0 KiB
JavaScript
|
|
/**
|
|||
|
|
* 部署脚本 - 复制文件到微信小游戏项目
|
|||
|
|
* Deploy script - copy files to WeChat Mini Game project
|
|||
|
|
*/
|
|||
|
|
const fs = require('fs');
|
|||
|
|
const path = require('path');
|
|||
|
|
|
|||
|
|
// 微信小游戏项目路径
|
|||
|
|
const WECHAT_PROJECT = 'F:/MiniGame';
|
|||
|
|
|
|||
|
|
// 需要复制的文件
|
|||
|
|
const filesToCopy = [
|
|||
|
|
// Worker 文件
|
|||
|
|
{ src: 'workers/physics-worker.js', dest: 'workers/physics-worker.js' },
|
|||
|
|
// 注意:worker-mapping.json 不要放在 workers 目录,微信会把它当 JS 编译
|
|||
|
|
// Note: Don't put worker-mapping.json in workers dir, WeChat will try to compile it as JS
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
// ECS 框架库
|
|||
|
|
const ecsFrameworkSrc = path.join(__dirname, '../../packages/core/dist/index.umd.js');
|
|||
|
|
const ecsFrameworkDest = path.join(WECHAT_PROJECT, 'libs/ecs-framework.js');
|
|||
|
|
|
|||
|
|
// 确保目录存在
|
|||
|
|
function ensureDir(filePath) {
|
|||
|
|
const dir = path.dirname(filePath);
|
|||
|
|
if (!fs.existsSync(dir)) {
|
|||
|
|
fs.mkdirSync(dir, { recursive: true });
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
console.log('Deploying to WeChat Mini Game project:', WECHAT_PROJECT);
|
|||
|
|
console.log('');
|
|||
|
|
|
|||
|
|
// 复制 ECS 框架
|
|||
|
|
ensureDir(ecsFrameworkDest);
|
|||
|
|
if (fs.existsSync(ecsFrameworkSrc)) {
|
|||
|
|
fs.copyFileSync(ecsFrameworkSrc, ecsFrameworkDest);
|
|||
|
|
console.log('Copied: ecs-framework.js');
|
|||
|
|
} else {
|
|||
|
|
console.warn('Warning: ECS framework not found at', ecsFrameworkSrc);
|
|||
|
|
console.warn('Please run "pnpm build" in packages/core first');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 复制 Worker 文件
|
|||
|
|
for (const file of filesToCopy) {
|
|||
|
|
const srcPath = path.join(__dirname, file.src);
|
|||
|
|
const destPath = path.join(WECHAT_PROJECT, file.dest);
|
|||
|
|
|
|||
|
|
if (fs.existsSync(srcPath)) {
|
|||
|
|
ensureDir(destPath);
|
|||
|
|
fs.copyFileSync(srcPath, destPath);
|
|||
|
|
console.log('Copied:', file.dest);
|
|||
|
|
} else {
|
|||
|
|
console.warn('Warning: File not found:', srcPath);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 创建 game.js
|
|||
|
|
const gameJs = `/**
|
|||
|
|
* ESEngine Worker System 微信小游戏测试
|
|||
|
|
* ESEngine Worker System WeChat Mini Game Test
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
console.log('====================================');
|
|||
|
|
console.log('ESEngine Worker 微信小游戏测试');
|
|||
|
|
console.log('====================================');
|
|||
|
|
|
|||
|
|
// 检查 Worker API
|
|||
|
|
console.log('\\n[1] 检查环境...');
|
|||
|
|
console.log('wx.createWorker:', typeof wx.createWorker);
|
|||
|
|
|
|||
|
|
// 创建 Worker
|
|||
|
|
console.log('\\n[2] 创建 Worker...');
|
|||
|
|
var worker = null;
|
|||
|
|
|
|||
|
|
try {
|
|||
|
|
worker = wx.createWorker('workers/physics-worker.js', {
|
|||
|
|
useExperimentalWorker: true
|
|||
|
|
});
|
|||
|
|
console.log('Worker 创建成功!');
|
|||
|
|
} catch (error) {
|
|||
|
|
console.error('Worker 创建失败:', error.message);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if (worker) {
|
|||
|
|
// 设置消息处理
|
|||
|
|
worker.onMessage(function(res) {
|
|||
|
|
console.log('\\n[4] 收到 Worker 响应!');
|
|||
|
|
|
|||
|
|
if (res.error) {
|
|||
|
|
console.error('Worker 错误:', res.error);
|
|||
|
|
} else if (res.result) {
|
|||
|
|
console.log('Worker 处理成功!');
|
|||
|
|
console.log('实体数量:', res.result.length);
|
|||
|
|
|
|||
|
|
// 显示前 3 个实体
|
|||
|
|
for (var i = 0; i < Math.min(3, res.result.length); i++) {
|
|||
|
|
var e = res.result[i];
|
|||
|
|
console.log(' 实体 ' + e.id + ': (' + e.x.toFixed(1) + ', ' + e.y.toFixed(1) + ')');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
console.log('\\n========== Worker 测试成功! ==========');
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
// 创建测试数据
|
|||
|
|
console.log('\\n[3] 发送测试数据...');
|
|||
|
|
|
|||
|
|
var entities = [];
|
|||
|
|
for (var i = 0; i < 10; i++) {
|
|||
|
|
entities.push({
|
|||
|
|
id: i + 1,
|
|||
|
|
x: Math.random() * 300 + 37,
|
|||
|
|
y: Math.random() * 400 + 100,
|
|||
|
|
dx: (Math.random() - 0.5) * 100,
|
|||
|
|
dy: (Math.random() - 0.5) * 50,
|
|||
|
|
mass: 1 + Math.random(),
|
|||
|
|
bounce: 0.8,
|
|||
|
|
friction: 0.98,
|
|||
|
|
radius: 5 + Math.random() * 5
|
|||
|
|
});
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
worker.postMessage({
|
|||
|
|
id: Date.now(),
|
|||
|
|
entities: entities,
|
|||
|
|
deltaTime: 0.016,
|
|||
|
|
systemConfig: {
|
|||
|
|
gravity: 200,
|
|||
|
|
canvasWidth: 375,
|
|||
|
|
canvasHeight: 667,
|
|||
|
|
groundFriction: 0.98
|
|||
|
|
}
|
|||
|
|
});
|
|||
|
|
|
|||
|
|
console.log('已发送 ' + entities.length + ' 个实体');
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 创建 Canvas 显示
|
|||
|
|
var canvas = wx.createCanvas();
|
|||
|
|
var ctx = canvas.getContext('2d');
|
|||
|
|
|
|||
|
|
ctx.fillStyle = '#1a1a2e';
|
|||
|
|
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|||
|
|
|
|||
|
|
ctx.fillStyle = '#ffffff';
|
|||
|
|
ctx.font = '18px Arial';
|
|||
|
|
ctx.textAlign = 'center';
|
|||
|
|
ctx.fillText('ESEngine Worker 测试', canvas.width / 2, 50);
|
|||
|
|
|
|||
|
|
ctx.font = '14px Arial';
|
|||
|
|
ctx.fillStyle = '#aaaaaa';
|
|||
|
|
ctx.fillText('查看控制台日志', canvas.width / 2, 80);
|
|||
|
|
|
|||
|
|
ctx.fillStyle = worker ? '#00ff00' : '#ff0000';
|
|||
|
|
ctx.fillText('Worker: ' + (worker ? '已创建' : '创建失败'), canvas.width / 2, 110);
|
|||
|
|
`;
|
|||
|
|
|
|||
|
|
const gameJsPath = path.join(WECHAT_PROJECT, 'game.js');
|
|||
|
|
fs.writeFileSync(gameJsPath, gameJs);
|
|||
|
|
console.log('Created: game.js');
|
|||
|
|
|
|||
|
|
// 确保 game.json 配置正确
|
|||
|
|
const gameJsonPath = path.join(WECHAT_PROJECT, 'game.json');
|
|||
|
|
const gameJson = {
|
|||
|
|
deviceOrientation: 'portrait',
|
|||
|
|
workers: 'workers'
|
|||
|
|
};
|
|||
|
|
fs.writeFileSync(gameJsonPath, JSON.stringify(gameJson, null, 2));
|
|||
|
|
console.log('Updated: game.json');
|
|||
|
|
|
|||
|
|
console.log('\\nDeploy complete!');
|
|||
|
|
console.log('Open WeChat DevTools and load:', WECHAT_PROJECT);
|