@vulfram/engine 0.14.8-alpha → 0.17.1-alpha

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.
Files changed (54) hide show
  1. package/README.md +106 -0
  2. package/package.json +55 -4
  3. package/src/core.ts +14 -0
  4. package/src/ecs.ts +1 -0
  5. package/src/engine/api.ts +234 -23
  6. package/src/engine/bridge/dispatch.ts +265 -40
  7. package/src/engine/bridge/guards.ts +4 -1
  8. package/src/engine/bridge/protocol.ts +69 -52
  9. package/src/engine/ecs/index.ts +185 -42
  10. package/src/engine/state.ts +133 -2
  11. package/src/engine/systems/command-intent.ts +153 -3
  12. package/src/engine/systems/constraint-solve.ts +167 -0
  13. package/src/engine/systems/core-command-builder.ts +9 -268
  14. package/src/engine/systems/diagnostics.ts +20 -19
  15. package/src/engine/systems/index.ts +3 -1
  16. package/src/engine/systems/input-mirror.ts +101 -3
  17. package/src/engine/systems/resource-upload.ts +96 -44
  18. package/src/engine/systems/response-decode.ts +69 -15
  19. package/src/engine/systems/scene-sync.ts +306 -0
  20. package/src/engine/systems/ui-bridge.ts +360 -0
  21. package/src/engine/systems/utils.ts +43 -1
  22. package/src/engine/systems/world-lifecycle.ts +37 -102
  23. package/src/engine/window/manager.ts +168 -0
  24. package/src/engine/world/entities.ts +821 -78
  25. package/src/engine/world/mount.ts +174 -0
  26. package/src/engine/world/types.ts +71 -0
  27. package/src/engine/world/world-ui.ts +266 -0
  28. package/src/engine/world/world3d.ts +280 -0
  29. package/src/index.ts +30 -1
  30. package/src/mount.ts +2 -0
  31. package/src/types/cmds/audio.ts +73 -48
  32. package/src/types/cmds/camera.ts +12 -8
  33. package/src/types/cmds/environment.ts +9 -3
  34. package/src/types/cmds/geometry.ts +13 -14
  35. package/src/types/cmds/index.ts +198 -168
  36. package/src/types/cmds/light.ts +12 -11
  37. package/src/types/cmds/material.ts +9 -11
  38. package/src/types/cmds/model.ts +17 -15
  39. package/src/types/cmds/realm.ts +25 -0
  40. package/src/types/cmds/system.ts +19 -0
  41. package/src/types/cmds/target.ts +82 -0
  42. package/src/types/cmds/texture.ts +13 -3
  43. package/src/types/cmds/ui.ts +220 -0
  44. package/src/types/cmds/window.ts +41 -204
  45. package/src/types/events/index.ts +4 -1
  46. package/src/types/events/pointer.ts +42 -13
  47. package/src/types/events/system.ts +144 -30
  48. package/src/types/events/ui.ts +21 -0
  49. package/src/types/index.ts +1 -0
  50. package/src/types/json.ts +15 -0
  51. package/src/window.ts +8 -0
  52. package/src/world-ui.ts +2 -0
  53. package/src/world3d.ts +10 -0
  54. package/tsconfig.json +0 -29
@@ -1,5 +1,8 @@
1
1
  import type { NotificationLevel } from '../kinds';
2
2
 
3
+ export type ProfilingDetailLevel = 'basic' | 'full';
4
+ export type SystemPointerTraceLevel = 'off' | 'errors' | 'basic' | 'full';
5
+
3
6
  /** Command payload for sending a notification. */
4
7
  export interface CmdNotificationSendArgs {
5
8
  id?: string;
@@ -14,6 +17,22 @@ export interface CmdResultNotificationSend {
14
17
  success: boolean;
15
18
  }
16
19
 
20
+ /** Command payload for runtime diagnostics and tracing controls. */
21
+ export interface CmdSystemDiagnosticsSetArgs {
22
+ profilingEnabled?: boolean;
23
+ profilingDetail?: ProfilingDetailLevel;
24
+ profilingSamplingPercent?: number;
25
+ profilingWindowFrames?: number;
26
+ traceLevel?: SystemPointerTraceLevel;
27
+ traceSamplingPercent?: number;
28
+ }
29
+
30
+ /** Result payload for diagnostics update. */
31
+ export interface CmdResultSystemDiagnosticsSet {
32
+ success: boolean;
33
+ message: string;
34
+ }
35
+
17
36
  /** Command payload for discarding all pending upload buffers. */
18
37
  export interface CmdUploadBufferDiscardAllArgs {}
19
38
 
@@ -0,0 +1,82 @@
1
+ export type TargetKind =
2
+ | 'window'
3
+ | 'widget-realm-viewport'
4
+ | 'realm-plane'
5
+ | 'texture';
6
+
7
+ export type SurfaceFormat =
8
+ | 'rgba16-float'
9
+ | 'rgba8-unorm'
10
+ | 'bgra8-unorm'
11
+ | 'depth32-float'
12
+ | 'depth24-plus';
13
+
14
+ export type SurfaceAlphaMode =
15
+ | 'auto'
16
+ | 'opaque'
17
+ | 'pre-multiplied'
18
+ | 'post-multiplied'
19
+ | 'inherit';
20
+
21
+ export type DimensionValue =
22
+ | { unit: 'px'; value: number }
23
+ | { unit: 'percent'; value: number }
24
+ | { unit: 'character'; value: number }
25
+ | { unit: 'display'; value: number };
26
+
27
+ export interface TargetLayerLayout {
28
+ left: DimensionValue;
29
+ top: DimensionValue;
30
+ width: DimensionValue;
31
+ height: DimensionValue;
32
+ zIndex: number;
33
+ blendMode: number;
34
+ clip?: [number, number, number, number] | null;
35
+ }
36
+
37
+ export interface CmdTargetUpsertArgs {
38
+ targetId: number;
39
+ kind: TargetKind;
40
+ windowId?: number;
41
+ size?: [number, number];
42
+ formatPolicy?: SurfaceFormat;
43
+ alphaPolicy?: SurfaceAlphaMode;
44
+ msaaSamples?: number;
45
+ }
46
+
47
+ export interface CmdResultTargetUpsert {
48
+ success: boolean;
49
+ message: string;
50
+ }
51
+
52
+ export interface CmdTargetDisposeArgs {
53
+ targetId: number;
54
+ }
55
+
56
+ export interface CmdResultTargetDispose {
57
+ success: boolean;
58
+ message: string;
59
+ }
60
+
61
+ export interface CmdTargetLayerUpsertArgs {
62
+ realmId: number;
63
+ targetId: number;
64
+ layout: TargetLayerLayout;
65
+ cameraId?: number;
66
+ environmentId?: number;
67
+ }
68
+
69
+ export interface CmdResultTargetLayerUpsert {
70
+ success: boolean;
71
+ message: string;
72
+ }
73
+
74
+ export interface CmdTargetLayerDisposeArgs {
75
+ realmId: number;
76
+ targetId: number;
77
+ }
78
+
79
+ export interface CmdResultTargetLayerDispose {
80
+ success: boolean;
81
+ message: string;
82
+ }
@@ -9,7 +9,6 @@ export interface ForwardAtlasOptions {
9
9
 
10
10
  /** Command payload for creating a texture from an uploaded buffer. */
11
11
  export interface CmdTextureCreateFromBufferArgs {
12
- windowId: number;
13
12
  textureId: number;
14
13
  label?: string;
15
14
  bufferId: number;
@@ -27,7 +26,6 @@ export interface CmdResultTextureCreateFromBuffer {
27
26
 
28
27
  /** Command payload for creating a solid color texture. */
29
28
  export interface CmdTextureCreateSolidColorArgs {
30
- windowId: number;
31
29
  textureId: number;
32
30
  label?: string;
33
31
  color: [number, number, number, number];
@@ -44,7 +42,6 @@ export interface CmdResultTextureCreateSolidColor {
44
42
 
45
43
  /** Command payload for disposing a texture. */
46
44
  export interface CmdTextureDisposeArgs {
47
- windowId: number;
48
45
  textureId: number;
49
46
  }
50
47
 
@@ -54,6 +51,19 @@ export interface CmdResultTextureDispose {
54
51
  message: string;
55
52
  }
56
53
 
54
+ /** Command payload for binding a texture to a target output. */
55
+ export interface CmdTextureBindTargetArgs {
56
+ textureId: number;
57
+ targetId: number;
58
+ label?: string;
59
+ }
60
+
61
+ /** Result payload for texture-target binding. */
62
+ export interface CmdResultTextureBindTarget {
63
+ success: boolean;
64
+ message: string;
65
+ }
66
+
57
67
  /** Command payload for listing textures. */
58
68
  export interface CmdTextureListArgs {
59
69
  windowId: number;
@@ -0,0 +1,220 @@
1
+ import type { JsonObject, JsonValue } from '../json';
2
+
3
+ export type UiThemeValue = JsonValue;
4
+ export type UiOp = JsonObject;
5
+ export type UiNodeKind = string;
6
+ export type UiNodeProps = JsonObject;
7
+
8
+ export interface CmdUiThemeDefineArgs {
9
+ themeId: number;
10
+ version?: number;
11
+ data?: Record<string, UiThemeValue>;
12
+ fontData?: Record<string, number[]>;
13
+ fontFamilies?: Record<string, string[]>;
14
+ }
15
+
16
+ export interface CmdResultUiThemeDefine {
17
+ success: boolean;
18
+ message: string;
19
+ themeId?: number;
20
+ version?: number;
21
+ }
22
+
23
+ export interface CmdUiThemeDisposeArgs {
24
+ themeId: number;
25
+ }
26
+
27
+ export interface CmdResultUiThemeDispose {
28
+ success: boolean;
29
+ message: string;
30
+ }
31
+
32
+ export interface CmdUiDocumentCreateArgs {
33
+ documentId: number;
34
+ realmId: number;
35
+ rect: [number, number, number, number];
36
+ themeId?: number;
37
+ }
38
+
39
+ export interface CmdResultUiDocumentCreate {
40
+ success: boolean;
41
+ message: string;
42
+ documentId?: number;
43
+ }
44
+
45
+ export interface CmdUiDocumentDisposeArgs {
46
+ documentId: number;
47
+ }
48
+
49
+ export interface CmdResultUiDocumentDispose {
50
+ success: boolean;
51
+ message: string;
52
+ }
53
+
54
+ export interface CmdUiDocumentSetRectArgs {
55
+ documentId: number;
56
+ rect: [number, number, number, number];
57
+ }
58
+
59
+ export interface CmdResultUiDocumentSetRect {
60
+ success: boolean;
61
+ message: string;
62
+ }
63
+
64
+ export interface CmdUiDocumentSetThemeArgs {
65
+ documentId: number;
66
+ themeId?: number;
67
+ }
68
+
69
+ export interface CmdResultUiDocumentSetTheme {
70
+ success: boolean;
71
+ message: string;
72
+ }
73
+
74
+ export interface CmdUiDocumentGetTreeArgs {
75
+ documentId: number;
76
+ }
77
+
78
+ export interface UiDocumentTreeNode {
79
+ nodeId: number;
80
+ kind: UiNodeKind;
81
+ zIndex: number;
82
+ children: UiDocumentTreeNode[];
83
+ }
84
+
85
+ export interface CmdResultUiDocumentGetTree {
86
+ success: boolean;
87
+ message: string;
88
+ documentId?: number;
89
+ version?: number;
90
+ rootNodes: UiDocumentTreeNode[];
91
+ }
92
+
93
+ export interface CmdUiDocumentGetLayoutRectsArgs {
94
+ documentId: number;
95
+ }
96
+
97
+ export interface UiNodeLayoutRect {
98
+ nodeId: number;
99
+ rect: [number, number, number, number];
100
+ }
101
+
102
+ export interface CmdResultUiDocumentGetLayoutRects {
103
+ success: boolean;
104
+ message: string;
105
+ documentId?: number;
106
+ version?: number;
107
+ rects: UiNodeLayoutRect[];
108
+ }
109
+
110
+ export interface CmdUiApplyOpsArgs {
111
+ documentId: number;
112
+ version: number;
113
+ ops: UiOp[];
114
+ }
115
+
116
+ export interface CmdResultUiApplyOps {
117
+ success: boolean;
118
+ message: string;
119
+ version?: number;
120
+ }
121
+
122
+ export interface CmdUiDebugSetArgs {
123
+ enabled: boolean;
124
+ showBounds?: boolean;
125
+ showIds?: boolean;
126
+ showProfile?: boolean;
127
+ }
128
+
129
+ export interface CmdResultUiDebugSet {
130
+ success: boolean;
131
+ message: string;
132
+ }
133
+
134
+ export interface CmdUiFocusSetArgs {
135
+ windowId: number;
136
+ realmId: number;
137
+ documentId: number;
138
+ nodeId?: number;
139
+ }
140
+
141
+ export interface CmdUiFocusGetArgs {
142
+ windowId?: number;
143
+ }
144
+
145
+ export interface CmdResultUiFocusSet {
146
+ success: boolean;
147
+ message: string;
148
+ }
149
+
150
+ export interface UiFocusEntry {
151
+ windowId: number;
152
+ realmId: number;
153
+ documentId: number;
154
+ nodeId: number;
155
+ }
156
+
157
+ export interface CmdResultUiFocusGet {
158
+ success: boolean;
159
+ message: string;
160
+ entries: UiFocusEntry[];
161
+ }
162
+
163
+ export type UiCmdPointerTraceLevel = 'off' | 'errors' | 'basic' | 'full';
164
+
165
+ export interface CmdUiEventTraceSetArgs {
166
+ level?: UiCmdPointerTraceLevel;
167
+ samplingPercent?: number;
168
+ }
169
+
170
+ export interface CmdResultUiEventTraceSet {
171
+ success: boolean;
172
+ message: string;
173
+ level?: UiCmdPointerTraceLevel;
174
+ samplingPercent?: number;
175
+ }
176
+
177
+ export interface CmdUiImageCreateFromBufferArgs {
178
+ imageId: number;
179
+ bufferId: number;
180
+ label?: string;
181
+ }
182
+
183
+ export interface CmdResultUiImageCreateFromBuffer {
184
+ success: boolean;
185
+ message: string;
186
+ pending: boolean;
187
+ }
188
+
189
+ export interface CmdUiImageDisposeArgs {
190
+ imageId: number;
191
+ }
192
+
193
+ export interface CmdResultUiImageDispose {
194
+ success: boolean;
195
+ message: string;
196
+ }
197
+
198
+ export interface CmdUiClipboardPasteArgs {
199
+ windowId: number;
200
+ text: string;
201
+ }
202
+
203
+ export interface CmdUiScreenshotReplyArgs {
204
+ windowId: number;
205
+ realmId?: number;
206
+ width: number;
207
+ height: number;
208
+ rgba: number[];
209
+ }
210
+
211
+ export interface CmdUiAccessKitActionRequestArgs {
212
+ windowId: number;
213
+ realmId?: number;
214
+ action: string;
215
+ }
216
+
217
+ export interface CmdResultUiInputEvent {
218
+ success: boolean;
219
+ message: string;
220
+ }
@@ -22,6 +22,9 @@ export interface CmdWindowCreateArgs {
22
22
  export interface CmdResultWindowCreate {
23
23
  success: boolean;
24
24
  message: string;
25
+ realmId?: number;
26
+ surfaceId?: number;
27
+ presentId?: number;
25
28
  }
26
29
 
27
30
  /** Command payload for closing a window. */
@@ -35,229 +38,63 @@ export interface CmdResultWindowClose {
35
38
  message: string;
36
39
  }
37
40
 
38
- /** Command payload for setting window title. */
39
- export interface CmdWindowSetTitleArgs {
41
+ /** Command payload for changing and/or querying window measurements. */
42
+ export interface CmdWindowMeasurementArgs {
40
43
  windowId: number;
41
- title: string;
44
+ position?: [number, number];
45
+ size?: [number, number];
46
+ getPosition?: boolean;
47
+ getSize?: boolean;
48
+ getOuterSize?: boolean;
49
+ getSurfaceSize?: boolean;
42
50
  }
43
51
 
44
- /** Result payload for window title update. */
45
- export interface CmdResultWindowSetTitle {
52
+ /** Result payload for window measurement command. */
53
+ export interface CmdResultWindowMeasurement {
46
54
  success: boolean;
47
55
  message: string;
56
+ position?: [number, number];
57
+ size?: [number, number];
58
+ outerSize?: [number, number];
59
+ surfaceSize?: [number, number];
48
60
  }
49
61
 
50
- /** Command payload for setting window position. */
51
- export interface CmdWindowSetPositionArgs {
62
+ /** Command payload for cursor updates. */
63
+ export interface CmdWindowCursorArgs {
52
64
  windowId: number;
53
- position: [number, number];
65
+ visible?: boolean;
66
+ mode?: CursorGrabMode;
67
+ icon?: CursorIcon;
54
68
  }
55
69
 
56
- /** Result payload for window position update. */
57
- export interface CmdResultWindowSetPosition {
70
+ /** Result payload for cursor command. */
71
+ export interface CmdResultWindowCursor {
58
72
  success: boolean;
59
73
  message: string;
60
74
  }
61
75
 
62
- /** Command payload for querying window position. */
63
- export interface CmdWindowGetPositionArgs {
64
- windowId: number;
65
- }
66
-
67
- /** Result payload for window position query. */
68
- export interface CmdResultWindowGetPosition {
69
- success: boolean;
70
- message: string;
71
- content: [number, number];
72
- }
73
-
74
- /** Command payload for setting window size. */
75
- export interface CmdWindowSetSizeArgs {
76
- windowId: number;
77
- size: [number, number];
78
- }
79
-
80
- /** Result payload for window size update. */
81
- export interface CmdResultWindowSetSize {
82
- success: boolean;
83
- message: string;
84
- }
85
-
86
- /** Command payload for querying window size. */
87
- export interface CmdWindowGetSizeArgs {
88
- windowId: number;
89
- }
90
-
91
- /** Result payload for window size query. */
92
- export interface CmdResultWindowGetSize {
93
- success: boolean;
94
- message: string;
95
- content: [number, number];
96
- }
97
-
98
- /** Command payload for querying outer window size. */
99
- export interface CmdWindowGetOuterSizeArgs {
100
- windowId: number;
101
- }
102
-
103
- /** Result payload for outer window size query. */
104
- export interface CmdResultWindowGetOuterSize {
105
- success: boolean;
106
- message: string;
107
- content: [number, number];
108
- }
109
-
110
- /** Command payload for querying surface size. */
111
- export interface CmdWindowGetSurfaceSizeArgs {
112
- windowId: number;
113
- }
114
-
115
- /** Result payload for surface size query. */
116
- export interface CmdResultWindowGetSurfaceSize {
117
- success: boolean;
118
- message: string;
119
- content: [number, number];
120
- }
121
-
122
- /** Command payload for setting window state. */
123
- export interface CmdWindowSetStateArgs {
124
- windowId: number;
125
- state: WindowState;
126
- }
127
-
128
- /** Result payload for window state update. */
129
- export interface CmdResultWindowSetState {
130
- success: boolean;
131
- message: string;
132
- }
133
-
134
- /** Command payload for querying window state. */
135
- export interface CmdWindowGetStateArgs {
136
- windowId: number;
137
- }
138
-
139
- /** Result payload for window state query. */
140
- export interface CmdResultWindowGetState {
141
- success: boolean;
142
- message: string;
143
- content: WindowState;
144
- }
145
-
146
- /** Command payload for setting window icon. */
147
- export interface CmdWindowSetIconArgs {
148
- windowId: number;
149
- bufferId: number; // Buffer ID pointing to an image
150
- }
151
-
152
- /** Result payload for window icon update. */
153
- export interface CmdResultWindowSetIcon {
154
- success: boolean;
155
- message: string;
156
- }
157
-
158
- /** Command payload for toggling window decorations. */
159
- export interface CmdWindowSetDecorationsArgs {
160
- windowId: number;
161
- decorations: boolean;
162
- }
163
-
164
- /** Result payload for window decoration update. */
165
- export interface CmdResultWindowSetDecorations {
166
- success: boolean;
167
- message: string;
168
- }
76
+ export type WindowStateAction = 'focus' | 'request-attention';
169
77
 
170
- /** Command payload for querying window decorations. */
171
- export interface CmdWindowHasDecorationsArgs {
172
- windowId: number;
173
- }
174
-
175
- /** Result payload for window decoration query. */
176
- export interface CmdResultWindowHasDecorations {
177
- success: boolean;
178
- message: string;
179
- content: boolean;
180
- }
181
-
182
- /** Command payload for toggling window resizable state. */
183
- export interface CmdWindowSetResizableArgs {
184
- windowId: number;
185
- resizable: boolean;
186
- }
187
-
188
- /** Result payload for window resizable update. */
189
- export interface CmdResultWindowSetResizable {
190
- success: boolean;
191
- message: string;
192
- }
193
-
194
- /** Command payload for querying resizable state. */
195
- export interface CmdWindowIsResizableArgs {
196
- windowId: number;
197
- }
198
-
199
- /** Result payload for resizable query. */
200
- export interface CmdResultWindowIsResizable {
201
- success: boolean;
202
- message: string;
203
- content: boolean;
204
- }
205
-
206
- /** Command payload for requesting user attention. */
207
- export interface CmdWindowRequestAttentionArgs {
78
+ /** Command payload for state updates/queries. */
79
+ export interface CmdWindowStateArgs {
208
80
  windowId: number;
81
+ title?: string;
82
+ state?: WindowState;
83
+ iconBufferId?: number;
84
+ decorations?: boolean;
85
+ resizable?: boolean;
86
+ action?: WindowStateAction;
209
87
  attentionType?: UserAttentionType;
88
+ getState?: boolean;
89
+ getDecorations?: boolean;
90
+ getResizable?: boolean;
210
91
  }
211
92
 
212
- /** Result payload for attention request. */
213
- export interface CmdResultWindowRequestAttention {
214
- success: boolean;
215
- message: string;
216
- }
217
-
218
- /** Command payload for focusing a window. */
219
- export interface CmdWindowFocusArgs {
220
- windowId: number;
221
- }
222
-
223
- /** Result payload for window focus. */
224
- export interface CmdResultWindowFocus {
225
- success: boolean;
226
- message: string;
227
- }
228
-
229
- /** Command payload for toggling cursor visibility. */
230
- export interface CmdWindowSetCursorVisibleArgs {
231
- windowId: number;
232
- visible: boolean;
233
- }
234
-
235
- /** Result payload for cursor visibility update. */
236
- export interface CmdResultWindowSetCursorVisible {
237
- success: boolean;
238
- message: string;
239
- }
240
-
241
- /** Command payload for setting cursor grab mode. */
242
- export interface CmdWindowSetCursorGrabArgs {
243
- windowId: number;
244
- mode: CursorGrabMode;
245
- }
246
-
247
- /** Result payload for cursor grab update. */
248
- export interface CmdResultWindowSetCursorGrab {
249
- success: boolean;
250
- message: string;
251
- }
252
-
253
- /** Command payload for setting cursor icon. */
254
- export interface CmdWindowSetCursorIconArgs {
255
- windowId: number;
256
- icon: CursorIcon;
257
- }
258
-
259
- /** Result payload for cursor icon update. */
260
- export interface CmdResultWindowSetCursorIcon {
93
+ /** Result payload for state command. */
94
+ export interface CmdResultWindowState {
261
95
  success: boolean;
262
96
  message: string;
97
+ state?: WindowState;
98
+ decorations?: boolean;
99
+ resizable?: boolean;
263
100
  }
@@ -3,12 +3,14 @@ import type { PointerEvent } from './pointer';
3
3
  import type { KeyboardEvent } from './keyboard';
4
4
  import type { GamepadEvent } from './gamepad';
5
5
  import type { SystemEvent } from './system';
6
+ import type { UiEvent } from './ui';
6
7
 
7
8
  export * from './window';
8
9
  export * from './pointer';
9
10
  export * from './keyboard';
10
11
  export * from './gamepad';
11
12
  export * from './system';
13
+ export * from './ui';
12
14
 
13
15
  /** Discriminated union of all engine events. */
14
16
  export type EngineEvent =
@@ -16,4 +18,5 @@ export type EngineEvent =
16
18
  | { type: 'pointer'; content: PointerEvent }
17
19
  | { type: 'keyboard'; content: KeyboardEvent }
18
20
  | { type: 'gamepad'; content: GamepadEvent }
19
- | { type: 'system'; content: SystemEvent };
21
+ | { type: 'system'; content: SystemEvent }
22
+ | { type: 'ui'; content: UiEvent };