dsh-pet-live2d 2.3.3 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,169 @@
1
1
  # 更新日志
2
2
 
3
+ ## 3.0.0
4
+
5
+ **桌面端正式随插件一起发布。** 装完插件、在设置里选「桌面」,她就在桌面上——
6
+ 不用去下别的任何东西(Windows x64 自带平台二进制;其它平台装插件时会被 npm 静默跳过,
7
+ 插件照常工作,只是"桌面"那一项不可用)。
8
+
9
+ ### 新:桌面端二进制随包分发
10
+
11
+ `dsh-pet-live2d-desktop-win32-x64` 作为**可选依赖**随主包安装。以前它是悬空的
12
+ (那个包在 npm 上根本不存在),所以桌面端只能靠设置里那个「下载桌面端」按钮现拉一份;
13
+ 现在**装完就有**,下载那条路保留作为兜底。
14
+
15
+ ### 修:她固定在**自己那块屏**上
16
+
17
+ 用户报的:"宠物应该是在固定位置,现在我鼠标在不同屏幕上宠物居然会跟随我的鼠标所在的屏幕。"
18
+
19
+ 以前窗口每帧跟着光标换屏。现在:**启动时落到光标所在屏,之后由你决定**——
20
+ 托盘菜单里有「屏幕」子菜单,列出每块屏的分辨率与位置,当前那块打点。
21
+ 指针移到别的屏,她待在原地、只是视线贴到屏幕边缘。
22
+
23
+ ### 修:只在焦点在她身上时才跟随鼠标
24
+
25
+ 用户报的:"只有焦点在宠物上才有跟随。" 桌面端原来靠 `pointermove`,而那个事件**只在指针
26
+ 落在她窗口上时**才会送到页面 —— 你在别的程序里打字时,她的视线是死的。
27
+
28
+ 现在由壳每 33ms 读一次**全局光标**喂给页面,所以**不管焦点在哪**她都跟着你。
29
+ 跟随范围也改成一道**正圆**距离曲线(一个半径说了算):范围内完全跟随,
30
+ 超出后平滑收回、并回到她自己的正前方(原来是方形硬边界 + 到边缘就侧着一直盯着)。
31
+
32
+ ### 修:托盘菜单四项都失效
33
+
34
+ 用户报的四条,三条是同一个根因:**壳发的窗口事件根本到不了页面**。
35
+
36
+ | 你看到的 | 真相 |
37
+ |---|---|
38
+ | 「设置…」点了没效果 | Tauri 的 `window.emit()` **不发 DOM 事件**、只走 IPC,而页面里没有 `window.__TAURI__` |
39
+ | 「归位」点了没反应 | 同上 |
40
+ | 「藏起来」过一会儿又自己出来 | 没记住"是用户藏的",显示循环一秒后又把她显示出来了 |
41
+ | 「屏幕」里选中的圆点不更新 | 菜单是启动时建好就定住的 |
42
+
43
+ 现在给页面送动作走**命令队列**(HTTP,页面每 33ms 取一次),用户的显隐意图单独记着,
44
+ 菜单每次状态变化重建。
45
+
46
+ ### 修:右下角那片"空白却摸得到"的区域
47
+
48
+ 用户报的:"触摸区域在右下角有一大片奇怪的可触摸区域,那里明明什么都没有。"
49
+
50
+ 尾巴那一层原来是**几何并集**(包围盒 128×162px,占舞台 43%×54%),而"算不算落在她身上"
51
+ 用的是**栅格**(还带一格膨胀)。两套几何不一致,差集就是你摸得到、判定却不认的那片空白。
52
+ 现在尾巴也按**同一套栅格**重采(实测那片区域 14 格 → **0** 格)。
53
+
54
+ ### 修:摸头/摸尾巴不再打断你正在看的东西
55
+
56
+ 用户报的:"摸头和摸尾巴不要还原当前动作啊,随机到哪一个插槽里的就放哪一个插槽里的就行了。"
57
+
58
+ 以前摸一下头,反应结束时会把身体交还待机 —— 你刚选好的「掏出手机」就没了。
59
+ 现在反应优先走"**只换随机到的那个槽位**",动作类的演完会**接回原来的动作**。
60
+ 另外反应留下来的表情/情绪**过 12 秒自己收回默认**(摸三下头,最后一下之后才开始数)。
61
+
62
+ ### 修:「自拍」右手不抬
63
+
64
+ 用户报的:"动作里的自拍动画会动,但装扮里的不会动。" 而且一直是**右手没抬起来**。
65
+
66
+ 查下来是"保姿势录像"每帧把当前动作的曲线压住了:自拍的抬手曲线(`phone5`)在跑
67
+ (实测涨到 9.7),但「掏出手机」定格时录下的那一帧里它是 0,而那一帧每帧被写回去 ——
68
+ 写在动作之后,曲线就白跑了。现在**当前动作自己写的参数不再被回放覆盖**。
69
+
70
+ ### 修:重锤出击前先清掉冲突的表情
71
+
72
+ 用户要求:"重锤出击动作应该判断一下当前眼部是不是 晕晕/呆呆眼,情绪是不是 开心兴奋/闭眼口水,
73
+ 如果是应该先把眼部或情绪还原为默认。"
74
+
75
+ 挥锤是清醒有力的动作,而 `Hammer` 只写手臂参数、脸一概不管 —— 眼部停在「晕晕」、
76
+ 情绪停在「闭眼口水」时挥锤,画面上就是"一个晕乎乎、闭着眼流口水的人在奋力挥锤"。
77
+ 现在开演前只清**列出来的**那几个选项(你选的其它眼睛不会被这一锤抹掉),清单可在设置里改。
78
+
79
+ ### 修:桌面端的设置与 DSH 里的设置不同步
80
+
81
+ 用户报的:"桌面的设置与 dsh 里的设置没有同步。"
82
+
83
+ 根因是**两边根本不在同一个 localStorage 里**:桌面端页面是
84
+ `http://127.0.0.1:<随机端口>`,DSH 是 `http://127.0.0.1:3080`,浏览器按 origin 隔离。
85
+ 现在三类**跨窗口该一致**的设置(手感滑杆 / 相位池子与开关 / 装扮)放在
86
+ `%DSH_HOME%\pet-settings.json`,两个界面都读写它,3 秒内互相跟上。
87
+ **位置与大小仍然各窗口各一份**(她贴屏幕右下角还是贴面板右下角,本来就是两件事)。
88
+
89
+ ## 2.3.5
90
+
91
+ ### 新:设置里可以选"她在页面内还是桌面上"
92
+
93
+ 设置 → 桌宠 多了一张「显示位置」卡,三个选项:
94
+
95
+ | 选项 | 效果 |
96
+ |---|---|
97
+ | **自动**(默认) | 桌面端在跑就用桌面,否则留在 DSH 页面里 |
98
+ | **页面内** | 永远在 DSH 页面里(随 DSH 启停) |
99
+ | **桌面** | 永远在桌面上;没跑就**自动拉起**一个 |
100
+
101
+ **同一时刻只有一只。** 两边靠一个共用的小文件(`%DSH_HOME%\pet-desktop.json`)协调:
102
+ 桌面端每秒刷一次心跳,页面侧每秒读一次,规则是"心跳新鲜且没选页面内 → 桌面端接管",
103
+ 否则页面里那只接管。桌面端退出时立刻清心跳,所以**页面里那只马上就回来**,不用等超时。
104
+
105
+ 桌面端的二进制由**平台子包**随插件一起装(Windows x64 现在有;其它平台装插件时会被 npm
106
+ 静默跳过,插件照常工作,只是设置里那一项不可用)。这一项不需要你手动装任何东西。
107
+
108
+ ### 修:设置页整个打不开(2.3.5 之前那一版引入的)
109
+
110
+ 症状很怪:**宠物一切正常,只有设置页打不开**。原因是新加的「显示位置」那张卡读了一个
111
+ **宠物组件内部的 ref**,而设置页那一节渲染在**宠物组件之外**(它挂在 DSH 设置页上),
112
+ 于是渲染时直接 `ReferenceError`,整节设置崩掉。
113
+
114
+ 现在显示层状态放在模块级的小 store 里,宠物与设置页都从那里读。
115
+ 顺带给验证套件补了 `cdp-settings-render`:它**真的渲染一次设置正文**并断言没有未捕获异常
116
+ —— 以前 19 个 driver 只验"那一节注册上了",这种崩法能一路绿灯。
117
+
118
+ ## 2.3.4
119
+
120
+ ### 修:摸尾巴"很难点到" —— 尾巴的判定区域和可点区域都收紧了
121
+
122
+ 用户的原话:"尾巴一直在摆动,摸尾巴的事件现在很难点到。"查下来是**两件事叠在一起**,
123
+ 而且第二件才是主因。
124
+
125
+ **① 尾巴判定把 11 个"可换配件"也算成了尾巴。**
126
+
127
+ `hitsTail` 原来按名字挑部件(名字里带 `尾|鳍|翅|翼`),这只模型里有 **15 个部件 / 16 块**
128
+ drawable 命中 —— 但其中 11 块是**可选配件**(狐狸尾 / 猫尾 / 狼尾 / 天使翅膀 / 恶魔翅膀…),
129
+ 几何**一直留在原地**、横跨从头顶到腰腹的整个角色。实测(24×24 网格):
130
+
131
+ | | 修之前 | 修之后 |
132
+ |---|---|---|
133
+ | "算尾巴"的格子占角色 | 22.0% | 5.2% |
134
+ | 其中同时算头(会被摸头优先吃掉) | 86.6% | ~55% |
135
+ | **只算尾巴、真正可点的格子** | ~17 | ~59 |
136
+
137
+ 于是你点在**看得见的尾鳍**上,拿到的是摸头反应(重锤出击)。
138
+
139
+ 现在按**贴图**收窄:`texture_00.png` 上鲸鱼尾鳍只占 `x 3..444, y 953..1397` 那一块,
140
+ 落在那里的正好是 `ArtMesh38/56/58/59/60` 五块(全属于部件 `尾巴(蒙皮)`)。UV 读不到时
141
+ **不做收窄**,退回旧行为 —— "更精确"不能变成"整个失效"。
142
+
143
+ **② 可点区域(轮廓快照)跟不上摆动。**
144
+
145
+ 摸头/摸尾巴的判定每次点击都现读几何,所以"点的是不是尾巴"是准的;但**决定事件归谁**
146
+ 的那层 `clip-path` 轮廓是**开机从画布抓一次**的静态快照。尾鳍一直在摆,摆出快照的那
147
+ 一瞬间,点击**直接穿透到页面**(实测 `elementFromPoint` 返回 `HTML`,而判定说她是)。
148
+
149
+ 现在尾巴有一块**跟着摆动实时更新**的可点矩形(每 ~120ms,模型空间 → 舞台按 y 轴方向
150
+ 换算),并进 `[data-hit]` 的 `clip-path`;JS 侧的 `hitsMask` 用**同一套**(当前尾巴盒子
151
+ 或静态快照,取或)—— 两边必须一致,否则就是"事件进得来、判定说不在她身上"这种点了没反应。
152
+ 顺序也踩过坑:`hitsMask` 一度改成纯几何,结果"只有几何、没有像素"的点被算成在她身上,
153
+ 而 DOM 并不覆盖它 —— `cdp-passthrough` 立刻红。
154
+
155
+ **顺带**:`onModel`("算不算落在她身上")以前只认静态快照,现在也认尾巴当前盒子。
156
+
157
+ ### 诊断:一批新读口
158
+
159
+ - `lastPress()` —— **按住那一刻**路由用的三个答案(`onModel` / `onHead` / `onTail`)+ 时间戳。
160
+ "点了没反应"要先分清是事件没进来、还是判定说不是她;从"她说了什么"倒推是分不出来的。
161
+ - `tailDebug()` —— 尾巴判定的收窄结果(收窄前后各是哪些、贴在哪块贴图上)与尾巴实时盒子。
162
+ - `hitsMaskStatic()` —— **只按静态快照**判定。要证明"这一点在快照外、却在宽限之内",
163
+ 就得能把两层分开读。
164
+ - `uvRaw()` / `uvTables()` —— 贴图坐标表本身(哪块 drawable 画在贴图的哪一块)。
165
+ - `modelToStage()` —— 模型空间 → 舞台坐标,尾巴那块实时矩形靠它换算。
166
+
3
167
  ## 2.3.3
4
168
 
5
169
  ### 修:互动反应补上**内置默认值** —— 宠物没声明那三组也演得出来
package/README.md CHANGED
@@ -10,7 +10,7 @@
10
10
  > 你自己改过的那份**不会被覆盖**(判定是内容指纹,改过就一个字都不碰),
11
11
  > 想拿回随包版本就把目录删掉、重启 `dsh web`,它会重新装一份。更新日志见 [CHANGELOG.md](CHANGELOG.md)。
12
12
 
13
- ![桌宠](docs/preview.png)
13
+ ![界面预览:DS鲸鱼娘桌宠(大肥鱼 pet-live2d)](docs/banner.png)
14
14
 
15
15
  ## 功能
16
16
 
@@ -129,10 +129,15 @@ dsh plugin --profile web add "link:./dsh-pet-live2d/dsh-live2d-pet"
129
129
 
130
130
  - 摸头/摸尾巴按**三角面**判定:圆顶带耳朵尖的头部轮廓、尾巴的边缘都对得上,不是方框。
131
131
  顶点是**当前帧变形后**的,所以头歪着、身体摆着也准。
132
- - **摸头优先于摸尾巴**:这两个区域可能有重叠(尾巴/翅膀挂件在身后,几何上会伸到头部
133
- 附近),重叠处算摸头。
132
+ - **尾巴只认"鲸鱼尾鳍"那一块**:这只模型有 16 块 drawable 的名字里带"尾/翅/翼",但其中
133
+ 11 块是**可选配件**(狐狸尾 / 猫尾 / 狼尾 / 天使翅膀…)的几何、一直留在原地、横跨全身。
134
+ 全算成尾巴的话"点到哪儿都是尾巴",而摸头又优先,可见的尾鳍反而摸不到。所以尾巴是按
135
+ **贴图**认的:`texture_00.png` 上鲸鱼尾鳍那一块对应的 5 块 drawable(都属部件 `尾巴(蒙皮)`)。
136
+ - **可点区域跟着尾巴动**:决定事件归谁的那层轮廓是开机抓一次的,尾鳍摆动时会摆出去 ——
137
+ 现在尾巴有一块实时跟随的可点矩形并进轮廓里,所以**摆到哪儿都点得到**。
138
+ - **摸头优先于摸尾巴**:尾巴判定收紧之后两者基本不再重叠,重叠处仍然算摸头。
134
139
  - **尾巴/翅膀是可选配件**:没戴的时候它们的几何是退化的,"摸尾巴"就是没反应 ——
135
- 这是对的,不是坏了。戴上翅膀/尾巴(装扮槽)之后才摸得到。
140
+ 这是对的,不是坏了。戴上尾巴(装扮槽)之后才摸得到。
136
141
  - 转圈看的是**累计转角**(不是位置绕了几圈),所以贴着角色转小圈、远远转大圈都算。
137
142
  - 三个互动各自可开关,反应也能改(见下)。共用的三句台词在「气泡」设置里。
138
143
 
@@ -324,6 +329,11 @@ cd ../../tools/browser-test && npm install && npm run suite
324
329
  `fidgetTally()`(摸鱼抽签统计)、`effectiveRelations()` / `settingsOverrides()`(有效关系与
325
330
  存档覆盖)、`ambientDebug()` / `keptPoseDebug()`(氛围回放与姿势保持的内部状态)。
326
331
 
332
+ ## 交流群
333
+
334
+ **大肥鱼 pet-live2d 交流群** —— QQ 群号 **974641848**:装不上、模型不对劲、想投稿自己的宠物,
335
+ 都欢迎进群说。群二维码在[仓库 README 的「交流群」一节](../README.md#交流群)。
336
+
327
337
  ## 许可
328
338
 
329
339
  - 插件代码:MIT
package/docs/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # 截图
2
2
 
3
- 这个目录用于放插件截图。目前**空着**是刻意的:
3
+ 这个目录放插件用到的图片(仓库根 `README.md` 引用它们)。
4
4
 
5
5
  插件自带的示例模型是 DS鲸鱼娘,属于第三方美术资产,以 **CC BY-NC-SA 4.0** 授权
6
6
  (署名 · 非商业 · 相同方式共享),版权链为 上善无形 → ZipZipPipe → 氵六青。
@@ -8,7 +8,22 @@
8
8
 
9
9
  这里的图片:
10
10
 
11
- - `preview.png` — 桌宠与面板的整体截图(300px 宽,建议跑 `tools/browser-test/cdp-final.mjs` 生成)
12
- - `downscale-fix.png` — 缩小时线条清晰度的前后对比
11
+ - `banner.png` — 仓库门面横幅(2730×1536),**AI 辅助生成的二创图**:以本插件的实拍截图
12
+ 与角色设定为参考重绘,属于 CC BY-NC-SA 4.0 的**改编作品**,使用时同样要署名三位版权所有人、
13
+ 不得商用、并以同一协议分发。
14
+ - `panel.jpg` — 右键面板实拍:宠物 + 「动作 8 / 装扮 20」两个页签 + 大小滑杆 + 归位(深色主题,
15
+ 2 倍分辨率)。由 `tools/browser-test/` 的测试台现拍,随插件改动会过期,更新界面时请重拍。
16
+ - `looks.jpg` — 六种造型拼图(默认待机 / 爱心眼 / 星星眼吐舌 / 调皮猫猫手 / 重锤出击 / 挤番茄酱),
17
+ 同样由测试台现拍并裁掉透明边。
18
+ - `downscale-fix.png` — 缩小时线条清晰度的前后对比。
19
+
20
+ 这三张(`banner.png` / `panel.jpg` / `looks.jpg`)在 [`../screenshots.json`](../screenshots.json) 里
21
+ 声明为市场卡片图:**顺序就是卡片上的顺序**,改图之后记得同步那个文件。
22
+ - `preview.png` — **旧截图,别再引用**:底下那条「收起 / 归位 / − / +」工具条已经删掉了
23
+ (现在右键才出面版)。替换它的是 `panel.jpg`,留在这里只作历史对照。
24
+ - `qq-group.png` — 交流群二维码(群号 974641848)。它不是美术资产,不受 CC BY-NC-SA 约束,
25
+ 但仍然随包分发(`files` 里有 `docs`)。
26
+
27
+ 所有图片都随 npm 包分发(`files` 里有 `docs`),所以别往这里塞大图。
28
+ 本地草稿(大尺寸原图、截图源文件)放仓库之外的 `local-assets/`,已在 `.gitignore` 中排除。
13
29
 
14
- 当前这些图片保存在仓库之外的 `local-assets/screenshots/`,已在 `.gitignore` 中排除。
Binary file
package/docs/looks.jpg ADDED
Binary file
package/docs/panel.jpg ADDED
Binary file
Binary file