import { Component, ComponentNature, RealObject } from '@hatiolab/things-scene'; import type { State, SlotDef } from '@hatiolab/things-scene'; import { type Alignment, type CarrierAttachPoint, type MoveOptions, type PlacementArchetype } from '@operato/scene-base'; /** * Cart — 전동 운반 카트 (powered transport cart). * * 개념상 사람이 운전하는 forklift 와 동류 = **위치-가변 FlowNode = Mover** (구분 기준은 * 자율성·적재기구가 아니라 *위치 가변성*). 스스로 navigate(moveTo)하며 cargo 를 deck 에 싣고 * 나른다. cargo 는 items(Holdable)로 보유, deck 캐파는 slot(Capacity)으로 바인딩. * * (구 host-following viz 오버레이 동작은 폐기 — powered cart 는 host 에 종속되지 않고 스스로 이동. * "host 에 붙어 따라가는 시각 cart" 가 별도로 필요하면 별개 컴포넌트로 분리.) */ export interface CartState extends State { shelves?: number; shelfColor?: string; postColor?: string; /** 이동 속도 (scene units/sec) — Mover.moveTo 가 소요시간 도출에 사용. */ speed?: number; /** deck 최대 적재 수 — canReceive 백프레셔의 하드 캡. default = shelves. */ capacity?: number; } export declare class Cart3D extends RealObject { build(): void; } declare const CartBase: typeof Component & { new (...args: any[]): Component & { isMover: boolean; attachPointFor(carrier: Component): CarrierAttachPoint | undefined; pick(carrier: Component, options?: MoveOptions): Promise; place(carrier: Component, holder: Component, options?: MoveOptions): Promise; pickAndPlace(carrier: Component, holder: Component, options?: MoveOptions): Promise; }; }; export declare class Cart extends CartBase { get state(): CartState; static placement: PlacementArchetype; static align: Alignment; get nature(): ComponentNature; get anchors(): never[]; /** * deck 적재 slot (Capacity). 단일 slot 에 capacity 만큼 stack 적재 — sim 캐파 바인딩 * (canReceive 백프레셔). 3D 적재 위치(stack 좌표)는 slot mount 방식으로 후속 (pallet 과 동일 보류). */ get slots(): SlotDef[]; buildRealObject(): RealObject | undefined; render(ctx: CanvasRenderingContext2D): void; } export {};