@vulfram/engine 0.14.8-alpha → 0.19.2-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 (63) hide show
  1. package/README.md +106 -0
  2. package/package.json +60 -4
  3. package/src/core.ts +14 -0
  4. package/src/ecs.ts +1 -0
  5. package/src/engine/api.ts +222 -24
  6. package/src/engine/bridge/dispatch.ts +260 -40
  7. package/src/engine/bridge/guards.ts +4 -1
  8. package/src/engine/bridge/protocol.ts +69 -52
  9. package/src/engine/ecs/components.ts +340 -0
  10. package/src/engine/ecs/index.ts +3 -518
  11. package/src/engine/ecs/intents.ts +184 -0
  12. package/src/engine/ecs/systems.ts +26 -0
  13. package/src/engine/intents/store.ts +72 -0
  14. package/src/engine/state.ts +136 -5
  15. package/src/engine/systems/command-intent.ts +159 -14
  16. package/src/engine/systems/constraint-solve.ts +167 -0
  17. package/src/engine/systems/core-command-builder.ts +9 -268
  18. package/src/engine/systems/diagnostics.ts +20 -29
  19. package/src/engine/systems/index.ts +3 -1
  20. package/src/engine/systems/input-mirror.ts +257 -21
  21. package/src/engine/systems/resource-upload.ts +108 -58
  22. package/src/engine/systems/response-decode.ts +86 -15
  23. package/src/engine/systems/scene-sync.ts +305 -0
  24. package/src/engine/systems/ui-bridge.ts +381 -0
  25. package/src/engine/systems/utils.ts +86 -1
  26. package/src/engine/systems/world-lifecycle.ts +43 -114
  27. package/src/engine/window/manager.ts +168 -0
  28. package/src/engine/world/entities.ts +998 -91
  29. package/src/engine/world/mount.ts +195 -0
  30. package/src/engine/world/types.ts +71 -0
  31. package/src/engine/world/world-ui.ts +313 -0
  32. package/src/engine/world/world3d.ts +529 -0
  33. package/src/helpers/collision.ts +487 -0
  34. package/src/helpers/index.ts +2 -0
  35. package/src/helpers/raycast.ts +442 -0
  36. package/src/index.ts +30 -1
  37. package/src/mount.ts +2 -0
  38. package/src/types/cmds/audio.ts +73 -48
  39. package/src/types/cmds/camera.ts +12 -8
  40. package/src/types/cmds/environment.ts +9 -3
  41. package/src/types/cmds/geometry.ts +15 -16
  42. package/src/types/cmds/index.ts +234 -162
  43. package/src/types/cmds/input.ts +39 -0
  44. package/src/types/cmds/light.ts +12 -11
  45. package/src/types/cmds/material.ts +19 -21
  46. package/src/types/cmds/model.ts +17 -15
  47. package/src/types/cmds/realm.ts +23 -0
  48. package/src/types/cmds/system.ts +29 -0
  49. package/src/types/cmds/target.ts +96 -0
  50. package/src/types/cmds/texture.ts +13 -3
  51. package/src/types/cmds/ui.ts +220 -0
  52. package/src/types/cmds/window.ts +41 -204
  53. package/src/types/events/index.ts +4 -1
  54. package/src/types/events/keyboard.ts +2 -2
  55. package/src/types/events/pointer.ts +85 -13
  56. package/src/types/events/system.ts +188 -30
  57. package/src/types/events/ui.ts +21 -0
  58. package/src/types/index.ts +1 -0
  59. package/src/types/json.ts +15 -0
  60. package/src/window.ts +8 -0
  61. package/src/world-ui.ts +2 -0
  62. package/src/world3d.ts +10 -0
  63. package/tsconfig.json +0 -29
@@ -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 };
@@ -120,8 +120,8 @@ export enum KeyCode {
120
120
  ControlLeft = 55,
121
121
  ControlRight = 56,
122
122
  Enter = 57,
123
- SuperLeft = 58,
124
- SuperRight = 59,
123
+ MetaLeft = 58,
124
+ MetaRight = 59,
125
125
  ShiftLeft = 60,
126
126
  ShiftRight = 61,
127
127
  Space = 62,
@@ -1,85 +1,158 @@
1
1
  import type { ElementState, TouchPhase } from '../kinds';
2
2
 
3
- /** Scroll delta reported in line or pixel units. */
4
3
  export type ScrollDelta =
5
4
  | { type: 'line'; value: [number, number] }
6
5
  | { type: 'pixel'; value: [number, number] };
7
6
 
8
- /** Payload for pointer move event. */
7
+ export type PointerTraceStage =
8
+ | 'root-window'
9
+ | 'capture'
10
+ | 'focus-fallback'
11
+ | 'connector-hit'
12
+ | 'realm-plane-hit'
13
+ | 'hop-forward'
14
+ | 'stop-no-hit'
15
+ | 'stop-cycle'
16
+ | 'stop-step-budget';
17
+
18
+ export interface PointerTraceHop {
19
+ stage: PointerTraceStage;
20
+ realmId?: number;
21
+ targetId?: number;
22
+ layerRealmId?: number;
23
+ connectorId?: number;
24
+ surfaceId?: number;
25
+ cameraId?: number;
26
+ uv?: [number, number];
27
+ }
28
+
29
+ export interface PointerEventTrace {
30
+ windowId: number;
31
+ realmId: number;
32
+ targetId?: number;
33
+ connectorId?: number;
34
+ sourceRealmId?: number;
35
+ uv?: [number, number];
36
+ hops: PointerTraceHop[];
37
+ }
38
+
9
39
  export interface PointerEventOnMoveData {
10
40
  windowId: number;
41
+ windowWidth?: number;
42
+ windowHeight?: number;
11
43
  pointerType: number;
12
44
  pointerId: number;
13
45
  position: [number, number];
46
+ positionTarget?: [number, number];
47
+ targetWidth?: number;
48
+ targetHeight?: number;
49
+ trace?: PointerEventTrace;
14
50
  }
15
51
 
16
- /** Payload for pointer enter event. */
17
52
  export interface PointerEventOnEnterData {
18
53
  windowId: number;
54
+ windowWidth?: number;
55
+ windowHeight?: number;
19
56
  pointerType: number;
20
57
  pointerId: number;
58
+ targetWidth?: number;
59
+ targetHeight?: number;
60
+ trace?: PointerEventTrace;
21
61
  }
22
62
 
23
- /** Payload for pointer leave event. */
24
63
  export interface PointerEventOnLeaveData {
25
64
  windowId: number;
65
+ windowWidth?: number;
66
+ windowHeight?: number;
26
67
  pointerType: number;
27
68
  pointerId: number;
69
+ targetWidth?: number;
70
+ targetHeight?: number;
71
+ trace?: PointerEventTrace;
28
72
  }
29
73
 
30
- /** Payload for pointer button event. */
31
74
  export interface PointerEventOnButtonData {
32
75
  windowId: number;
76
+ windowWidth?: number;
77
+ windowHeight?: number;
33
78
  pointerType: number;
34
79
  pointerId: number;
35
80
  button: MouseButton;
36
81
  state: ElementState;
37
82
  position: [number, number];
83
+ positionTarget?: [number, number];
84
+ targetWidth?: number;
85
+ targetHeight?: number;
86
+ trace?: PointerEventTrace;
38
87
  }
39
88
 
40
- /** Payload for pointer scroll event. */
41
89
  export interface PointerEventOnScrollData {
42
90
  windowId: number;
91
+ windowWidth?: number;
92
+ windowHeight?: number;
43
93
  delta: ScrollDelta;
44
94
  phase: TouchPhase;
95
+ targetWidth?: number;
96
+ targetHeight?: number;
97
+ trace?: PointerEventTrace;
45
98
  }
46
99
 
47
- /** Payload for touch event. */
48
100
  export interface PointerEventOnTouchData {
49
101
  windowId: number;
102
+ windowWidth?: number;
103
+ windowHeight?: number;
50
104
  pointerId: number;
51
105
  phase: TouchPhase;
52
106
  position: [number, number];
107
+ positionTarget?: [number, number];
108
+ targetWidth?: number;
109
+ targetHeight?: number;
53
110
  pressure?: number;
111
+ trace?: PointerEventTrace;
54
112
  }
55
113
 
56
- /** Payload for pinch gesture event. */
57
114
  export interface PointerEventOnPinchGestureData {
58
115
  windowId: number;
116
+ windowWidth?: number;
117
+ windowHeight?: number;
59
118
  delta: number;
60
119
  phase: TouchPhase;
120
+ targetWidth?: number;
121
+ targetHeight?: number;
122
+ trace?: PointerEventTrace;
61
123
  }
62
124
 
63
- /** Payload for pan gesture event. */
64
125
  export interface PointerEventOnPanGestureData {
65
126
  windowId: number;
127
+ windowWidth?: number;
128
+ windowHeight?: number;
66
129
  delta: [number, number];
67
130
  phase: TouchPhase;
131
+ targetWidth?: number;
132
+ targetHeight?: number;
133
+ trace?: PointerEventTrace;
68
134
  }
69
135
 
70
- /** Payload for rotation gesture event. */
71
136
  export interface PointerEventOnRotationGestureData {
72
137
  windowId: number;
138
+ windowWidth?: number;
139
+ windowHeight?: number;
73
140
  delta: number;
74
141
  phase: TouchPhase;
142
+ targetWidth?: number;
143
+ targetHeight?: number;
144
+ trace?: PointerEventTrace;
75
145
  }
76
146
 
77
- /** Payload for double tap gesture event. */
78
147
  export interface PointerEventOnDoubleTapGestureData {
79
148
  windowId: number;
149
+ windowWidth?: number;
150
+ windowHeight?: number;
151
+ targetWidth?: number;
152
+ targetHeight?: number;
153
+ trace?: PointerEventTrace;
80
154
  }
81
155
 
82
- /** Discriminated union of pointer events. */
83
156
  export type PointerEvent =
84
157
  | { event: 'on-move'; data: PointerEventOnMoveData }
85
158
  | { event: 'on-enter'; data: PointerEventOnEnterData }
@@ -95,7 +168,6 @@ export type PointerEvent =
95
168
  data: PointerEventOnDoubleTapGestureData;
96
169
  };
97
170
 
98
- /** Mouse button identifiers. */
99
171
  export enum MouseButton {
100
172
  Left = 0,
101
173
  Right = 1,