@hatiolab/things-scene 10.0.0-beta.92 → 10.0.0-beta.94
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/dist-types/components/component-geometry.d.ts.map +1 -1
- package/dist-types/components/mutater/path.d.ts.map +1 -1
- package/dist-types/components/outline/path-outline.d.ts.map +1 -1
- package/dist-types/components/polygon.d.ts +2 -0
- package/dist-types/components/polygon.d.ts.map +1 -1
- package/dist-types/components/polyline.d.ts.map +1 -1
- package/dist-types/components/shape.d.ts.map +1 -1
- package/dist-types/diagnostics/contract-inspector.d.ts +103 -0
- package/dist-types/diagnostics/contract-inspector.d.ts.map +1 -0
- package/dist-types/diagnostics/inspector.d.ts +44 -0
- package/dist-types/diagnostics/inspector.d.ts.map +1 -1
- package/dist-types/layer/modeler/path-handler.d.ts.map +1 -1
- package/dist-types/math/component-pose.d.ts +51 -0
- package/dist-types/math/component-pose.d.ts.map +1 -0
- package/dist-types/math/index.d.ts +3 -0
- package/dist-types/math/index.d.ts.map +1 -0
- package/dist-types/math/pose6dof.d.ts +93 -0
- package/dist-types/math/pose6dof.d.ts.map +1 -0
- package/dist-types/navigation/index.d.ts +7 -0
- package/dist-types/navigation/index.d.ts.map +1 -0
- package/dist-types/navigation/nav-graph.d.ts +55 -0
- package/dist-types/navigation/nav-graph.d.ts.map +1 -0
- package/dist-types/navigation/path-planner.d.ts +29 -0
- package/dist-types/navigation/path-planner.d.ts.map +1 -0
- package/dist-types/navigation/reservation-table.d.ts +103 -0
- package/dist-types/navigation/reservation-table.d.ts.map +1 -0
- package/dist-types/navigation/types.d.ts +145 -0
- package/dist-types/navigation/types.d.ts.map +1 -0
- package/dist-types/things-scene/index.d.ts +10 -2
- package/dist-types/things-scene/index.d.ts.map +1 -1
- package/dist-types/threed/factories/polygon.d.ts +19 -0
- package/dist-types/threed/factories/polygon.d.ts.map +1 -1
- package/dist-types/threed/managers/vertex-gizmo-manager.d.ts +50 -4
- package/dist-types/threed/managers/vertex-gizmo-manager.d.ts.map +1 -1
- package/dist-types/threed/real-object-extrude.d.ts +10 -1
- package/dist-types/threed/real-object-extrude.d.ts.map +1 -1
- package/dist-types/threed/texture/fillstyle-texture.d.ts.map +1 -1
- package/dist-types/transfer/container-capacity.d.ts +72 -0
- package/dist-types/transfer/container-capacity.d.ts.map +1 -1
- package/dist-types/transfer/index.d.ts +9 -1
- package/dist-types/transfer/index.d.ts.map +1 -1
- package/dist-types/transfer/pickup-helpers.d.ts +65 -0
- package/dist-types/transfer/pickup-helpers.d.ts.map +1 -0
- package/dist-types/transfer/transfer.d.ts +168 -0
- package/dist-types/transfer/transfer.d.ts.map +1 -0
- package/dist-types/transfer/types.d.ts +104 -0
- package/dist-types/transfer/types.d.ts.map +1 -1
- package/dist-types/types/polygon-path-arc.d.ts +72 -0
- package/dist-types/types/polygon-path-arc.d.ts.map +1 -0
- package/dist-types/types/polygon-path.d.ts +153 -0
- package/dist-types/types/polygon-path.d.ts.map +1 -0
- package/package.json +1 -1
- package/things-scene-min.js +11 -11
- package/things-scene-min.js.map +1 -1
- package/things-scene-transfer.mjs +6 -1
- package/things-scene.mjs +3 -3
- package/things-scene.mjs.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-geometry.d.ts","sourceRoot":"","sources":["../../src/components/component-geometry.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAoB,MAAM,wBAAwB,CAAA;AAItE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,WAEvD;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"component-geometry.d.ts","sourceRoot":"","sources":["../../src/components/component-geometry.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAoB,MAAM,wBAAwB,CAAA;AAItE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,WAEvD;AAED,wBAAgB,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,QAcrF;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,MAAM,QAsB/C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,QAa7C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO;;;;;EAiC/F;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,UAOxE;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,OAElD;AAID,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG;;;;;EAyBnC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,QAuBhD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG;;;EAOnC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,QAiB/C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG;;;;EAKrC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,QAOpD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG;;;;EAInC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,QAOhD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG;;;;EAKtC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,QAKtD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,WAGjC;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,QAE5C;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,GAAG,OAErC;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,GAAG,OAExC;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,GAAG,OAEpC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,OAEtC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,GAAG,OAEtC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/components/mutater/path.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/components/mutater/path.ts"],"names":[],"mappings":"AAgBA,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,IAAI,EAAE,GAAG,EAAE,WAAW,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,QAyD5F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-outline.d.ts","sourceRoot":"","sources":["../../../src/components/outline/path-outline.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"path-outline.d.ts","sourceRoot":"","sources":["../../../src/components/outline/path-outline.ts"],"names":[],"mappings":"AAmDA,MAAM,CAAC,OAAO,UAAU,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,OA4CnE"}
|
|
@@ -3,6 +3,8 @@ export default class Polygon extends Shape {
|
|
|
3
3
|
is3dish(): boolean;
|
|
4
4
|
get mutable(): boolean;
|
|
5
5
|
get pathExtendable(): boolean;
|
|
6
|
+
/** PathHandler 가 corner radius 핸들 ◯ 을 그릴지 여부 (Phase L.1c-2) */
|
|
7
|
+
get cornerEditable(): boolean;
|
|
6
8
|
get path(): any;
|
|
7
9
|
set path(path: any);
|
|
8
10
|
contains(x: any, y: any): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polygon.d.ts","sourceRoot":"","sources":["../../src/components/polygon.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"polygon.d.ts","sourceRoot":"","sources":["../../src/components/polygon.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,MAAM,YAAY,CAAA;AAuC9B,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,KAAK;IACxC,OAAO;IAIP,IAAI,OAAO,YAEV;IAED,IAAI,cAAc,YAEjB;IAED,+DAA+D;IAC/D,IAAI,cAAc,YAEjB;IAED,IAAI,IAAI,QAEP;IAED,IAAI,IAAI,CAAC,IAAI,KAAA,EAEZ;IAED,QAAQ,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA;IAkBb,IAAI,QAAQ,QAaX;IAED,IAAI,MAAM;;;;;;;;;;;;;;;MAET;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"polyline.d.ts","sourceRoot":"","sources":["../../src/components/polyline.ts"],"names":[],"mappings":"AAKA,OAAO,IAAI,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"polyline.d.ts","sourceRoot":"","sources":["../../src/components/polyline.ts"],"names":[],"mappings":"AAKA,OAAO,IAAI,MAAM,WAAW,CAAA;AAuC5B,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,IAAI;IACxC,QAAQ,EAAE,GAAG,CAAA;IACb,MAAM,EAAE,GAAG,CAAA;IAEX,IAAI,cAAc,YAEjB;IAED,IAAI,IAAI,UASP;IAED,IAAI,IAAI,CAAC,IAAI,OAAA,EAiBZ;IAED,IAAI,QAAQ,IAAI,GAAG,CAgClB;IAED,IAAI,MAAM;;;;;;;;;;;;;;;MAET;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../../src/components/shape.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,SAAS,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../../src/components/shape.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AACpE,OAAO,SAAS,MAAM,gBAAgB,CAAA;AAQtC;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,SAAS;IAC1C,IAAI,SAAS,CAAC,KAAK,KAAA,EAElB;IAED,IAAI,SAAS,QAEZ;IAED,IAAI,SAAS,CAAC,KAAK,KAAA,EAElB;IAED,IAAI,SAAS,QAEZ;IAED,IAAI,SAAS,CAAC,KAAK,KAAA,EAElB;IAED,IAAI,SAAS,QAEZ;IAED,IAAI,IAAI,CAAC,IAAI,KAAA,EAEZ;IAED,IAAI,IAAI,QAEP;IAED,IAAI,KAAK,CAAC,KAAK,KAAA,EAEd;IAED,IAAI,KAAK,QAER;IAED,UAAU,CAAC,OAAO,EAAE,kBAAkB;IAMtC,MAAM,CAAC,GAAG,EAAE,kBAAkB;CA2D/B"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { transferLog } from '../transfer/transfer.js';
|
|
2
|
+
import type { Reservation } from '../navigation/types.js';
|
|
3
|
+
export interface InspectorComponentSummary {
|
|
4
|
+
type: string;
|
|
5
|
+
id: string;
|
|
6
|
+
category?: string;
|
|
7
|
+
parentId?: string;
|
|
8
|
+
parentPath?: string;
|
|
9
|
+
pose?: {
|
|
10
|
+
position: {
|
|
11
|
+
x: number;
|
|
12
|
+
y: number;
|
|
13
|
+
z: number;
|
|
14
|
+
};
|
|
15
|
+
rotation: {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
z: number;
|
|
19
|
+
w: number;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
state?: Record<string, unknown>;
|
|
23
|
+
isCarriable?: boolean;
|
|
24
|
+
isPickable?: boolean;
|
|
25
|
+
isMover?: boolean;
|
|
26
|
+
isHolder?: boolean;
|
|
27
|
+
toolType?: string;
|
|
28
|
+
childIds?: string[];
|
|
29
|
+
}
|
|
30
|
+
export interface InspectorSimStatus {
|
|
31
|
+
simTime: number;
|
|
32
|
+
realTime: number;
|
|
33
|
+
speed: number;
|
|
34
|
+
paused: boolean;
|
|
35
|
+
carrierCount: number;
|
|
36
|
+
}
|
|
37
|
+
export interface ContractInspector {
|
|
38
|
+
/** Scene 의 모든 component 를 평탄화한 list — 각자 contract markers + parent path. */
|
|
39
|
+
collectComponents(): InspectorComponentSummary[];
|
|
40
|
+
/** ID 로 단일 컴포넌트 조회 — 더 풍부한 정보 (e.g. pickupFrames, slots). */
|
|
41
|
+
getComponent(id: string): (InspectorComponentSummary & {
|
|
42
|
+
pickupFrames?: any[];
|
|
43
|
+
slots?: any[];
|
|
44
|
+
acceptanceWorldQuat?: {
|
|
45
|
+
x: number;
|
|
46
|
+
y: number;
|
|
47
|
+
z: number;
|
|
48
|
+
w: number;
|
|
49
|
+
};
|
|
50
|
+
deliveryWorldPosition?: {
|
|
51
|
+
x: number;
|
|
52
|
+
y: number;
|
|
53
|
+
z: number;
|
|
54
|
+
};
|
|
55
|
+
}) | null;
|
|
56
|
+
/** Sim clock 상태. */
|
|
57
|
+
simStatus(): InspectorSimStatus;
|
|
58
|
+
/** TransferLog snapshot (read-only). */
|
|
59
|
+
transferLog(): {
|
|
60
|
+
entries: ReturnType<typeof transferLog.toJSON>;
|
|
61
|
+
stats: ReturnType<typeof transferLog.stats>;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* Phase K — ReservationTable snapshot. Atlas 의 Reservations / Conflicts /
|
|
65
|
+
* Heat 모드가 활용. all reservations + per-resource grouped + 현재 sim time.
|
|
66
|
+
*/
|
|
67
|
+
reservations(): {
|
|
68
|
+
simTime: number;
|
|
69
|
+
all: Reservation[];
|
|
70
|
+
byResource: Record<string, Reservation[]>;
|
|
71
|
+
byReserver: Record<string, Reservation[]>;
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Phase K — 충돌 누적 로그 + 통계. Atlas 의 Conflicts mode 가 활용.
|
|
75
|
+
*/
|
|
76
|
+
conflicts(): {
|
|
77
|
+
simTime: number;
|
|
78
|
+
log: readonly any[];
|
|
79
|
+
total: number;
|
|
80
|
+
rejected: number;
|
|
81
|
+
preempted: number;
|
|
82
|
+
byResource: Record<string, number>;
|
|
83
|
+
byReserver: Record<string, number>;
|
|
84
|
+
};
|
|
85
|
+
/** Inspector 의 self-version (extension 의 호환성 검사용). */
|
|
86
|
+
readonly version: string;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* ContractInspector 인스턴스 빌드 — root 컴포넌트 (rootModel) 를 받아 inspector
|
|
90
|
+
* 객체 반환. install(rootModel) 로 window.__SCENE_INSPECTOR__ 에 연결.
|
|
91
|
+
*/
|
|
92
|
+
export declare function buildContractInspector(rootModel: any): ContractInspector;
|
|
93
|
+
/**
|
|
94
|
+
* Inspector 를 window.__SCENE_INSPECTOR__ 에 설치. browser 환경에서만.
|
|
95
|
+
* Chrome extension 의 content script 가 이걸 query.
|
|
96
|
+
*
|
|
97
|
+
* usage:
|
|
98
|
+
* import { installContractInspector } from '@hatiolab/things-scene'
|
|
99
|
+
* const scene = create(model, { isViewMode: true })
|
|
100
|
+
* installContractInspector(scene) // 또는 scene.rootModel
|
|
101
|
+
*/
|
|
102
|
+
export declare function installContractInspector(rootModel: any): ContractInspector;
|
|
103
|
+
//# sourceMappingURL=contract-inspector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract-inspector.d.ts","sourceRoot":"","sources":["../../src/diagnostics/contract-inspector.ts"],"names":[],"mappings":"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"}
|
|
@@ -151,6 +151,50 @@ declare class SceneInspector {
|
|
|
151
151
|
private _safeBounds;
|
|
152
152
|
private _safeClone;
|
|
153
153
|
private _safeValue;
|
|
154
|
+
/** TransferLog 의 entries + stats snapshot. */
|
|
155
|
+
transferLog(): {
|
|
156
|
+
entries: any[];
|
|
157
|
+
stats: {
|
|
158
|
+
total: number;
|
|
159
|
+
committed: number;
|
|
160
|
+
rolledBack: number;
|
|
161
|
+
rejectionRate: number;
|
|
162
|
+
avgTransferDurationMs: number;
|
|
163
|
+
byPhase: Record<string, number>;
|
|
164
|
+
};
|
|
165
|
+
} | null;
|
|
166
|
+
/** ReservationTable 의 active reservations + groupings. */
|
|
167
|
+
reservations(): {
|
|
168
|
+
simTime: number;
|
|
169
|
+
all: any[];
|
|
170
|
+
byResource: Record<string, any[]>;
|
|
171
|
+
byReserver: Record<string, any[]>;
|
|
172
|
+
} | null;
|
|
173
|
+
/** Conflict 누적 + outcome 통계. */
|
|
174
|
+
conflicts(): {
|
|
175
|
+
simTime: number;
|
|
176
|
+
log: any[];
|
|
177
|
+
total: number;
|
|
178
|
+
rejected: number;
|
|
179
|
+
preempted: number;
|
|
180
|
+
byResource: Record<string, number>;
|
|
181
|
+
byReserver: Record<string, number>;
|
|
182
|
+
} | null;
|
|
183
|
+
/**
|
|
184
|
+
* 단일 component 의 contract 요약 — Phase H/G2 의 markers.
|
|
185
|
+
* existing getComponentInfo 보다 contract 측면에 특화.
|
|
186
|
+
*/
|
|
187
|
+
contractSummary(componentId: string, sceneIndex?: number): {
|
|
188
|
+
type: string;
|
|
189
|
+
id: string;
|
|
190
|
+
isCarriable?: boolean;
|
|
191
|
+
isPickable?: boolean;
|
|
192
|
+
isMover?: boolean;
|
|
193
|
+
isHolder?: boolean;
|
|
194
|
+
toolType?: string;
|
|
195
|
+
pickupFrames?: any[];
|
|
196
|
+
slots?: any[];
|
|
197
|
+
} | null;
|
|
154
198
|
}
|
|
155
199
|
export declare const inspector: SceneInspector;
|
|
156
200
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/diagnostics/inspector.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/diagnostics/inspector.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"path-handler.d.ts","sourceRoot":"","sources":["../../../src/layer/modeler/path-handler.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"path-handler.d.ts","sourceRoot":"","sources":["../../../src/layer/modeler/path-handler.ts"],"names":[],"mappings":"AA0CA,MAAM,CAAC,OAAO,OAAO,WAAW;IAC9B,KAAK,EAAE,GAAG,CAAA;IACV,MAAM,EAAE,GAAG,CAAA;IACX,OAAO,EAAE,GAAG,CAAA;gBAEA,KAAK,EAAE,GAAG;IAItB,KAAK;IAML,IAAI,QAAQ,QAEX;IAED,QAAQ,CAAC,CAAC,KAAA,EAAE,CAAC,KAAA,EAAE,SAAS,KAAA,EAAE,KAAK,KAAA;IA6D/B,gBAAgB,CAAC,QAAQ,KAAA,EAAE,SAAS,KAAA,EAAE,CAAC,KAAA;IAmBvC,IAAI,CAAC,OAAO,KAAA,EAAE,SAAS,KAAA,EAAE,KAAK,KAAA;IAgG9B,UAAU,CAAC,CAAC,KAAA;IAiCZ,WAAW,CAAC,CAAC,KAAA;IAIb,WAAW,CAAC,CAAC,KAAA;IAkBb,UAAU,CAAC,CAAC,KAAA;IAgLZ,SAAS,CAAC,CAAC,KAAA;CAsDZ"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { Pose6DOF } from './pose6dof.js';
|
|
2
|
+
/**
|
|
3
|
+
* Component 의 parent-local pose 를 읽는다.
|
|
4
|
+
*
|
|
5
|
+
* 정의: component 가 부모의 좌표계 안에서 차지하는 위치+자세.
|
|
6
|
+
* 3D pipeline 의 RealObject.center / RealObject.rotation 과 동일한 의미축.
|
|
7
|
+
*
|
|
8
|
+
* 좌표 매핑 (state → Pose6DOF):
|
|
9
|
+
* pos.x = component.center.x + tx - parent.width/2 (parent-centered 3D X)
|
|
10
|
+
* pos.y = cz (3D vertical Y, cz 공식)
|
|
11
|
+
* pos.z = component.center.y + ty - parent.height/2 (parent-centered 3D Z)
|
|
12
|
+
* rot = Euler(state.rotationX, -state.rotation, state.rotationY, 'XYZ')
|
|
13
|
+
*
|
|
14
|
+
* 컴포넌트가 RealObject 를 안 가지면 cz=0 으로 평면 처리.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getPose(component: any): Pose6DOF;
|
|
17
|
+
/**
|
|
18
|
+
* Component 의 world pose 를 읽는다.
|
|
19
|
+
*
|
|
20
|
+
* 우선순위:
|
|
21
|
+
* 1. _realObject.object3d.matrixWorld 가 있으면 거기서 분해 (정확)
|
|
22
|
+
* 2. 부모 chain 을 따라가며 getPose() 합성 (fallback, 2D-only 환경)
|
|
23
|
+
*
|
|
24
|
+
* 호출 전에 `obj3d.updateWorldMatrix(true, false)` 보장 책임은 호출자.
|
|
25
|
+
*/
|
|
26
|
+
export declare function getWorldPose(component: any): Pose6DOF;
|
|
27
|
+
/**
|
|
28
|
+
* Component 에 parent-local pose 를 단일 atomic setState 로 적용.
|
|
29
|
+
*
|
|
30
|
+
* 한 번의 호출이 left/top/zPos/rotation/rotationX/rotationY 를 동시에 갱신 →
|
|
31
|
+
* onchange 가 한 번만 fire → pipeline 이 obj3d 를 한 번 다시 계산. 부분 상태가
|
|
32
|
+
* frame 사이에 노출되지 않는다 (Phase G 의 핵심 invariant).
|
|
33
|
+
*
|
|
34
|
+
* 좌표 역매핑 (Pose6DOF → state):
|
|
35
|
+
* center.x = pos.x + parent.width/2 - tx
|
|
36
|
+
* center.y = pos.z + parent.height/2 - ty
|
|
37
|
+
* zPos = pos.y - tz - syncZPosOffset + parent.geometricOffsetY
|
|
38
|
+
* Euler decompose 'XYZ' → (rotationX = e.x, rotation = -e.y, rotationY = e.z)
|
|
39
|
+
*
|
|
40
|
+
* 기존 syncFromObject3D 의 로직과 동일 — 그것을 명시적 API 로 노출.
|
|
41
|
+
*/
|
|
42
|
+
export declare function setPose(component: any, pose: Pose6DOF): void;
|
|
43
|
+
/**
|
|
44
|
+
* Component 에 world pose 를 적용. 부모의 world pose 의 inverse 로 곱해서
|
|
45
|
+
* parent-local 로 변환 후 setPose.
|
|
46
|
+
*
|
|
47
|
+
* 부모가 root 거나 parent.worldPose 를 못 구하면 setPose 와 동일 (world =
|
|
48
|
+
* parent-local 로 가정).
|
|
49
|
+
*/
|
|
50
|
+
export declare function setWorldPose(component: any, worldPose: Pose6DOF): void;
|
|
51
|
+
//# sourceMappingURL=component-pose.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component-pose.d.ts","sourceRoot":"","sources":["../../src/math/component-pose.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAOxC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,GAAG,GAAG,QAAQ,CA0BhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,GAAG,GAAG,QAAQ,CAgBrD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAuC5D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,QAAQ,GAAG,IAAI,CAStE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/math/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAA;AACvD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
export interface PoseLike {
|
|
3
|
+
position: {
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
z: number;
|
|
7
|
+
};
|
|
8
|
+
rotation: {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
z: number;
|
|
12
|
+
w: number;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export declare class Pose6DOF {
|
|
16
|
+
/**
|
|
17
|
+
* Position in the implied coordinate system. World, parent-local, etc — Pose6DOF
|
|
18
|
+
* 자체는 좌표계를 알지 않는다. 호출자가 어떤 frame 의 값인지 명시할 책임.
|
|
19
|
+
*/
|
|
20
|
+
readonly position: THREE.Vector3;
|
|
21
|
+
/**
|
|
22
|
+
* Orientation as unit quaternion in the implied coordinate system.
|
|
23
|
+
*/
|
|
24
|
+
readonly rotation: THREE.Quaternion;
|
|
25
|
+
constructor(position?: THREE.Vector3 | {
|
|
26
|
+
x: number;
|
|
27
|
+
y: number;
|
|
28
|
+
z: number;
|
|
29
|
+
}, rotation?: THREE.Quaternion | {
|
|
30
|
+
x: number;
|
|
31
|
+
y: number;
|
|
32
|
+
z: number;
|
|
33
|
+
w: number;
|
|
34
|
+
});
|
|
35
|
+
/**
|
|
36
|
+
* Compose: this 의 frame "안" 에서 child 를 적용. 합성된 결과는 부모(this)의
|
|
37
|
+
* 좌표계 기준이다.
|
|
38
|
+
*
|
|
39
|
+
* result.position = this.position + this.rotation × child.position
|
|
40
|
+
* result.rotation = this.rotation × child.rotation
|
|
41
|
+
*
|
|
42
|
+
* 예: holder.worldPose.compose(carrier.localPose) = carrier.worldPose
|
|
43
|
+
*/
|
|
44
|
+
compose(child: Pose6DOF): Pose6DOF;
|
|
45
|
+
/**
|
|
46
|
+
* Inverse: this 가 적용 전으로 되돌리는 변환.
|
|
47
|
+
*
|
|
48
|
+
* inv.rotation = this.rotation⁻¹
|
|
49
|
+
* inv.position = -inv.rotation × this.position
|
|
50
|
+
*
|
|
51
|
+
* 항등식: this.compose(this.inverse()) = identity = this.inverse().compose(this).
|
|
52
|
+
*/
|
|
53
|
+
inverse(): Pose6DOF;
|
|
54
|
+
/**
|
|
55
|
+
* Transform a point: p' = this.rotation × p + this.position.
|
|
56
|
+
* 입력은 변경하지 않는다 — 새 Vector3 반환.
|
|
57
|
+
*/
|
|
58
|
+
transformPoint(p: THREE.Vector3): THREE.Vector3;
|
|
59
|
+
/**
|
|
60
|
+
* Transform a pose. compose 의 의미상 동치.
|
|
61
|
+
* parent.transformPose(child_local) = child_world
|
|
62
|
+
*/
|
|
63
|
+
transformPose(child: Pose6DOF): Pose6DOF;
|
|
64
|
+
toMatrix4(out?: THREE.Matrix4): THREE.Matrix4;
|
|
65
|
+
/**
|
|
66
|
+
* Matrix4 의 translation + rotation 만 추출. scale 은 무시 (rigid).
|
|
67
|
+
* scale 이 1 이 아닌 행렬을 넣으면 scale 분해 후 폐기.
|
|
68
|
+
*/
|
|
69
|
+
static fromMatrix4(m: THREE.Matrix4): Pose6DOF;
|
|
70
|
+
/**
|
|
71
|
+
* Object3D 의 pose 를 캡처. world=true 이면 world matrix (부모 chain 통과)
|
|
72
|
+
* 를, 아니면 local position/quaternion 을 사용.
|
|
73
|
+
*
|
|
74
|
+
* world=true 호출 전에 객체의 worldMatrix 가 최신이어야 한다 (호출자가
|
|
75
|
+
* `obj.updateWorldMatrix(true, false)` 보장).
|
|
76
|
+
*/
|
|
77
|
+
static fromObject3D(obj: THREE.Object3D, world?: boolean): Pose6DOF;
|
|
78
|
+
/**
|
|
79
|
+
* Object3D 의 local position/quaternion 에 이 pose 를 적용. scale 은 건드리지
|
|
80
|
+
* 않는다.
|
|
81
|
+
*/
|
|
82
|
+
applyToObject3D(obj: THREE.Object3D): void;
|
|
83
|
+
static identity(): Pose6DOF;
|
|
84
|
+
/**
|
|
85
|
+
* Numerical equality 검사. position 은 component-wise abs diff, rotation 은
|
|
86
|
+
* dot product (둘은 sign 다른 같은 회전 — abs(dot) ≈ 1).
|
|
87
|
+
*/
|
|
88
|
+
equals(other: Pose6DOF, tol?: number): boolean;
|
|
89
|
+
clone(): Pose6DOF;
|
|
90
|
+
toJSON(): PoseLike;
|
|
91
|
+
static fromJSON(j: PoseLike): Pose6DOF;
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=pose6dof.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pose6dof.d.ts","sourceRoot":"","sources":["../../src/math/pose6dof.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAQ9B,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7C,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACzD;AAED,qBAAa,QAAQ;IACnB;;;OAGG;IACH,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAA;IAEhC;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAA;gBAEvB,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,UAAU,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAkBxJ;;;;;;;;OAQG;IACH,OAAO,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ;IAMlC;;;;;;;OAOG;IACH,OAAO,IAAI,QAAQ;IAMnB;;;OAGG;IACH,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;IAI/C;;;OAGG;IACH,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ;IAIxC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO;IAM7C;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE,KAAK,CAAC,OAAO,GAAG,QAAQ;IAQ9C;;;;;;OAMG;IACH,MAAM,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,GAAE,OAAe,GAAG,QAAQ;IAW1E;;;OAGG;IACH,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI;IAK1C,MAAM,CAAC,QAAQ,IAAI,QAAQ;IAI3B;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,GAAE,MAAa,GAAG,OAAO;IAapD,KAAK,IAAI,QAAQ;IAIjB,MAAM,IAAI,QAAQ;IAOlB,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,GAAG,QAAQ;CAGvC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { LaneGeometry, Lane, ConflictPair, Intersection, NavPolygon, OpenZone, TimeWindow, Reservation, SpeedProfile, PathSegment, PathPlan, PathPlanOptions, Navigable, YieldDecision, YieldPolicy } from './types.js';
|
|
2
|
+
export { ReservationTable, reservationTable, standardYieldPolicy } from './reservation-table.js';
|
|
3
|
+
export type { ReservationEvent, AddResult, Conflict, ConflictRecord } from './reservation-table.js';
|
|
4
|
+
export { NavGraph, buildNavGraph } from './nav-graph.js';
|
|
5
|
+
export type { NavNode, NavEdge, BuildNavGraphOptions } from './nav-graph.js';
|
|
6
|
+
export { planPathAStar, planToReservations } from './path-planner.js';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/navigation/index.ts"],"names":[],"mappings":"AAaA,YAAY,EACV,YAAY,EACZ,IAAI,EACJ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,UAAU,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,eAAe,EACf,SAAS,EACT,aAAa,EACb,WAAW,EACZ,MAAM,YAAY,CAAA;AAEnB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,wBAAwB,CAAA;AAC/B,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAEnG,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AACxD,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAE5E,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import type { Lane, Intersection } from './types.js';
|
|
2
|
+
import type { Vec3 } from '../transfer/types.js';
|
|
3
|
+
export interface NavNode {
|
|
4
|
+
id: string;
|
|
5
|
+
position: Vec3;
|
|
6
|
+
/** 'lane-start' | 'lane-end' | 'intersection' | 'goal' (planner 가 임시 추가). */
|
|
7
|
+
type: string;
|
|
8
|
+
}
|
|
9
|
+
export interface NavEdge {
|
|
10
|
+
fromNode: string;
|
|
11
|
+
toNode: string;
|
|
12
|
+
/** 통과하는 resource id (충돌 검사용). lane id 또는 intersection id. */
|
|
13
|
+
resource: string;
|
|
14
|
+
/** 거리 (scene unit). cost 의 기본 단위. */
|
|
15
|
+
distance: number;
|
|
16
|
+
/** 통과 sim time (ms). speed 가 결정. lane.speedLimit 또는 vehicle.maxSpeed 기준. */
|
|
17
|
+
durationMs: number;
|
|
18
|
+
/** 이 edge 의 통과 방향이 lane 의 정방향과 같으면 true. twoway 의 역방향이면 false. */
|
|
19
|
+
forward: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare class NavGraph {
|
|
22
|
+
readonly nodes: Map<string, NavNode>;
|
|
23
|
+
/** adjacency list — fromNode → outgoing edges. */
|
|
24
|
+
readonly edges: Map<string, NavEdge[]>;
|
|
25
|
+
/** Lane 별 endpoint node id 매핑. graph augmentation (start/goal 추가) 시 유용. */
|
|
26
|
+
readonly laneEndpoints: Map<string, {
|
|
27
|
+
startNodeId: string;
|
|
28
|
+
endNodeId: string;
|
|
29
|
+
}>;
|
|
30
|
+
addNode(node: NavNode): void;
|
|
31
|
+
addEdge(edge: NavEdge): void;
|
|
32
|
+
edgesFrom(nodeId: string): NavEdge[];
|
|
33
|
+
/** 가장 가까운 node 찾기 (start/goal 진입용). bruteforce — 큰 그래프엔 spatial index 권장. */
|
|
34
|
+
findNearestNode(pos: Vec3): NavNode | null;
|
|
35
|
+
}
|
|
36
|
+
export interface BuildNavGraphOptions {
|
|
37
|
+
/** Lane 별 default speed (없으면 lane.speedLimit, 그것도 없으면 fallback 100). */
|
|
38
|
+
defaultSpeed?: number;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Lane / Intersection 으로부터 NavGraph 를 빌드.
|
|
42
|
+
*
|
|
43
|
+
* 노드 명명 규약:
|
|
44
|
+
* - lane endpoint: `${lane.id}:start`, `${lane.id}:end`
|
|
45
|
+
* - intersection: `${intersection.id}` (intersection 자체가 단일 노드 — 통과 cost 는
|
|
46
|
+
* intersection.crossingTimeMs 로 모델링)
|
|
47
|
+
*
|
|
48
|
+
* Edge 종류:
|
|
49
|
+
* - lane traversal: lane.id 가 resource. oneway 면 start→end 만, twoway 면
|
|
50
|
+
* 양방향 두 edge. distance = lane.geometry.centerPoints 누적.
|
|
51
|
+
* - intersection crossing: intersection.id 가 resource. 만나는 lane 들의
|
|
52
|
+
* endpoint 간 edge (직선 거리 + crossingTimeMs).
|
|
53
|
+
*/
|
|
54
|
+
export declare function buildNavGraph(lanes: Lane[], intersections: Intersection[], options?: BuildNavGraphOptions): NavGraph;
|
|
55
|
+
//# sourceMappingURL=nav-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nav-graph.d.ts","sourceRoot":"","sources":["../../src/navigation/nav-graph.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAEhD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,IAAI,CAAA;IACd,6EAA6E;IAC7E,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,6DAA6D;IAC7D,QAAQ,EAAE,MAAM,CAAA;IAChB,qCAAqC;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,UAAU,EAAE,MAAM,CAAA;IAClB,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,qBAAa,QAAQ;IACnB,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAY;IAChD,kDAAkD;IAClD,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAY;IAElD,2EAA2E;IAC3E,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAY;IAE3F,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAO5B,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAW5B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE;IAIpC,6EAA6E;IAC7E,eAAe,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO,GAAG,IAAI;CAY3C;AAaD,MAAM,WAAW,oBAAoB;IACnC,wEAAwE;IACxE,YAAY,CAAC,EAAE,MAAM,CAAA;CACtB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,IAAI,EAAE,EACb,aAAa,EAAE,YAAY,EAAE,EAC7B,OAAO,GAAE,oBAAyB,GACjC,QAAQ,CA0GV"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { NavGraph } from './nav-graph.js';
|
|
2
|
+
import type { PathPlan, PathPlanOptions } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* A* 경로 계획.
|
|
5
|
+
*
|
|
6
|
+
* @param graph navigation graph
|
|
7
|
+
* @param startNodeId 출발 node id
|
|
8
|
+
* @param goalNodeId 도착 node id
|
|
9
|
+
* @param options vehicle 의 speed / priority / startSimMs / deadline
|
|
10
|
+
* @returns PathPlan 또는 null (도달 불가 / deadline 초과)
|
|
11
|
+
*/
|
|
12
|
+
export declare function planPathAStar(graph: NavGraph, startNodeId: string, goalNodeId: string, options?: PathPlanOptions): PathPlan | null;
|
|
13
|
+
/**
|
|
14
|
+
* PathPlan 의 segments 를 ReservationTable 의 add 입력 형태로 변환.
|
|
15
|
+
*
|
|
16
|
+
* 호출자가 ReservationTable.add 를 segment 별로 시도하고, 실패 시 rollback
|
|
17
|
+
* (이미 add 된 것들 release) 책임. helper 는 단순 매핑.
|
|
18
|
+
*/
|
|
19
|
+
export declare function planToReservations(plan: PathPlan, reserverId: string, priority?: number, metadata?: Record<string, any>): Array<{
|
|
20
|
+
resource: string;
|
|
21
|
+
timeWindow: {
|
|
22
|
+
startSimMs: number;
|
|
23
|
+
endSimMs: number;
|
|
24
|
+
};
|
|
25
|
+
reserverId: string;
|
|
26
|
+
priority: number;
|
|
27
|
+
metadata?: Record<string, any>;
|
|
28
|
+
}>;
|
|
29
|
+
//# sourceMappingURL=path-planner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-planner.d.ts","sourceRoot":"","sources":["../../src/navigation/path-planner.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAe,eAAe,EAAE,MAAM,YAAY,CAAA;AA+BxE;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,EACf,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,OAAO,GAAE,eAAoB,GAC5B,QAAQ,GAAG,IAAI,CAqGjB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,QAAQ,EACd,UAAU,EAAE,MAAM,EAClB,QAAQ,GAAE,MAAU,EACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,KAAK,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,CAAC,CAQzJ"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type { Reservation, TimeWindow, YieldDecision, YieldPolicy } from './types.js';
|
|
2
|
+
/** 기본 yield policy: priority 낮은(수치 높은) 쪽이 양보, 같으면 fifo. */
|
|
3
|
+
export declare const standardYieldPolicy: YieldPolicy;
|
|
4
|
+
/**
|
|
5
|
+
* Conflict — 두 reservation 의 충돌 정보. yield policy 가 어느 쪽이 양보할지 결정.
|
|
6
|
+
*/
|
|
7
|
+
export interface Conflict {
|
|
8
|
+
a: Reservation;
|
|
9
|
+
b: Reservation;
|
|
10
|
+
decision: YieldDecision;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Phase K — 충돌 발생 기록. observability 의 입력 — Atlas 의 Conflicts mode 가
|
|
14
|
+
* 활용. 시간순 누적 (ring buffer 로 maxEntries 제한).
|
|
15
|
+
*/
|
|
16
|
+
export interface ConflictRecord {
|
|
17
|
+
/** 충돌 발생 sim time (proposed reservation 의 시작 시간으로 추정). */
|
|
18
|
+
simTime: number;
|
|
19
|
+
resource: string;
|
|
20
|
+
/** 시도된 reservation (table 에 안 들어감). */
|
|
21
|
+
proposed: Omit<Reservation, 'id'>;
|
|
22
|
+
/** 충돌한 기존 reservations. */
|
|
23
|
+
existing: Reservation[];
|
|
24
|
+
/** 결과 — 'rejected' (proposed 가 양보) | 'preempted' (기존이 evict 됨). */
|
|
25
|
+
outcome: 'rejected' | 'preempted';
|
|
26
|
+
}
|
|
27
|
+
export declare class ReservationTable {
|
|
28
|
+
private readonly _byResource;
|
|
29
|
+
private readonly _byReserver;
|
|
30
|
+
private readonly _yieldPolicy;
|
|
31
|
+
private readonly _listeners;
|
|
32
|
+
private readonly _conflictLog;
|
|
33
|
+
private _maxConflictLog;
|
|
34
|
+
constructor(yieldPolicy?: YieldPolicy);
|
|
35
|
+
/**
|
|
36
|
+
* Reservation 을 추가. 같은 resource + 겹치는 window 에 다른 reservation 이
|
|
37
|
+
* 있으면 yield policy 가 어느 쪽이 양보할지 결정.
|
|
38
|
+
*
|
|
39
|
+
* 반환:
|
|
40
|
+
* - { ok: true, reservation } 충돌 없음
|
|
41
|
+
* - { ok: false, conflicts } 이 reservation 이 양보 (추가 안 됨)
|
|
42
|
+
* - { ok: 'preempted', reservation, evicted } 기존 reservation 들이 양보 (제거됨)
|
|
43
|
+
*
|
|
44
|
+
* preempted 케이스는 호출자가 evicted reservation 의 reserver 들에게
|
|
45
|
+
* notification 하고 reroute 하도록 함.
|
|
46
|
+
*/
|
|
47
|
+
add(input: Omit<Reservation, 'id'>): AddResult;
|
|
48
|
+
/** Phase K — 충돌 로그 (rejected / preempted). 시간순 누적. */
|
|
49
|
+
conflictLog(): readonly ConflictRecord[];
|
|
50
|
+
/** maxEntries 설정 (테스트용). */
|
|
51
|
+
setMaxConflictLog(n: number): void;
|
|
52
|
+
private _appendConflictLog;
|
|
53
|
+
/**
|
|
54
|
+
* 미리 충돌 가능성 검사 (add 안 함). plan 단계에서 reservation 을 사전 검증할 때.
|
|
55
|
+
*/
|
|
56
|
+
conflicts(resource: string, window: TimeWindow): Reservation[];
|
|
57
|
+
/** 한 reservation 회수. 도착 완료 또는 cancel 시. */
|
|
58
|
+
release(reservation: Reservation): void;
|
|
59
|
+
/** 같은 reserver 의 모든 reservation 일괄 해제. */
|
|
60
|
+
releaseAllOf(reserverId: string): Reservation[];
|
|
61
|
+
/** 특정 resource 의 모든 reservation (read-only 사본). */
|
|
62
|
+
forResource(resource: string): readonly Reservation[];
|
|
63
|
+
/** 특정 reserver 의 모든 reservation. */
|
|
64
|
+
forReserver(reserverId: string): readonly Reservation[];
|
|
65
|
+
/** 모든 reservation. */
|
|
66
|
+
all(): readonly Reservation[];
|
|
67
|
+
/** 청소 (테스트용). */
|
|
68
|
+
clear(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Listener 등록. observability (Atlas extension 등) 를 위함.
|
|
71
|
+
*/
|
|
72
|
+
subscribe(listener: (event: ReservationEvent) => void): () => void;
|
|
73
|
+
private _insert;
|
|
74
|
+
private _remove;
|
|
75
|
+
private _emit;
|
|
76
|
+
}
|
|
77
|
+
export type ReservationEvent = {
|
|
78
|
+
kind: 'added';
|
|
79
|
+
reservation: Reservation;
|
|
80
|
+
} | {
|
|
81
|
+
kind: 'released';
|
|
82
|
+
reservation: Reservation;
|
|
83
|
+
} | {
|
|
84
|
+
kind: 'evicted';
|
|
85
|
+
reservation: Reservation;
|
|
86
|
+
by: Reservation;
|
|
87
|
+
};
|
|
88
|
+
export type AddResult = {
|
|
89
|
+
ok: true;
|
|
90
|
+
reservation: Reservation;
|
|
91
|
+
} | {
|
|
92
|
+
ok: 'preempted';
|
|
93
|
+
reservation: Reservation;
|
|
94
|
+
evicted: Reservation[];
|
|
95
|
+
} | {
|
|
96
|
+
ok: false;
|
|
97
|
+
conflicts: Conflict[];
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Singleton — 단일 시뮬레이션 instance 내 공유. 테스트는 자체 인스턴스 만드는 걸 권장.
|
|
101
|
+
*/
|
|
102
|
+
export declare const reservationTable: ReservationTable;
|
|
103
|
+
//# sourceMappingURL=reservation-table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reservation-table.d.ts","sourceRoot":"","sources":["../../src/navigation/reservation-table.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAarF,2DAA2D;AAC3D,eAAO,MAAM,mBAAmB,EAAE,WAQjC,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,WAAW,CAAA;IACd,CAAC,EAAE,WAAW,CAAA;IACd,QAAQ,EAAE,aAAa,CAAA;CACxB;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,CAAA;IAChB,uCAAuC;IACvC,QAAQ,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAA;IACjC,2BAA2B;IAC3B,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,mEAAmE;IACnE,OAAO,EAAE,UAAU,GAAG,WAAW,CAAA;CAClC;AAED,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmC;IAC/D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmC;IAC/D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAa;IAC1C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA+C;IAC1E,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuB;IACpD,OAAO,CAAC,eAAe,CAAO;gBAElB,WAAW,GAAE,WAAiC;IAI1D;;;;;;;;;;;OAWG;IACH,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,SAAS;IAgD9C,sDAAsD;IACtD,WAAW,IAAI,SAAS,cAAc,EAAE;IAIxC,4BAA4B;IAC5B,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAIlC,OAAO,CAAC,kBAAkB;IAO1B;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,WAAW,EAAE;IAK9D,2CAA2C;IAC3C,OAAO,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAOvC,0CAA0C;IAC1C,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,EAAE;IAS/C,mDAAmD;IACnD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,WAAW,EAAE;IAIrD,oCAAoC;IACpC,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,WAAW,EAAE;IAIvD,sBAAsB;IACtB,GAAG,IAAI,SAAS,WAAW,EAAE;IAM7B,iBAAiB;IACjB,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,GAAG,MAAM,IAAI;IASlE,OAAO,CAAC,OAAO;IAmBf,OAAO,CAAC,OAAO;IAiBf,OAAO,CAAC,KAAK;CAGd;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,WAAW,CAAA;CAAE,GAC3C;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,WAAW,EAAE,WAAW,CAAA;CAAE,GAC9C;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,WAAW,EAAE,WAAW,CAAC;IAAC,EAAE,EAAE,WAAW,CAAA;CAAE,CAAA;AAElE,MAAM,MAAM,SAAS,GACjB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,WAAW,EAAE,WAAW,CAAA;CAAE,GACtC;IAAE,EAAE,EAAE,WAAW,CAAC;IAAC,WAAW,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,WAAW,EAAE,CAAA;CAAE,GACrE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;CAAE,CAAA;AAExC;;GAEG;AACH,eAAO,MAAM,gBAAgB,kBAAyB,CAAA"}
|