diff --git a/client/js/01_SubGame/codes/config/Sprites_CreateRoom.js b/client/js/01_SubGame/codes/config/Sprites_CreateRoom.js index 68314df..3753180 100644 --- a/client/js/01_SubGame/codes/config/Sprites_CreateRoom.js +++ b/client/js/01_SubGame/codes/config/Sprites_CreateRoom.js @@ -10,6 +10,87 @@ // 「傍王」「爬坡」这些具体玩法名。 var EQW_Sprites = EQW_Sprites || {}; +// ============================================================================ +// 建房规则选项区 - Layer 27 (平台 CreateRoom_Layer), Group 250 (CREATE_ROOM) +// ============================================================================ + +/** + * 建房规则选项区 - CreateRoomView + * + * 用途: 创建房间弹窗里【只属于子游戏的那块内容区】——3 个类别标题 + 4 个选项组 + 8 个选项, + * 玩家勾选后拼成 5 位 roomtype 串发给服务端。 + * 弹窗背景、标题、关闭按钮、确认按钮(平台约定的 25 号精灵)都【由平台提供】, + * 本 View 不重复建弹窗外壳(D-1 已定)。也因此不新开图层,直接挂平台的 Layer 27。 + * + * 布局说明(参考图 docs_dev/uiref/创建房间选项的UI参考内容根据实际二七王游戏改动.png + * ——⚠ 那是【另一个游戏】的建房选项(局数 8/16/24、人数 2/3/4、霸王 ×2/×4, + * 二七王都没有)。【只照搬视觉范式与控件样式,内容一律按二七王的 roomtype 重写】。 + * 下图画的是二七王的实际内容): + * + * 两层嵌套:类别竖排(ROOM_CATEGORY_COLUMN)+ 类别内选项槽横排(ROOM_OPTION_ROW) + * + * x=0 x=70 内容区右边缘 + * ┌──────┬──────────────────┬──────────────────┬─────────────────┐ + * │ 牌局 │ ◉ 6局 │ ◯ 12局 │ │ ← 类别 1 行 1 + * │ │ ◉ 房主扣卡 │ ◯ AA每人扣卡 │ 房主2张 │ ← 类别 1 行 2 + * ├──────┼──────────────────┼──────────────────┼─────────────────┤ + * │ 模式 │ ◉ 可查牌 │ ◯ 不查牌 │ │ ← 类别 2 + * ├──────┼──────────────────┼──────────────────┼─────────────────┤ + * │ 规则 │ ▣ 傍王 │ ▣ 爬坡 │ │ ← 类别 3 + * └──────┴──────────────────┴──────────────────┴─────────────────┘ + * ↑ ↑ ↑ ↑ + * │ │ └ ROOM_TEXT_*:attach 同槽选择框右侧 offsetX=+8(ROOM_OPTION_TEXT) + * │ └── ROOM_BOX_*:attach 所在选项槽 left/middle,22×22(ROOM_OPTION_BOX) + * └───────── ROOM_CAT_TITLE_1..3 (2050–2052):attach 所在类别行 left/middle,60×24 + * 帧1=牌局 帧2=模式 帧3=规则(ROOM_CATEGORY_TITLE) + * ↑ + * ROOM_TEXT_CARD_COST(2061) 房卡消耗附注(灰色小字) + * attach ROOM_BOX_CARD_2 右侧 offsetX=+20(ROOM_CARD_COST_NOTE) + * + * 布局参数(EQW_Layout,清单 §6.9b 原文说明数值按参考图比例估、实际以平台建房界面尺寸为准): + * ROOM_CATEGORY_COLUMN line/vertical, anchor='top', itemHeight=32, spacing=8, + * itemWidth 由调用方按平台内容区实际宽度注入 + * ⚠ anchor 必须用竖排语义 top/bottom/center,写成 'left' 会被 + * 求解器按方向校验拒掉(历史坑:会算出画布外的 y) + * ROOM_OPTION_ROW line/horizontal, anchor='left', anchorX=70, itemWidth=150, + * itemHeight 沿用类别行高 32,spacing=0,anchorY 随所在类别行注入 + * ROOM_OPTION_GROUP_GAP 40 同类别下两个选项组之间比组内选项多留的间距 + * ROOM_OPTION_MAX_PER_ROW 4 + ROOM_OPTION_OVERFLOW_GRID —— 选项超 4 个才折行; + * 二七王每组最多 2 项,不会触发 + * + * 元素说明: + * - 每个选项 = 选择框(图片精灵)+ 文字精灵,成对出现,共 8 组。 + * - 选择框帧号 = (useCheckbox ? 3 : 1) + (selected ? 1 : 0), + * useCheckbox = (类型为 checkbox 或 radioOptional)。三个单选组用帧1–2,附加规则组用帧3–4。 + * - 选中态文字变橙: EQW_Layout.TEXT_STYLE.ROOM_OPT 的 normal / selected 两态。 + * - 【本文件不认识玩法名】渲染由 EQW_RoomOptions(Layout_CreateRoom.js)这份配置数据驱动: + * 配置里每个选项自己声明用哪个精灵键(box / text)、type(决定帧号)、bit/value + * (决定 roomtype 拼串)。渲染器一律【按键名取精灵,不得按下标拼字符串】—— + * 组的 key 是 'rules'、精灵却叫 ROOM_BOX_RULE_1,本来就拼不出来。 + * 加一个选项 = 配置里加一条,不改渲染逻辑(OCP + 配置优先)。 + * - 【roomtype 拼串只在一处实现】遍历配置写 item.value 到 item.bit,不得在别处按下标硬拼 + * (与服务端 class.config.js parse() 对称的 SSOT 要求)。二七王 5 位: + * 位0 局数(6局/12局) 位1 扣卡(房主/AA) 位2 傍王 位3 爬坡 位4 查牌(可查/不查) + * 缺省值 roomtype = "00000"。 + * - 【房卡消耗联动】随「局数 × 扣卡」两组实时变化,取自 EQW_RoomOptions.cardCost 配置表, + * 不硬编码在 UI 代码里:房主扣卡 6局=房主2张 / 12局=房主4张;AA 6局=每人1张 / 12局=每人2张。 + * - 【参考图里不要照抄的部分】「人数」行(二七王固定 3 人,不给玩家选)与「霸王」行。 + * - 交互:点平台约定的 25 号精灵 → 拼 roomtype → Net.Send_create_room(...)。 + * + * 资源说明: + * - 选择框: EQW_Images.ROOM_OPT_BOX (681), 4 帧 (2×2), 22×22 + * 帧1=单选·未选中(灰空心环) 帧2=单选·已选中(橙实心环) + * 帧3=复选·未选中(浅绿空方块) 帧4=复选·已选中 + * - 类别标题: EQW_Images.ROOM_CAT_TITLE (682), 3 帧, 60×24, 帧1=牌局 帧2=模式 帧3=规则 + * - 选项行底: EQW_Images.ROW_ROOM_OPT (683), 1 帧, 尺寸待定——参考图为无底透明,可选, + * 当前本 View 未使用该资源(没有对应精灵) + * + * 精灵ID分配: 2050–2069(群组 250 号段 2050–2099),共 20 个,全部预置 + * —— 选项集固定(3 类别 / 4 选项组 / 8 选项),数量小,不用精灵复制(§5.6a 判据表) + * + * @see docs_dev/二七王-UI资源与精灵清单.md §1.1 建房·房间设置 / §5.8 / §6.9b + * @see docs_dev/uiref/创建房间选项的UI参考内容根据实际二七王游戏改动.png(样式范式,非内容) + */ //建房规则选项区:挂在平台创建房间界面所在图层(清单 §5.8,群组 250) EQW_Sprites.CreateRoomView = { Layer: EQW_Layers.PLATFORM_CREATE_ROOM, //27