- CD_LEFT/CD_RIGHT/CD_SELF(1150-1152)由文字精灵改为多帧图数字精灵: 资源 NUM_COUNTDOWN,纯秒数无后缀;对应布局节点 P_COUNTDOWN 的 h 改取 NUM_STYLE.COUNTDOWN.charHeight,w 留到运行时注入。 - 结算得分 RESULT_SCORE_LEFT/RIGHT/SELF(1805-1807)同理由文字精灵改为 数字图精灵(NUM_RESULT_WIN/NUM_RESULT_LOSE),与大局结算已有的 ACC_TPL_SCORE_NUM 保持一致;布局节点随之调整,移除不再使用的 TEXT_STYLE.SCORE_BIG。 - NUM_CALL_SCORE 第16帧由"待美术与规则确认"改为明确的"无后缀"(叫分档位 面板只显示纯数字,"N子"角标是独立文字精灵);NUM_MAIN_SUIT_COUNT / NUM_RESULT_WIN / NUM_RESULT_LOSE 第16帧仍待确认,不改。 - Layout_Action.js 的 CALL_BTN_SCORE_TEXT、Layout_Result.js 的 RESULT_SCORE_TEXT 改名为 CALL_BTN_SCORE_NUM / RESULT_SCORE_NUM: 两者驱动的都是数字图精灵,_TEXT 后缀误导;同步测试引用。 - docs/client/development-guide/02:订正"SpriteManager 第1154行"这一失效 行号引用(回退后该行号落在 setTextWithWidth 体内),改为不写死行号。 - docs_dev 清单同步:§2.4/§5.4/§5.6/§6.6/§6.9 倒计时与结算得分的精灵类型 描述、§6.6/§6.9 对应布局参数。 - test_constants.js 的 NUM_STYLE 同源守卫表新增 COUNTDOWN、RESULT_WIN、 RESULT_LOSE 三对(连同改名后的 CALL_BTN_SCORE_NUM),共 6 条新断言。 精灵总数、布局节点总数均未变(378 / 61),只改类型与命名,不增删。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
64 lines
4.4 KiB
JavaScript
64 lines
4.4 KiB
JavaScript
///////////////////////////////////////////////////////////////
|
||
////////// EQW_Layout: 布局配置总则(清单 §6)/////////////////
|
||
///////////////////////////////////////////////////////////////
|
||
// 设计基准 1280×720,ScreenFitMode 1,30fps(清单 §0.1)。
|
||
// 【纯数据文件】无函数、无副作用、不引用其他模块——
|
||
// fan 的间距算法、bySeat 合并、attach 换算都在 codes/ui/LayoutSolver.js。
|
||
// 数值为参考图目视实测估值(±5px),设计稿到位后只改本层。
|
||
//
|
||
// 本文件须最先加载(其余 5 个 Layout_*.js 会引用本文件的 CARD_SIZE / TEXT_STYLE,
|
||
// 这是 EQW_Layout 内部的自引用,不是跨模块引用)。
|
||
var EQW_Layout = EQW_Layout || {};
|
||
|
||
//座位键(显示位,非服务端座位号;换算见 core/SeatMap.js)
|
||
EQW_Layout.SEAT = { SELF: 'SELF', LEFT: 'LEFT', RIGHT: 'RIGHT' };
|
||
|
||
//三套牌面尺寸档(清单 §6.4)。改牌面尺寸只动这一处,引用它的区域自动跟随
|
||
EQW_Layout.CARD_SIZE = {
|
||
L: { w: 110, h: 190, res: 'CARD_FACE_L' }, //手牌、底牌、冲关牌
|
||
M: { w: 90, h: 155, res: 'CARD_FACE_M' }, //已出牌区
|
||
S: { w: 50, h: 70, res: 'CARD_FACE_S' } //结算埋牌底牌
|
||
};
|
||
|
||
//文字样式预设(清单 §6.3,逐条对应 §6.5–§6.9b 各表出现的 textStyle{...})
|
||
EQW_Layout.TEXT_STYLE = {
|
||
STATUS_BIG: { fontSize: 46, color: '#FFFFFF', align: 'center' }, //玩家位「60分」「不叫」(§6.6)
|
||
CALL_BIG: { fontSize: 52, color: '#FFD24A', align: 'center' }, //自己叫分大字(§6.8)
|
||
//结算总分大字原用 SCORE_BIG(§6.9),2026-08-27 改为多帧图数字精灵(NUM_STYLE.RESULT_WIN/RESULT_LOSE),
|
||
//不再是文字精灵,SCORE_BIG 无消费者,移除(避免留一个没人用的样式常量)
|
||
ASET_COUNT: { fontSize: 20, color: '#FFFFFF', align: 'center' }, //底栏「1/4 局」(§6.5)
|
||
ROOM_OPT: { normal: { fontSize: 18, color: '#DDDDDD' }, //建房选项文字(§6.9b)
|
||
selected: { fontSize: 18, color: '#E8873A' } },
|
||
ROOM_CAT: { fontSize: 18, color: '#7FBFB0', bold: true, align: 'right', maxWidth: 60 },
|
||
ROOM_CARD_COST_NOTE: { fontSize: 16, color: '#999999' } //建房房卡消耗附注(§6.9b)
|
||
};
|
||
|
||
//多帧图数字样式(清单 §3.6 / §6.8,2026-08-26 新增)——配合平台既有的
|
||
//SpriteManager.setNumberImage(spriteId, text, charWidth):把整串数字设给【一个】多帧图片精灵,
|
||
//引擎按字符逐帧渲染,精灵宽度由该接口按【字符数 × charWidth】自动调整。
|
||
//故多位数不需要拆成十位/个位多个精灵,也不用 setFrame 逐位切。
|
||
//本表是【零裸值红线】的落点:charWidth/charHeight 只在此定义一处,业务代码只引用不内联。
|
||
//
|
||
//字段:res —— 图片资源【键名】(与 CARD_SIZE.res 同一约定:纯数据文件不直接引用 EQW_Images,
|
||
// 调用方用 EQW_Images[style.res] 取真实 ID)
|
||
// charWidth —— 单字符宽(传给 setNumberImage;精灵宽 = 字符数 × charWidth,运行时自动变)
|
||
// charHeight —— 单字符高(setNumberImage 不改高度,此值供布局节点定 h)
|
||
// suffix —— 该套资源第 16 帧承载的后缀字(无后缀为 '';见 ImageResources.js §3.6 的帧序说明)
|
||
EQW_Layout.NUM_STYLE = {
|
||
//倒计时(§2.4):纯数字无后缀,秒数最多两位
|
||
COUNTDOWN: { res: 'NUM_COUNTDOWN', charWidth: 44, charHeight: 60, suffix: '' },
|
||
|
||
//结算得分 · 赢(§1.8/§6.9):用到 '+'(帧12)与 '-'(帧13);后缀是否为「分」待定,见资源注释
|
||
RESULT_WIN: { res: 'NUM_RESULT_WIN', charWidth: 46, charHeight: 62, suffix: '' },
|
||
|
||
//结算得分 · 输(§1.8/§6.9):帧序与赢的一致,仅配色不同
|
||
RESULT_LOSE: { res: 'NUM_RESULT_LOSE', charWidth: 46, charHeight: 62, suffix: '' },
|
||
|
||
//叫分档位分数(§1.3/§6.8):14 档中 13 档是两位数,整串交给 setNumberImage,无后缀
|
||
//(面板上的「N子」角标是文字精灵,不走这套)
|
||
CALL_SCORE: { res: 'NUM_CALL_SCORE', charWidth: 30, charHeight: 40, suffix: '' },
|
||
|
||
//选主面板花色张数(§1.5/§6.8):显示「N张」,「张」= 第 16 帧;单花色最多 26 张
|
||
MAIN_SUIT_COUNT: { res: 'NUM_MAIN_SUIT_COUNT', charWidth: 24, charHeight: 32, suffix: '张' }
|
||
};
|