dsh-pighub 0.9.75 → 0.9.77
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/assets/img/house-closed.png +0 -0
- package/assets/img/house-open.png +0 -0
- package/lib/assets.js +2 -1
- package/lib/client.js +29 -6
- package/lib/index.js +1 -1
- package/package.json +1 -1
- package/test/client.test.mjs +4 -1
- package/test/host.test.mjs +2 -2
|
Binary file
|
|
Binary file
|
package/lib/assets.js
CHANGED
|
@@ -21,7 +21,8 @@ export const ASSET_ROUTE = '/pighub/asset';
|
|
|
21
21
|
*/
|
|
22
22
|
export const PEN_ROUTE = '/pighub/pen';
|
|
23
23
|
// 猪圈布景图:围栏 + 仓库小屋(用户 2026-11-14 指定用这张谷仓图,替掉原来的 SVG 兜底)
|
|
24
|
-
|
|
24
|
+
// 猪圈布景:围栏 + 仓库小屋的**两个状态**(平时关着;拖着猪经过时打开)
|
|
25
|
+
export const PEN_ART = ['pen-fence.png', 'house-closed.png', 'house-open.png'];
|
|
25
26
|
|
|
26
27
|
/** 读冻结库。缺失或坏掉都不抛:返回 null,由调用方决定怎么降级。 */
|
|
27
28
|
export function readAssetManifest() {
|
package/lib/client.js
CHANGED
|
@@ -102,10 +102,18 @@ window.__ModuleLoader__.load({
|
|
|
102
102
|
// 但猪走到它前面时猪在小屋之上。小屋整只都在分割线 50.68% 以上,所以永远不会盖到前景栅栏。
|
|
103
103
|
// 仓库(谷仓)位置与尺寸:用户 2026-11-14「太小了,放大一点,下移一点点,右移一点点」
|
|
104
104
|
// 18% → 22% 宽;left 9.7% → 12%;top 6.7% → 9.5%(对齐按固定采样点核对,见 scripts/_house-sample.mjs)
|
|
105
|
-
|
|
105
|
+
// 仓库(谷仓):用户 2026-11-14「放大一点、下移一点点、右移一点点」,同时必须满足既有遮挡不变量
|
|
106
|
+
// (屋沿要压过上横梁上缘 8.29%、压梁高度 > 屋高一半)——所以 top 只能到 8.0%,width 21%。
|
|
107
|
+
// 仓库(谷仓)盒子:按用户 2026-11-14 在 902×944 截图上画的红框量取
|
|
108
|
+
// x 10%..36.5%(宽 26.5%)、y 6.9%..31.8%(高 24.9%);aspect-ratio 写成 26.5/24.9 让测试能算出高度
|
|
109
|
+
'.pighub-house{position:absolute;left:10%;top:6.9%;width:26.5%;aspect-ratio:26.5/24.9;z-index:' + Z_HOUSE + ';cursor:pointer}',
|
|
106
110
|
'.pighub-house svg{width:100%;height:100%;display:block;overflow:visible}',
|
|
107
111
|
// 仓库改成位图(谷仓图):铺满盒子并强制拉伸;图本身已去背景(透明)
|
|
108
|
-
'.pighub-house-img{width:100%;height:100%;display:block;object-fit:fill;user-select:none;pointer-events:none
|
|
112
|
+
'.pighub-house-img{width:100%;height:100%;display:block;object-fit:fill;user-select:none;pointer-events:none;',
|
|
113
|
+
'transform-origin:50% 100%;transition:transform .16s ease}',
|
|
114
|
+
// 开关门 / 猪出入库时「弹一下」:开门用一次性缩放动画
|
|
115
|
+
'.pighub-house-img.is-open{animation:pighub-house-pop .34s cubic-bezier(.2,1.6,.4,1)}',
|
|
116
|
+
'@keyframes pighub-house-pop{0%{transform:scale(1)}45%{transform:scale(1.06) translateY(-2px)}100%{transform:scale(1)}}',
|
|
109
117
|
'.pighub-house-wall{fill:color-mix(in oklab,#f2d8b0 84%,var(--dsw-alias-bg-elevated,#fff))}',
|
|
110
118
|
'.pighub-house-wall-sh{fill:color-mix(in oklab,#cba57a 82%,var(--dsw-alias-bg-elevated,#fff))}',
|
|
111
119
|
'.pighub-house-roof{fill:color-mix(in oklab,#dc7148 86%,var(--dsw-alias-bg-elevated,#fff))}',
|
|
@@ -1966,6 +1974,15 @@ window.__ModuleLoader__.load({
|
|
|
1966
1974
|
/* 这一帧的 z 名次表:按脚底排(拖动中的那只排最后 = 一档里最上)。
|
|
1967
1975
|
* 必须在 return 之前算,因为名次是**整圈相对**的,不是单只猪的函数;
|
|
1968
1976
|
* 每帧重渲染都会重算(游走、拖动、落地、回圈都触发渲染)。 */
|
|
1977
|
+
/* 拖着猪经过仓库上方 → 开门(用户口径 2026-11-14)。盒子与 .pighub-house 的 CSS 同源。 */
|
|
1978
|
+
const houseOpen = (() => {
|
|
1979
|
+
const drag = state.drag;
|
|
1980
|
+
if (!drag || drag.x === undefined || drag.y === undefined) return false;
|
|
1981
|
+
const dx = Number(drag.x);
|
|
1982
|
+
const dy = Number(drag.y);
|
|
1983
|
+
return dx >= 12 && dx <= 33 && dy >= 0 && dy <= 33;
|
|
1984
|
+
})();
|
|
1985
|
+
|
|
1969
1986
|
const zById = penZIndexMap(penPigs, actors, state.drag && state.drag.active ? state.drag.id : null);
|
|
1970
1987
|
|
|
1971
1988
|
return h('div', { className: 'pighub-panel' },
|
|
@@ -2000,13 +2017,19 @@ window.__ModuleLoader__.load({
|
|
|
2000
2017
|
return Object.keys(style).length ? style : undefined;
|
|
2001
2018
|
})(),
|
|
2002
2019
|
},
|
|
2020
|
+
/* 仓库两个状态(用户口径 2026-11-14):平时关门;拖着猪移到上面时开门,放下关门入库。
|
|
2021
|
+
* 主题可用 house.image(关)/ house.openImage(开)覆盖,没给就用包内这两张。 */
|
|
2003
2022
|
h('img', {
|
|
2004
|
-
className: 'pighub-house-img',
|
|
2023
|
+
className: 'pighub-house-img' + (houseOpen ? ' is-open' : ''),
|
|
2005
2024
|
draggable: false,
|
|
2006
2025
|
alt: '',
|
|
2007
|
-
src:
|
|
2008
|
-
?
|
|
2009
|
-
|
|
2026
|
+
src: houseOpen
|
|
2027
|
+
? ((theme.house && theme.house.openImage)
|
|
2028
|
+
? '/pighub/theme/' + encodeURIComponent(theme.name) + '/' + encodeURIComponent(theme.house.openImage)
|
|
2029
|
+
: '/pighub/pen/house-open.png')
|
|
2030
|
+
: ((theme.house && theme.house.image)
|
|
2031
|
+
? '/pighub/theme/' + encodeURIComponent(theme.name) + '/' + encodeURIComponent(theme.house.image)
|
|
2032
|
+
: '/pighub/pen/house-closed.png'),
|
|
2010
2033
|
}),
|
|
2011
2034
|
),
|
|
2012
2035
|
penPigs.length === 0
|
package/lib/index.js
CHANGED
|
@@ -44,7 +44,7 @@ export const inject = ['tools'];
|
|
|
44
44
|
import { startDesktopPet, stopDesktopPet, syncDesktopPet, desktopPetState, sayOnDesktop, reclaimStaleSessions } from './desktop-pet.js';
|
|
45
45
|
|
|
46
46
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
47
|
-
const VERSION = '0.9.
|
|
47
|
+
const VERSION = '0.9.77';
|
|
48
48
|
/** 桌面桌宠的精灵边长(CSS px 基准,= manifest 里 sizeRatio 的中位数)。 */
|
|
49
49
|
const DESKTOP_PET_SIZE = 96;
|
|
50
50
|
/** 全局尺寸系数(用户口径 2026-11-13:「整体猪猪缩小到 75% 大小」)。三层一起乘。 */
|
package/package.json
CHANGED
package/test/client.test.mjs
CHANGED
|
@@ -434,7 +434,10 @@ await acheck('三层矩形:草坪红框 ⊃ 栅栏内圈 ⊃ 猪的活动区
|
|
|
434
434
|
const covered = Math.min(houseBottom, RAIL_BOTTOM) - Math.max(houseTop, RAIL_TOP);
|
|
435
435
|
assert.ok(houseTop < RAIL_TOP, '小屋上沿必须高于上横梁上缘(否则只能压到下半截)');
|
|
436
436
|
assert.ok(covered >= 9, '小屋没把横梁整段盖住:重叠 ' + covered.toFixed(2) + ' 个百分点');
|
|
437
|
-
|
|
437
|
+
/* 2026-11-14:谷仓按用户红框放大到 26.5%×24.9%,屋高已远大于横梁带 9.17pp,
|
|
438
|
+
* 「压梁高度 > 屋高一半」这条老约束不再适用;改成更本质的判据——把横梁带整段盖住。 */
|
|
439
|
+
assert.ok(covered >= RAIL_BOTTOM - RAIL_TOP - 0.01,
|
|
440
|
+
'小屋必须把远栏横梁带(8.29..17.46)整段盖住,实际重叠 ' + covered.toFixed(2));
|
|
438
441
|
// ③ 与左立柱重叠(转角那一块最明显),且整只在分割线以上
|
|
439
442
|
assert.ok(houseLeft < PEN_INNER.x0 - 1, '小屋必须与左立柱重叠:left=' + houseLeft);
|
|
440
443
|
assert.ok(houseBottom < splitValue(), '小屋整只必须在分割线以上(它只压后栏,不许盖前景栏)');
|
package/test/host.test.mjs
CHANGED
|
@@ -52,8 +52,8 @@ check('注册了工具、状态路由与每张素材的静态路由', () => {
|
|
|
52
52
|
// 猪圈布景(木栅栏)走单独一条前缀:它不是素材库的一部分,不能混进上面那条「每只猪一条路由」。
|
|
53
53
|
const penRoutes = [...routes.keys()].filter((path) => path.startsWith('/pighub/pen/'));
|
|
54
54
|
/* 猪圈布景现在有两张:围栏 + 谷仓小屋(0.9.73 起)。断言条数与内容都跟 PEN_ART 对齐。 */
|
|
55
|
-
assert.deepEqual(penRoutes, ['/pighub/pen/pen-fence.png', '/pighub/pen/house-
|
|
56
|
-
'猪圈布景应有
|
|
55
|
+
assert.deepEqual(penRoutes, ['/pighub/pen/pen-fence.png', '/pighub/pen/house-closed.png', '/pighub/pen/house-open.png'],
|
|
56
|
+
'猪圈布景应有 3 条静态路由(围栏 + 仓库关/开),实际 ' + JSON.stringify(penRoutes));
|
|
57
57
|
assert.deepEqual(plugin.inject, ['tools'], '只注入 tools:webServer 缺失时不能让整个 profile 启动失败');
|
|
58
58
|
});
|
|
59
59
|
|