@iwsdk/core 0.2.0 → 0.2.2
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/camera/camera-source.d.ts +15 -5
- package/dist/camera/camera-source.d.ts.map +1 -1
- package/dist/camera/camera-source.js +11 -3
- package/dist/camera/camera-source.js.map +1 -1
- package/dist/camera/camera-system.d.ts +34 -9
- package/dist/camera/camera-system.d.ts.map +1 -1
- package/dist/camera/camera-system.js +39 -37
- package/dist/camera/camera-system.js.map +1 -1
- package/dist/camera/camera-utils.d.ts +2 -2
- package/dist/camera/camera-utils.d.ts.map +1 -1
- package/dist/camera/camera-utils.js +4 -3
- package/dist/camera/camera-utils.js.map +1 -1
- package/dist/camera/types.d.ts +14 -7
- package/dist/camera/types.d.ts.map +1 -1
- package/dist/camera/types.js +12 -8
- package/dist/camera/types.js.map +1 -1
- package/dist/grab/handles.d.ts +2 -0
- package/dist/grab/handles.d.ts.map +1 -1
- package/dist/grab/handles.js +34 -11
- package/dist/grab/handles.js.map +1 -1
- package/dist/index.js +2 -2
- package/dist/init/world-initializer.d.ts +6 -2
- package/dist/init/world-initializer.d.ts.map +1 -1
- package/dist/init/world-initializer.js +13 -3
- package/dist/init/world-initializer.js.map +1 -1
- package/dist/input/input-system.d.ts +1 -2
- package/dist/input/input-system.d.ts.map +1 -1
- package/dist/input/input-system.js +22 -33
- package/dist/input/input-system.js.map +1 -1
- package/dist/physics/physics-system.d.ts +1 -1
- package/dist/physics/physics-system.d.ts.map +1 -1
- package/dist/physics/physics-system.js +3 -3
- package/dist/scene-understanding/scene-understanding-system.d.ts +68 -0
- package/dist/scene-understanding/scene-understanding-system.d.ts.map +1 -1
- package/dist/scene-understanding/scene-understanding-system.js +113 -21
- package/dist/scene-understanding/scene-understanding-system.js.map +1 -1
- package/dist/ui/index.d.ts +2 -2
- package/dist/ui/index.d.ts.map +1 -1
- package/dist/ui/ui.d.ts +27 -0
- package/dist/ui/ui.d.ts.map +1 -1
- package/dist/ui/ui.js +20 -2
- package/dist/ui/ui.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +4 -4
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
import { Types } from '../ecs/index.js';
|
|
8
|
-
import { CameraState } from './types.js';
|
|
9
8
|
/**
|
|
10
9
|
* CameraSource - Component for accessing device cameras
|
|
11
10
|
* Provides VideoTexture for rendering and HTMLVideoElement for advanced use
|
|
@@ -16,8 +15,13 @@ export declare const CameraSource: import("elics").Component<{
|
|
|
16
15
|
default: string;
|
|
17
16
|
};
|
|
18
17
|
facing: {
|
|
19
|
-
type: Types.
|
|
20
|
-
|
|
18
|
+
type: Types.Enum;
|
|
19
|
+
enum: {
|
|
20
|
+
readonly Back: "back";
|
|
21
|
+
readonly Front: "front";
|
|
22
|
+
readonly Unknown: "unknown";
|
|
23
|
+
};
|
|
24
|
+
default: "unknown";
|
|
21
25
|
};
|
|
22
26
|
width: {
|
|
23
27
|
type: Types.Int16;
|
|
@@ -32,8 +36,14 @@ export declare const CameraSource: import("elics").Component<{
|
|
|
32
36
|
default: number;
|
|
33
37
|
};
|
|
34
38
|
state: {
|
|
35
|
-
type: Types.
|
|
36
|
-
|
|
39
|
+
type: Types.Enum;
|
|
40
|
+
enum: {
|
|
41
|
+
readonly Inactive: "inactive";
|
|
42
|
+
readonly Starting: "starting";
|
|
43
|
+
readonly Active: "active";
|
|
44
|
+
readonly Error: "error";
|
|
45
|
+
};
|
|
46
|
+
default: "inactive";
|
|
37
47
|
};
|
|
38
48
|
texture: {
|
|
39
49
|
type: Types.Object;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-source.d.ts","sourceRoot":"","sources":["../../src/camera/camera-source.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAmB,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"camera-source.d.ts","sourceRoot":"","sources":["../../src/camera/camera-source.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAmB,MAAM,iBAAiB,CAAC;AAGzD;;;GAGG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyBxB,CAAC"}
|
|
@@ -2,7 +2,7 @@ import '@preact/signals-core';
|
|
|
2
2
|
import '../ecs/world.js';
|
|
3
3
|
import { createComponent, Types } from 'elics';
|
|
4
4
|
import '../ecs/component-registry.js';
|
|
5
|
-
import { CameraState } from './types.js';
|
|
5
|
+
import { CameraState, CameraFacing } from './types.js';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
@@ -17,12 +17,20 @@ import { CameraState } from './types.js';
|
|
|
17
17
|
const CameraSource = createComponent('CameraSource', {
|
|
18
18
|
// Input (set by user)
|
|
19
19
|
deviceId: { type: Types.String, default: '' }, // Empty = auto-select based on facing
|
|
20
|
-
facing: {
|
|
20
|
+
facing: {
|
|
21
|
+
type: Types.Enum,
|
|
22
|
+
enum: CameraFacing,
|
|
23
|
+
default: CameraFacing.Unknown,
|
|
24
|
+
}, // 'front' | 'back' | 'unknown' - used for auto-selection (unknown = any camera)
|
|
21
25
|
width: { type: Types.Int16, default: 1920 },
|
|
22
26
|
height: { type: Types.Int16, default: 1080 },
|
|
23
27
|
frameRate: { type: Types.Int16, default: 30 },
|
|
24
28
|
// Output (managed by system, read-only for users)
|
|
25
|
-
state: {
|
|
29
|
+
state: {
|
|
30
|
+
type: Types.Enum,
|
|
31
|
+
enum: CameraState,
|
|
32
|
+
default: CameraState.Inactive,
|
|
33
|
+
}, // 'inactive' | 'starting' | 'active' | 'error'
|
|
26
34
|
texture: { type: Types.Object, default: null }, // VideoTexture
|
|
27
35
|
videoElement: { type: Types.Object, default: null }, // HTMLVideoElement (for advanced use)
|
|
28
36
|
stream: { type: Types.Object, default: null }, // MediaStream (internal)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-source.js","sources":["../../src/camera/camera-source.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAAA;;;;;AAKG;AAKH;;;AAGG;AACI,MAAM,YAAY,GAAG,eAAe,CACzC,cAAc,EACd;;AAEE,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;AAC7C,IAAA,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"camera-source.js","sources":["../../src/camera/camera-source.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAAA;;;;;AAKG;AAKH;;;AAGG;AACI,MAAM,YAAY,GAAG,eAAe,CACzC,cAAc,EACd;;AAEE,IAAA,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE;AAC7C,IAAA,MAAM,EAAE;QACN,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,YAAY,CAAC,OAAO;AAC9B,KAAA;IACD,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;IAC3C,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE;IAC5C,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;;AAG7C,IAAA,KAAK,EAAE;QACL,IAAI,EAAE,KAAK,CAAC,IAAI;AAChB,QAAA,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,WAAW,CAAC,QAAQ;AAC9B,KAAA;AACD,IAAA,OAAO,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;AAC9C,IAAA,YAAY,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;AACnD,IAAA,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;CAC9C,EACD,yCAAyC;;;;"}
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
-
import { CameraState } from './types.js';
|
|
8
7
|
declare const CameraSystem_base: import("elics").SystemConstructor<import("elics").SystemSchema, {
|
|
9
8
|
cameras: {
|
|
10
9
|
required: import("elics").Component<{
|
|
@@ -13,8 +12,13 @@ declare const CameraSystem_base: import("elics").SystemConstructor<import("elics
|
|
|
13
12
|
default: string;
|
|
14
13
|
};
|
|
15
14
|
facing: {
|
|
16
|
-
type: import("elics/lib/types.js").Types.
|
|
17
|
-
|
|
15
|
+
type: import("elics/lib/types.js").Types.Enum;
|
|
16
|
+
enum: {
|
|
17
|
+
readonly Back: "back";
|
|
18
|
+
readonly Front: "front";
|
|
19
|
+
readonly Unknown: "unknown";
|
|
20
|
+
};
|
|
21
|
+
default: "unknown";
|
|
18
22
|
};
|
|
19
23
|
width: {
|
|
20
24
|
type: import("elics/lib/types.js").Types.Int16;
|
|
@@ -29,8 +33,14 @@ declare const CameraSystem_base: import("elics").SystemConstructor<import("elics
|
|
|
29
33
|
default: number;
|
|
30
34
|
};
|
|
31
35
|
state: {
|
|
32
|
-
type: import("elics/lib/types.js").Types.
|
|
33
|
-
|
|
36
|
+
type: import("elics/lib/types.js").Types.Enum;
|
|
37
|
+
enum: {
|
|
38
|
+
readonly Inactive: "inactive";
|
|
39
|
+
readonly Starting: "starting";
|
|
40
|
+
readonly Active: "active";
|
|
41
|
+
readonly Error: "error";
|
|
42
|
+
};
|
|
43
|
+
default: "inactive";
|
|
34
44
|
};
|
|
35
45
|
texture: {
|
|
36
46
|
type: import("elics/lib/types.js").Types.Object;
|
|
@@ -54,8 +64,13 @@ declare const CameraSystem_base: import("elics").SystemConstructor<import("elics
|
|
|
54
64
|
default: string;
|
|
55
65
|
};
|
|
56
66
|
facing: {
|
|
57
|
-
type: import("elics/lib/types.js").Types.
|
|
58
|
-
|
|
67
|
+
type: import("elics/lib/types.js").Types.Enum;
|
|
68
|
+
enum: {
|
|
69
|
+
readonly Back: "back";
|
|
70
|
+
readonly Front: "front";
|
|
71
|
+
readonly Unknown: "unknown";
|
|
72
|
+
};
|
|
73
|
+
default: "unknown";
|
|
59
74
|
};
|
|
60
75
|
width: {
|
|
61
76
|
type: import("elics/lib/types.js").Types.Int16;
|
|
@@ -70,8 +85,14 @@ declare const CameraSystem_base: import("elics").SystemConstructor<import("elics
|
|
|
70
85
|
default: number;
|
|
71
86
|
};
|
|
72
87
|
state: {
|
|
73
|
-
type: import("elics/lib/types.js").Types.
|
|
74
|
-
|
|
88
|
+
type: import("elics/lib/types.js").Types.Enum;
|
|
89
|
+
enum: {
|
|
90
|
+
readonly Inactive: "inactive";
|
|
91
|
+
readonly Starting: "starting";
|
|
92
|
+
readonly Active: "active";
|
|
93
|
+
readonly Error: "error";
|
|
94
|
+
};
|
|
95
|
+
default: "inactive";
|
|
75
96
|
};
|
|
76
97
|
texture: {
|
|
77
98
|
type: import("elics/lib/types.js").Types.Object;
|
|
@@ -109,6 +130,10 @@ export declare class CameraSystem extends CameraSystem_base {
|
|
|
109
130
|
* Stop camera stream for an entity
|
|
110
131
|
*/
|
|
111
132
|
private stopCamera;
|
|
133
|
+
/**
|
|
134
|
+
* Clean up camera resources (stream, video element, texture)
|
|
135
|
+
*/
|
|
136
|
+
private cleanupCameraResources;
|
|
112
137
|
}
|
|
113
138
|
export {};
|
|
114
139
|
//# sourceMappingURL=camera-system.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-system.d.ts","sourceRoot":"","sources":["../../src/camera/camera-system.ts"],"names":[],"mappings":"AAAA;;;;;GAKG
|
|
1
|
+
{"version":3,"file":"camera-system.d.ts","sourceRoot":"","sources":["../../src/camera/camera-system.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQH;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,iBAEhC;IACA,IAAI;IAWJ,MAAM;IAkBN;;;;;;OAMG;YACW,WAAW;IAsJzB;;OAEG;IACH,OAAO,CAAC,UAAU;IAuBlB;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAgB/B"}
|
|
@@ -5,7 +5,7 @@ import '../ecs/component-registry.js';
|
|
|
5
5
|
import '../runtime/three.js';
|
|
6
6
|
import { CameraSource } from './camera-source.js';
|
|
7
7
|
import { CameraUtils } from './camera-utils.js';
|
|
8
|
-
import { CameraState } from './types.js';
|
|
8
|
+
import { CameraState, CameraFacing } from './types.js';
|
|
9
9
|
import { VideoTexture, LinearFilter } from 'three';
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -68,20 +68,31 @@ class CameraSystem extends createSystem({
|
|
|
68
68
|
return; // Aborted
|
|
69
69
|
}
|
|
70
70
|
const facing = entity.getValue(CameraSource, 'facing');
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
71
|
+
if (facing === CameraFacing.Unknown) {
|
|
72
|
+
// Unknown = any camera is fine, use first available
|
|
73
|
+
if (devices.length > 0) {
|
|
74
|
+
deviceId = devices[0].deviceId;
|
|
75
|
+
entity.setValue(CameraSource, 'deviceId', deviceId);
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
console.error('No cameras available');
|
|
79
|
+
entity.setValue(CameraSource, 'state', CameraState.Error);
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
80
82
|
}
|
|
81
83
|
else {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
84
|
+
// Specific facing requested - must match or fail
|
|
85
|
+
const selected = CameraUtils.findByFacing(devices, facing);
|
|
86
|
+
if (selected) {
|
|
87
|
+
deviceId = selected.deviceId;
|
|
88
|
+
entity.setValue(CameraSource, 'deviceId', deviceId);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
const facingStr = facing === CameraFacing.Back ? 'back' : 'front';
|
|
92
|
+
console.error(`No ${facingStr}-facing camera available (found ${devices.length} camera(s))`);
|
|
93
|
+
entity.setValue(CameraSource, 'state', CameraState.Error);
|
|
94
|
+
return;
|
|
95
|
+
}
|
|
85
96
|
}
|
|
86
97
|
}
|
|
87
98
|
// Get stream constraints
|
|
@@ -101,7 +112,7 @@ class CameraSystem extends createSystem({
|
|
|
101
112
|
const currentState = entity.getValue(CameraSource, 'state');
|
|
102
113
|
if (currentState !== CameraState.Starting) {
|
|
103
114
|
// Aborted - clean up the stream we just created
|
|
104
|
-
|
|
115
|
+
this.cleanupCameraResources(stream, null, null);
|
|
105
116
|
return;
|
|
106
117
|
}
|
|
107
118
|
// Create video element
|
|
@@ -129,8 +140,7 @@ class CameraSystem extends createSystem({
|
|
|
129
140
|
const finalState = entity.getValue(CameraSource, 'state');
|
|
130
141
|
if (finalState !== CameraState.Starting) {
|
|
131
142
|
// Aborted - clean up everything
|
|
132
|
-
|
|
133
|
-
video.srcObject = null;
|
|
143
|
+
this.cleanupCameraResources(stream, video, null);
|
|
134
144
|
return;
|
|
135
145
|
}
|
|
136
146
|
// Start playback
|
|
@@ -143,9 +153,7 @@ class CameraSystem extends createSystem({
|
|
|
143
153
|
const committingState = entity.getValue(CameraSource, 'state');
|
|
144
154
|
if (committingState !== CameraState.Starting) {
|
|
145
155
|
// Aborted at the last moment - clean up everything
|
|
146
|
-
|
|
147
|
-
video.srcObject = null;
|
|
148
|
-
texture.dispose();
|
|
156
|
+
this.cleanupCameraResources(stream, video, texture);
|
|
149
157
|
return;
|
|
150
158
|
}
|
|
151
159
|
// Commit all resources atomically
|
|
@@ -158,18 +166,9 @@ class CameraSystem extends createSystem({
|
|
|
158
166
|
console.error('Failed to start camera:', error);
|
|
159
167
|
// Clean up any partial state
|
|
160
168
|
const stream = entity.getValue(CameraSource, 'stream');
|
|
161
|
-
if (stream) {
|
|
162
|
-
stream.getTracks().forEach((track) => track.stop());
|
|
163
|
-
}
|
|
164
169
|
const video = entity.getValue(CameraSource, 'videoElement');
|
|
165
|
-
if (video) {
|
|
166
|
-
video.pause();
|
|
167
|
-
video.srcObject = null;
|
|
168
|
-
}
|
|
169
170
|
const texture = entity.getValue(CameraSource, 'texture');
|
|
170
|
-
|
|
171
|
-
texture.dispose();
|
|
172
|
-
}
|
|
171
|
+
this.cleanupCameraResources(stream, video, texture);
|
|
173
172
|
entity.setValue(CameraSource, 'stream', null);
|
|
174
173
|
entity.setValue(CameraSource, 'videoElement', null);
|
|
175
174
|
entity.setValue(CameraSource, 'texture', null);
|
|
@@ -183,24 +182,27 @@ class CameraSystem extends createSystem({
|
|
|
183
182
|
const stream = entity.getValue(CameraSource, 'stream');
|
|
184
183
|
const video = entity.getValue(CameraSource, 'videoElement');
|
|
185
184
|
const texture = entity.getValue(CameraSource, 'texture');
|
|
186
|
-
|
|
185
|
+
this.cleanupCameraResources(stream, video, texture);
|
|
186
|
+
// Clear component values and set state to Inactive
|
|
187
|
+
entity.setValue(CameraSource, 'stream', null);
|
|
188
|
+
entity.setValue(CameraSource, 'videoElement', null);
|
|
189
|
+
entity.setValue(CameraSource, 'texture', null);
|
|
190
|
+
entity.setValue(CameraSource, 'state', CameraState.Inactive);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Clean up camera resources (stream, video element, texture)
|
|
194
|
+
*/
|
|
195
|
+
cleanupCameraResources(stream, video, texture) {
|
|
187
196
|
if (stream) {
|
|
188
197
|
stream.getTracks().forEach((track) => track.stop());
|
|
189
198
|
}
|
|
190
|
-
// Clean up video element
|
|
191
199
|
if (video) {
|
|
192
200
|
video.pause();
|
|
193
201
|
video.srcObject = null;
|
|
194
202
|
}
|
|
195
|
-
// Dispose texture
|
|
196
203
|
if (texture) {
|
|
197
204
|
texture.dispose();
|
|
198
205
|
}
|
|
199
|
-
// Clear component values and set state to Inactive
|
|
200
|
-
entity.setValue(CameraSource, 'stream', null);
|
|
201
|
-
entity.setValue(CameraSource, 'videoElement', null);
|
|
202
|
-
entity.setValue(CameraSource, 'texture', null);
|
|
203
|
-
entity.setValue(CameraSource, 'state', CameraState.Inactive);
|
|
204
206
|
}
|
|
205
207
|
}
|
|
206
208
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-system.js","sources":["../../src/camera/camera-system.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;AAAA;;;;;AAKG;AAQH;;;;;AAKG;AACG,MAAO,YAAa,SAAQ,YAAY,CAAC;AAC7C,IAAA,OAAO,EAAE,EAAE,QAAQ,EAAE,CAAC,YAAY,CAAC,EAAE;CACtC,CAAC,CAAA;IACA,IAAI,GAAA;;QAEF,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;AAC7C,YAAA,IAAI,KAAK,KAAK,eAAe,CAAC,OAAO,EAAE;gBACrC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;AAClD,oBAAA,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;gBACzB;YACF;AACF,QAAA,CAAC,CAAC;IACJ;IAEA,MAAM,GAAA;;AAEJ,QAAA,MAAM,UAAU,GACd,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,KAAK,eAAe,CAAC,OAAO;QAC9D,IAAI,CAAC,UAAU,EAAE;YACf;QACF;QAEA,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE;YAClD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"camera-system.js","sources":["../../src/camera/camera-system.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
7
|
import { Entity } from '../ecs/index.js';
|
|
8
|
-
import type
|
|
8
|
+
import { type CameraDeviceInfo, type CameraFacingType } from './types.js';
|
|
9
9
|
/**
|
|
10
10
|
* CameraUtils - Static utilities for camera discovery and selection
|
|
11
11
|
* Handles permission requests and device enumeration with caching
|
|
@@ -30,7 +30,7 @@ export declare class CameraUtils {
|
|
|
30
30
|
/**
|
|
31
31
|
* Find camera by facing direction from device list
|
|
32
32
|
*/
|
|
33
|
-
static findByFacing(devices: CameraDeviceInfo[], facing:
|
|
33
|
+
static findByFacing(devices: CameraDeviceInfo[], facing: CameraFacingType): CameraDeviceInfo | null;
|
|
34
34
|
/**
|
|
35
35
|
* Check if camera permission is granted (doesn't request)
|
|
36
36
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-utils.d.ts","sourceRoot":"","sources":["../../src/camera/camera-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"camera-utils.d.ts","sourceRoot":"","sources":["../../src/camera/camera-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAgB,KAAK,gBAAgB,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAExF;;;GAGG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAC,aAAa,CAAmC;IAE/D;;;;;;;;;;;;;OAaG;WACU,UAAU,CAAC,OAAO,UAAQ,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAoDrE;;OAEG;IACH,MAAM,CAAC,YAAY,CACjB,OAAO,EAAE,gBAAgB,EAAE,EAC3B,MAAM,EAAE,gBAAgB,GACvB,gBAAgB,GAAG,IAAI;IAI1B;;OAEG;WACU,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAY9C;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;CA+B9D"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CameraSource } from './camera-source.js';
|
|
2
|
+
import { CameraFacing } from './types.js';
|
|
2
3
|
|
|
3
4
|
/**
|
|
4
5
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
@@ -43,16 +44,16 @@ class CameraUtils {
|
|
|
43
44
|
// Map to our interface with facing detection
|
|
44
45
|
this.cachedDevices = videoDevices.map((device) => {
|
|
45
46
|
const label = device.label.toLowerCase();
|
|
46
|
-
let facing =
|
|
47
|
+
let facing = CameraFacing.Unknown;
|
|
47
48
|
if (label.includes('back') ||
|
|
48
49
|
label.includes('environment') ||
|
|
49
50
|
label.includes('rear')) {
|
|
50
|
-
facing =
|
|
51
|
+
facing = CameraFacing.Back;
|
|
51
52
|
}
|
|
52
53
|
else if (label.includes('front') ||
|
|
53
54
|
label.includes('user') ||
|
|
54
55
|
label.includes('face')) {
|
|
55
|
-
facing =
|
|
56
|
+
facing = CameraFacing.Front;
|
|
56
57
|
}
|
|
57
58
|
return {
|
|
58
59
|
deviceId: device.deviceId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"camera-utils.js","sources":["../../src/camera/camera-utils.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"camera-utils.js","sources":["../../src/camera/camera-utils.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/camera/types.d.ts
CHANGED
|
@@ -4,18 +4,25 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
+
export declare const CameraFacing: {
|
|
8
|
+
readonly Back: "back";
|
|
9
|
+
readonly Front: "front";
|
|
10
|
+
readonly Unknown: "unknown";
|
|
11
|
+
};
|
|
12
|
+
export type CameraFacingType = (typeof CameraFacing)[keyof typeof CameraFacing];
|
|
7
13
|
export interface CameraDeviceInfo {
|
|
8
14
|
deviceId: string;
|
|
9
15
|
label: string;
|
|
10
|
-
facing:
|
|
16
|
+
facing: CameraFacingType;
|
|
11
17
|
}
|
|
12
18
|
/**
|
|
13
19
|
* Camera stream state lifecycle
|
|
14
20
|
*/
|
|
15
|
-
export declare
|
|
16
|
-
Inactive
|
|
17
|
-
Starting
|
|
18
|
-
Active
|
|
19
|
-
Error
|
|
20
|
-
}
|
|
21
|
+
export declare const CameraState: {
|
|
22
|
+
readonly Inactive: "inactive";
|
|
23
|
+
readonly Starting: "starting";
|
|
24
|
+
readonly Active: "active";
|
|
25
|
+
readonly Error: "error";
|
|
26
|
+
};
|
|
27
|
+
export type CameraStateType = (typeof CameraState)[keyof typeof CameraState];
|
|
21
28
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/camera/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/camera/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,YAAY;;;;CAIf,CAAC;AAEX,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;AAEhF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;CAKd,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,OAAO,WAAW,CAAC,CAAC"}
|
package/dist/camera/types.js
CHANGED
|
@@ -4,16 +4,20 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*/
|
|
7
|
+
const CameraFacing = {
|
|
8
|
+
Back: 'back',
|
|
9
|
+
Front: 'front',
|
|
10
|
+
Unknown: 'unknown',
|
|
11
|
+
};
|
|
7
12
|
/**
|
|
8
13
|
* Camera stream state lifecycle
|
|
9
14
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
})(CameraState || (CameraState = {}));
|
|
15
|
+
const CameraState = {
|
|
16
|
+
Inactive: 'inactive', // Not started
|
|
17
|
+
Starting: 'starting', // Async initialization in progress
|
|
18
|
+
Active: 'active', // Stream running
|
|
19
|
+
Error: 'error', // Failed to start
|
|
20
|
+
};
|
|
17
21
|
|
|
18
|
-
export { CameraState };
|
|
22
|
+
export { CameraFacing, CameraState };
|
|
19
23
|
//# sourceMappingURL=types.js.map
|
package/dist/camera/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sources":["../../src/camera/types.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;AAKG;
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../src/camera/types.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;AAKG;AAEI,MAAM,YAAY,GAAG;AAC1B,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,OAAO,EAAE,SAAS;;AAWpB;;AAEG;AACI,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;;;;;"}
|
package/dist/grab/handles.d.ts
CHANGED
|
@@ -34,6 +34,8 @@ export declare class DistanceGrabHandle<T> extends HandleStore<T> {
|
|
|
34
34
|
readonly moveSpeed: number;
|
|
35
35
|
private previousPointerOrigin;
|
|
36
36
|
private static _tmp;
|
|
37
|
+
private static _posHelper;
|
|
38
|
+
private static _quatHelper;
|
|
37
39
|
constructor(target_: Object3D | {
|
|
38
40
|
current?: Object3D | null;
|
|
39
41
|
}, getOptions: (() => HandleOptions<T>) | undefined, movementMode: string, returnToOrigin: Boolean, moveSpeed?: number);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handles.d.ts","sourceRoot":"","sources":["../../src/grab/handles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAmB,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"handles.d.ts","sourceRoot":"","sources":["../../src/grab/handles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAmB,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAuB,MAAM,qBAAqB,CAAC;AAEpE,eAAO,MAAM,MAAM;;;;;EAMlB,CAAC;AAEF,iEAAiE;AACjE,eAAO,MAAM,YAAY;IACvB,oFAAoF;;IAEpF,qEAAqE;;IAErE,qFAAqF;;IAErF,8DAA8D;;CAE/D,CAAC;AAEF,qBAAa,kBAAkB,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IAOrD,QAAQ,CAAC,OAAO,EAAE,QAAQ,GAAG;QAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;KAAE;aAC1C,UAAU,EAAE,MAAM,aAAa,CAAC,CAAC,CAAC;aAClC,YAAY,EAAE,MAAM;aACpB,cAAc,EAAE,OAAO;aACvB,SAAS,EAAE,MAAM;IAVnC,OAAO,CAAC,qBAAqB,CAAsB;IACnD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAiB;IACpC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAiB;IAC1C,OAAO,CAAC,MAAM,CAAC,WAAW,CAAoB;gBAGnC,OAAO,EAAE,QAAQ,GAAG;QAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAA;KAAE,EAC1C,UAAU,GAAE,MAAM,aAAa,CAAC,CAAC,CAAC,aAAa,EAC/C,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,OAAO,EACvB,SAAS,GAAE,MAAY;IAKzC,MAAM,CAAC,IAAI,EAAE,MAAM;IAqHnB,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,GAAG,CAAC;CAcrC"}
|
package/dist/grab/handles.js
CHANGED
|
@@ -4,7 +4,7 @@ import '../ecs/world.js';
|
|
|
4
4
|
import { createComponent, Types } from 'elics';
|
|
5
5
|
import '../ecs/component-registry.js';
|
|
6
6
|
import '../runtime/three.js';
|
|
7
|
-
import { Vector3 } from 'three';
|
|
7
|
+
import { Vector3, Quaternion } from 'three';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
@@ -52,11 +52,9 @@ class DistanceGrabHandle extends HandleStore {
|
|
|
52
52
|
}
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
|
-
if (target.parent) {
|
|
56
|
-
target.removeFromParent();
|
|
57
|
-
target.matrixWorld.decompose(target.position, target.quaternion, target.scale);
|
|
58
|
-
}
|
|
59
55
|
const pointerAmount = this.inputState.size;
|
|
56
|
+
target.getWorldPosition(DistanceGrabHandle._posHelper);
|
|
57
|
+
target.getWorldQuaternion(DistanceGrabHandle._quatHelper);
|
|
60
58
|
const position = target.position;
|
|
61
59
|
const quaternion = target.quaternion;
|
|
62
60
|
const rotation = target.rotation;
|
|
@@ -69,7 +67,7 @@ class DistanceGrabHandle extends HandleStore {
|
|
|
69
67
|
const delta = DistanceGrabHandle._tmp
|
|
70
68
|
.copy(current)
|
|
71
69
|
.sub(this.previousPointerOrigin);
|
|
72
|
-
|
|
70
|
+
DistanceGrabHandle._posHelper.add(delta);
|
|
73
71
|
}
|
|
74
72
|
else {
|
|
75
73
|
this.previousPointerOrigin = new Vector3().copy(current);
|
|
@@ -81,22 +79,45 @@ class DistanceGrabHandle extends HandleStore {
|
|
|
81
79
|
case MovementMode.MoveTowardsTarget: {
|
|
82
80
|
const [p1] = this.inputState.values();
|
|
83
81
|
const pointerOrigin = p1.pointerWorldOrigin;
|
|
84
|
-
const distance = pointerOrigin.distanceTo(
|
|
82
|
+
const distance = pointerOrigin.distanceTo(DistanceGrabHandle._posHelper);
|
|
85
83
|
if (distance > this.moveSpeed) {
|
|
86
84
|
const step = DistanceGrabHandle._tmp
|
|
87
85
|
.copy(pointerOrigin)
|
|
88
|
-
.sub(
|
|
86
|
+
.sub(DistanceGrabHandle._posHelper)
|
|
89
87
|
.normalize()
|
|
90
88
|
.multiplyScalar(this.moveSpeed);
|
|
91
|
-
|
|
89
|
+
DistanceGrabHandle._posHelper.add(step);
|
|
92
90
|
}
|
|
93
91
|
else {
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
DistanceGrabHandle._posHelper.set(pointerOrigin.x, pointerOrigin.y, pointerOrigin.z);
|
|
93
|
+
DistanceGrabHandle._quatHelper.set(p1.pointerWorldQuaternion.x, p1.pointerWorldQuaternion.y, p1.pointerWorldQuaternion.z, p1.pointerWorldQuaternion.w);
|
|
96
94
|
}
|
|
97
95
|
break;
|
|
98
96
|
}
|
|
99
97
|
}
|
|
98
|
+
// Convert world space transforms to local space
|
|
99
|
+
if (target.parent) {
|
|
100
|
+
// Get parent's inverse world matrix
|
|
101
|
+
const parentWorldMatrixInverse = target.parent.matrixWorld
|
|
102
|
+
.clone()
|
|
103
|
+
.invert();
|
|
104
|
+
// Transform desired world position to local space
|
|
105
|
+
position
|
|
106
|
+
.copy(DistanceGrabHandle._posHelper)
|
|
107
|
+
.applyMatrix4(parentWorldMatrixInverse);
|
|
108
|
+
// Transform desired world quaternion to local space
|
|
109
|
+
const parentWorldQuaternionInverse = target.parent
|
|
110
|
+
.getWorldQuaternion(new Quaternion())
|
|
111
|
+
.invert();
|
|
112
|
+
quaternion
|
|
113
|
+
.copy(DistanceGrabHandle._quatHelper)
|
|
114
|
+
.premultiply(parentWorldQuaternionInverse);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
// No parent, world space = local space
|
|
118
|
+
position.copy(DistanceGrabHandle._posHelper);
|
|
119
|
+
quaternion.copy(DistanceGrabHandle._quatHelper);
|
|
120
|
+
}
|
|
100
121
|
// Always apply during drag; if returnToOrigin is true,
|
|
101
122
|
// the override in apply() will snap back on release.
|
|
102
123
|
this.outputState.update(this.latestMoveEvent, {
|
|
@@ -127,6 +148,8 @@ class DistanceGrabHandle extends HandleStore {
|
|
|
127
148
|
}
|
|
128
149
|
}
|
|
129
150
|
DistanceGrabHandle._tmp = new Vector3();
|
|
151
|
+
DistanceGrabHandle._posHelper = new Vector3();
|
|
152
|
+
DistanceGrabHandle._quatHelper = new Quaternion();
|
|
130
153
|
|
|
131
154
|
export { DistanceGrabHandle, Handle, MovementMode };
|
|
132
155
|
//# sourceMappingURL=handles.js.map
|
package/dist/grab/handles.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handles.js","sources":["../../src/grab/handles.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AAAA;;;;;AAKG;AAMI,MAAM,MAAM,GAAG,eAAe,CACnC,QAAQ,EACR;IACE,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE;CACrD,EACD,kEAAkE;AAGpE;AACO,MAAM,YAAY,GAAG;;AAE1B,IAAA,cAAc,EAAE,gBAAgB;;AAEhC,IAAA,iBAAiB,EAAE,mBAAmB;;AAEtC,IAAA,YAAY,EAAE,cAAc;;AAE5B,IAAA,cAAc,EAAE,gBAAgB;;AAG5B,MAAO,kBAAsB,SAAQ,WAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"handles.js","sources":["../../src/grab/handles.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|