# 梦三扇形手牌:本次候选变更 ## 参考与范围 依据用户本地 36.png(扇形)、37.png(悬停)、38.png(目标牌拖动)与39.png(无目标牌拖动)。 仅扩展现有梦三 `ui/hand/` 子模块;不改十周年UI源码,不复制真实卡面,不搬动卡牌父容器,不自行调用 `useCard()`。 卡面仍沿用当前引擎/主题;不是尖塔卡面的重绘。 ## 排列与悬停 - `fanSlots()` 将全部可见真实手牌以中心对称展开;中心最高,两端降低并旋转,最多左右13度。 - 桌面卡牌112×156,小屏82×114;张数增加时收窄间距,不依赖横向滚动。 - 悬停时归正、上抬62像素并放大1.35倍,置于手牌最上层;保持原生选中/可用状态。 - 原生布局写入的 transform 不被删除;梦三CSS仅在启用时覆盖,退出恢复。 ## 输入 - 主动出牌阶段、真实单张手牌且费用足够:位移9像素进入拖动。 - 单目标牌:卡牌自动置于手牌横向中心,指针拖动一条金色细线;指向合法目标后松手,经 `game.check()` 再调用 `ui.click.ok()`。 - 金线参照本地十周年 `effects/config.js` 的 rgb(250,220,140) 与2.6线宽;独立SVG,不加载其私有动画接口,不用尖塔箭头/骨节。 - 无需手动指定目标(包括引擎自动分配全部目标)的牌:卡牌随指针,上移至少60像素且越过手牌区上边缘后松手确认。没有在移动途中扣费或使用。 - 手动多目标:用户确认保留原来的选目标与确认;本模块只保留选中卡牌,不自动替用户选齐目标或提交。 - 技能虚拟牌、响应、复杂选择、自定义替换处理、已存在选择等不接管,继续走原引擎交互。 - 短点击保留原生行为;无合法目标、费用不足、Escape、右键、失焦、指针取消回收拖动,不能误出牌。 ## 生命周期与安全 新 `fan.js` 负责命名空间变量、悬停和拖动位置;`input.js` 负责局部输入转接。 `mode.js` 向挂载函数传入现有引擎的 get/_status/canPayCard/isActiveCardUse,未改变出牌经济。 选牌和试选目标调用期间同步暂设 touchnocheck,避免移动途中自动确认;finally恢复原值及属性是否存在。 只在当前事件身份未改变时取消自身选择;换事件、换容器、会话结束后不提交旧事件。 卸载移除监听、SVG、观察器、标记与变量,保留真实卡牌和其他扩展的属性;重复卸载安全。 ## 证据边界与交付 已运行独立浏览器场景,使用本次真实子模块、原生 `ui.click.card` 函数体;目标选择、确认及 game.check 服务仍为测试替身。 这不等于完整游戏、十周年布局、技能、真实触屏或AI实测通过。需用户进入梦三核对真实卡面尺寸与目标点击。 交付为候选源码包和可应用补丁;已安装源码保持原字节未改动。回滚脚本只接受候选副本ZIP,恢复本次基线覆盖包,不会触碰游戏安装目录。