import * as THREE from 'three'; import { RealObjectGroup } from '@hatiolab/things-scene'; import type { Stocker } from './stocker.js'; export declare class Stocker3d extends RealObjectGroup { private _cranes; /** * 칸 InstancedMesh — 채워진 칸과 빈 칸 두 벌. 랙 한 쪽마다 한 쌍이 붙는다. * `userData._locationIds` 에 instanceId 순서대로 위치 id 가 들어 있다 — * 전에는 mesh.name 이 지던 몫이다(클릭 역참조용). */ private _cellMeshes; private _unsubTick; get stocker(): Stocker; protected get syncZPosOffset(): number; get geometricOffsetY(): number; build(): void; private _buildRackSide; /** * 칸 한 벌을 InstancedMesh 로 붙인다. * * geometry 와 재질은 창고 소유라 여기서 버리지 않는다. 인스턴스 자리(instanceMatrix)와 * 색(instanceColor)만 이 메시의 몫이고, 그것은 `dispose()` 가 반납한다. */ private _addCellMesh; private _buildEnclosure; private _buildCranes; updateCraneTargets(): void; private _startCraneAnim; onchange(after: Record, before: Record): void; /** * 다시 그리기 전의 뒷정리. * * `state.data` 가 바뀌면 `onchange` 가 `update()` 를 부르고, 그것이 여기를 지난다 — * 라이브 경로다. 공용 teardown(`disposeObject3D`)은 `InstancedMesh.dispose()` 를 * 부르지 않으므로, 그냥 두면 instanceMatrix·instanceColor 의 GPU 버퍼가 갱신마다 * 쌓인다(three 0.183 에서 gl.deleteBuffer 로 가는 길은 그것뿐이다). * * 공용 teardown 에 넘기기 전에 **먼저 떼어 낸다**. 그래야 창고 소유인 geometry 와 * 재질이 함께 버려지지 않는다. */ clear(): THREE.Group; dispose(): void; updateDimension(): void; updateAlpha(): void; }