@operato/scene-storage 10.0.0-beta.46 → 10.0.0-beta.47

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
@@ -3,6 +3,21 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [10.0.0-beta.47](https://github.com/things-scene/operato-scene/compare/v10.0.0-beta.46...v10.0.0-beta.47) (2026-05-26)
7
+
8
+
9
+ ### :rocket: New Features
10
+
11
+ * **scene-base:** AN-PR-2 — Obstacle interface + 기존 컴포넌트 자격 부여 ([3e45e19](https://github.com/things-scene/operato-scene/commit/3e45e19f53c04d7f01bbbe9ea079f5f7f7a7d8f5))
12
+ * **transport/storage:** Phase Z PR-4 — multi-carrier mover (forkSlots state) ([5e398d1](https://github.com/things-scene/operato-scene/commit/5e398d12075c7732d42a27a439d2246acb735289))
13
+
14
+
15
+ ### :bug: Bug Fix
16
+
17
+ * **storage:** test runner ESM 해결 — Node loader (Component 가 transfer bundle 미포함) ([984ca9c](https://github.com/things-scene/operato-scene/commit/984ca9c09cedd90cb60fb000a014914ab01bd69d))
18
+
19
+
20
+
6
21
  ## [10.0.0-beta.46](https://github.com/things-scene/operato-scene/compare/v10.0.0-beta.45...v10.0.0-beta.46) (2026-05-24)
7
22
 
8
23
 
package/dist/crane.js CHANGED
@@ -168,6 +168,12 @@ let Crane = class Crane extends Mover(CarrierHolder(ContainerCapacity(Legendable
168
168
  * 미설정 = state-driven) 에 carrier 가 *지하* 로 가는 결함.
169
169
  */
170
170
  get slots() {
171
+ // Phase Z PR-4: 사용자가 state.forkSlots 명시 시 그대로 활용. 미명시 시 단일
172
+ // 'forks' default (backward compat). multi-fork crane (twin / quad) 모델링
173
+ // 가능 — [{ id: 'fork-L', ... }, { id: 'fork-R', ... }] 형태로.
174
+ const custom = this.state?.forkSlots;
175
+ if (Array.isArray(custom) && custom.length > 0)
176
+ return custom;
171
177
  return [{ id: 'forks', maxCount: 1, localPosition: { x: 0, y: 0, z: 0 } }];
172
178
  }
173
179
  /**
@@ -327,7 +333,9 @@ let Crane = class Crane extends Mover(CarrierHolder(ContainerCapacity(Legendable
327
333
  const tween = { carriagePosition: newCarriagePos };
328
334
  const targetBottomWorldY = resolveCarrierBottomY(target);
329
335
  if (targetBottomWorldY !== null) {
330
- const isHoldingCarrier = this.components?.some?.((c) => c?._transferSlotId === 'forks') ?? false;
336
+ // Phase Z PR-4: 임의 slot 의 carrier 검사 (multi-fork 대비). 단일 'forks'
337
+ // 가정 제거 — c._transferSlotId 가 set 됐으면 어떤 slot 이든 holding.
338
+ const isHoldingCarrier = this.components?.some?.((c) => c?._transferSlotId != null) ?? false;
331
339
  const liftH = numOr(this.state.forkLift, 30);
332
340
  const approachWorldY = targetBottomWorldY + (isHoldingCarrier ? liftH : 0);
333
341
  const ro = this._realObject;
@@ -450,8 +458,9 @@ let Crane = class Crane extends Mover(CarrierHolder(ContainerCapacity(Legendable
450
458
  // 2. carrier lower — forkLiftRT liftH → 0. carrier 가 cell 바닥 안착.
451
459
  await this._tween({ forkLiftRT: 0 }, D_LIFT);
452
460
  // 3. dispatch — carrier world 위치 = cell 내 attach 위치, jump 없음. Transfer 추적.
461
+ // Phase Z PR-4: 임의 slot 의 carrier 검사 (multi-fork 대비).
453
462
  const comps = this.components;
454
- const carrier = comps?.find?.((c) => c?._transferSlotId === 'forks')
463
+ const carrier = comps?.find?.((c) => c?._transferSlotId != null)
455
464
  ?? comps?.[0];
456
465
  if (carrier) {
457
466
  try {