Adds level prefabs, theme assets, audio, extensions, and deployment scripts for the Unity WebGL migration. Co-authored-by: Cursor <cursoragent@cursor.com>
88 lines
2.2 KiB
JavaScript
88 lines
2.2 KiB
JavaScript
'use strict';
|
||
|
||
/** 与 Unity PPU=100、Grid CellSize (1,0.5,1) 一致(世界坐标 Y 向上) */
|
||
const CELL_PIXEL = 100;
|
||
const HALF_W = CELL_PIXEL * 0.5;
|
||
const HALF_H = CELL_PIXEL * 0.25;
|
||
|
||
const PANEL_HALF_W = HALF_W;
|
||
const PANEL_HALF_H = HALF_H;
|
||
|
||
function worldToCellXY(wx, wy) {
|
||
const cx = (wy / HALF_H + wx / HALF_W) * 0.5;
|
||
const cy = (wy / HALF_H - wx / HALF_W) * 0.5;
|
||
return { x: Math.round(cx), y: Math.round(cy) };
|
||
}
|
||
|
||
/** 世界坐标为格子中心时 → 格子索引(与 cellCenterCanvas 互逆) */
|
||
function worldCenterToCellXY(wx, wy) {
|
||
return worldToCellXY(wx, wy - HALF_H);
|
||
}
|
||
|
||
function cellToWorldXY(cx, cy) {
|
||
return {
|
||
x: (cx - cy) * HALF_W,
|
||
y: (cx + cy) * HALF_H,
|
||
};
|
||
}
|
||
|
||
function cellCenterWorldXY(cx, cy) {
|
||
const w = cellToWorldXY(cx, cy);
|
||
return { x: w.x, y: w.y + HALF_H };
|
||
}
|
||
|
||
function cellKey(x, y) {
|
||
return `${x},${y}`;
|
||
}
|
||
|
||
/** 世界坐标 → Canvas(Y 向下,与 Unity/Cocos 预览一致) */
|
||
function worldToCanvasXY(wx, wy, offsetX, offsetY) {
|
||
return {
|
||
x: offsetX + wx,
|
||
y: offsetY - wy,
|
||
};
|
||
}
|
||
|
||
/** 格子底顶点(Grid.CellToWorld) */
|
||
function cellAnchorCanvas(cx, cy, offsetX, offsetY) {
|
||
const w = cellToWorldXY(cx, cy);
|
||
return worldToCanvasXY(w.x, w.y, offsetX, offsetY);
|
||
}
|
||
|
||
/** 格子中心(Unity Tilemap m_TileAnchor 0.5,0.5 → 精灵 pivot 对齐点) */
|
||
function cellCenterCanvas(cx, cy, offsetX, offsetY) {
|
||
const w = cellToWorldXY(cx, cy);
|
||
return worldToCanvasXY(w.x, w.y + HALF_H, offsetX, offsetY);
|
||
}
|
||
|
||
/** 鼠标拾取:与贴图 pivot 相同,使用格子中心(worldCenterToCell) */
|
||
function cellFromCanvas(mx, my, offsetX, offsetY) {
|
||
const wx = mx - offsetX;
|
||
const wyCenter = offsetY - my;
|
||
const c = worldCenterToCellXY(wx, wyCenter);
|
||
return { x: c.x, y: c.y, key: cellKey(c.x, c.y) };
|
||
}
|
||
|
||
function cellToCanvas(cx, cy, offsetX, offsetY) {
|
||
const a = cellAnchorCanvas(cx, cy, offsetX, offsetY);
|
||
return { px: a.x, py: a.y };
|
||
}
|
||
|
||
module.exports = {
|
||
CELL_PIXEL,
|
||
HALF_W,
|
||
HALF_H,
|
||
PANEL_HALF_W,
|
||
PANEL_HALF_H,
|
||
worldToCellXY,
|
||
worldCenterToCellXY,
|
||
cellToWorldXY,
|
||
cellCenterWorldXY,
|
||
cellKey,
|
||
worldToCanvasXY,
|
||
cellAnchorCanvas,
|
||
cellCenterCanvas,
|
||
cellFromCanvas,
|
||
cellToCanvas,
|
||
};
|