@vulfram/engine 0.5.6-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 (40) hide show
  1. package/package.json +17 -0
  2. package/src/engine/api.ts +282 -0
  3. package/src/engine/bridge/dispatch.ts +115 -0
  4. package/src/engine/bridge/guards.ts +28 -0
  5. package/src/engine/bridge/protocol.ts +130 -0
  6. package/src/engine/ecs/index.ts +516 -0
  7. package/src/engine/errors.ts +10 -0
  8. package/src/engine/state.ts +135 -0
  9. package/src/engine/systems/command-intent.ts +74 -0
  10. package/src/engine/systems/core-command-builder.ts +265 -0
  11. package/src/engine/systems/diagnostics.ts +42 -0
  12. package/src/engine/systems/index.ts +7 -0
  13. package/src/engine/systems/input-mirror.ts +152 -0
  14. package/src/engine/systems/resource-upload.ts +143 -0
  15. package/src/engine/systems/response-decode.ts +28 -0
  16. package/src/engine/systems/utils.ts +147 -0
  17. package/src/engine/systems/world-lifecycle.ts +164 -0
  18. package/src/engine/world/entities.ts +516 -0
  19. package/src/index.ts +9 -0
  20. package/src/types/cmds/camera.ts +76 -0
  21. package/src/types/cmds/environment.ts +45 -0
  22. package/src/types/cmds/geometry.ts +144 -0
  23. package/src/types/cmds/gizmo.ts +18 -0
  24. package/src/types/cmds/index.ts +231 -0
  25. package/src/types/cmds/light.ts +69 -0
  26. package/src/types/cmds/material.ts +98 -0
  27. package/src/types/cmds/model.ts +59 -0
  28. package/src/types/cmds/shadow.ts +22 -0
  29. package/src/types/cmds/system.ts +15 -0
  30. package/src/types/cmds/texture.ts +63 -0
  31. package/src/types/cmds/window.ts +263 -0
  32. package/src/types/events/gamepad.ts +34 -0
  33. package/src/types/events/index.ts +19 -0
  34. package/src/types/events/keyboard.ts +225 -0
  35. package/src/types/events/pointer.ts +105 -0
  36. package/src/types/events/system.ts +13 -0
  37. package/src/types/events/window.ts +96 -0
  38. package/src/types/index.ts +3 -0
  39. package/src/types/kinds.ts +111 -0
  40. package/tsconfig.json +29 -0
@@ -0,0 +1,144 @@
1
+ import type { PrimitiveShape } from '../kinds';
2
+
3
+ /** Primitive attribute semantic identifiers. */
4
+ export type GeometryPrimitiveType =
5
+ | 'index'
6
+ | 'position'
7
+ | 'normal'
8
+ | 'tangent'
9
+ | 'color'
10
+ | 'uv'
11
+ | 'skin-joints'
12
+ | 'skin-weights';
13
+
14
+ /** Convenience mapping for primitive attribute identifiers. */
15
+ export const GeometryPrimitiveType = {
16
+ Index: 'index' as const,
17
+ Position: 'position' as const,
18
+ Normal: 'normal' as const,
19
+ Tangent: 'tangent' as const,
20
+ Color: 'color' as const,
21
+ UV: 'uv' as const,
22
+ SkinJoints: 'skin-joints' as const,
23
+ SkinWeights: 'skin-weights' as const,
24
+ };
25
+
26
+ /** Geometry buffer entry describing a single attribute stream. */
27
+ export interface GeometryPrimitiveEntry {
28
+ primitiveType: GeometryPrimitiveType;
29
+ bufferId: number;
30
+ }
31
+
32
+ /** Command payload for creating geometry from buffers. */
33
+ export interface CmdGeometryCreateArgs {
34
+ windowId: number;
35
+ geometryId: number;
36
+ label?: string;
37
+ entries: GeometryPrimitiveEntry[];
38
+ }
39
+
40
+ /** Result payload for geometry create. */
41
+ export interface CmdResultGeometryCreate {
42
+ success: boolean;
43
+ message: string;
44
+ }
45
+
46
+ /** Command payload for updating geometry buffers or label. */
47
+ export interface CmdGeometryUpdateArgs {
48
+ windowId: number;
49
+ geometryId: number;
50
+ label?: string;
51
+ entries: GeometryPrimitiveEntry[];
52
+ }
53
+
54
+ /** Result payload for geometry update. */
55
+ export interface CmdResultGeometryUpdate {
56
+ success: boolean;
57
+ message: string;
58
+ }
59
+
60
+ /** Command payload for disposing geometry. */
61
+ export interface CmdGeometryDisposeArgs {
62
+ windowId: number;
63
+ geometryId: number;
64
+ }
65
+
66
+ /** Result payload for geometry dispose. */
67
+ export interface CmdResultGeometryDispose {
68
+ success: boolean;
69
+ message: string;
70
+ }
71
+
72
+ /** Options for cube primitive generation. */
73
+ export interface CubeOptions {
74
+ size: [number, number, number]; // Vec3 in Rust
75
+ subdivisions: number;
76
+ }
77
+
78
+ /** Options for plane primitive generation. */
79
+ export interface PlaneOptions {
80
+ size: [number, number, number]; // Vec3 in Rust
81
+ subdivisions: number;
82
+ }
83
+
84
+ /** Options for sphere primitive generation. */
85
+ export interface SphereOptions {
86
+ radius: number;
87
+ sectors: number;
88
+ stacks: number;
89
+ }
90
+
91
+ /** Options for cylinder primitive generation. */
92
+ export interface CylinderOptions {
93
+ radius: number;
94
+ height: number;
95
+ sectors: number;
96
+ }
97
+
98
+ /** Options for torus primitive generation. */
99
+ export interface TorusOptions {
100
+ majorRadius: number;
101
+ minorRadius: number;
102
+ majorSegments: number;
103
+ minorSegments: number;
104
+ }
105
+
106
+ /** Options for pyramid primitive generation. */
107
+ export interface PyramidOptions {
108
+ size: [number, number, number]; // Vec3 in Rust
109
+ subdivisions: number;
110
+ }
111
+
112
+ /** Union of all primitive geometry options. */
113
+ export type PrimitiveOptions =
114
+ | { type: 'cube'; content: CubeOptions }
115
+ | { type: 'plane'; content: PlaneOptions }
116
+ | { type: 'sphere'; content: SphereOptions }
117
+ | { type: 'cylinder'; content: CylinderOptions }
118
+ | { type: 'torus'; content: TorusOptions }
119
+ | { type: 'pyramid'; content: PyramidOptions };
120
+
121
+ /** Command payload for creating a primitive geometry. */
122
+ export interface CmdPrimitiveGeometryCreateArgs {
123
+ windowId: number;
124
+ geometryId: number;
125
+ label?: string;
126
+ shape: PrimitiveShape;
127
+ options: PrimitiveOptions;
128
+ }
129
+
130
+ /** Result payload for primitive geometry create. */
131
+ export interface CmdResultPrimitiveGeometryCreate {
132
+ success: boolean;
133
+ message: string;
134
+ }
135
+
136
+ /** Command payload for listing geometry resources. */
137
+ export interface CmdGeometryListArgs {}
138
+
139
+ /** Result payload for geometry list. */
140
+ export interface CmdResultGeometryList {
141
+ success: boolean;
142
+ message: string;
143
+ content: number[]; // List of geometry IDs
144
+ }
@@ -0,0 +1,18 @@
1
+ /** Command payload for drawing a debug line gizmo. */
2
+ export interface CmdGizmoDrawLineArgs {
3
+ start: [number, number, number];
4
+ end: [number, number, number];
5
+ color: [number, number, number, number];
6
+ }
7
+
8
+ /** Command payload for drawing a debug AABB gizmo. */
9
+ export interface CmdGizmoDrawAabbArgs {
10
+ min: [number, number, number];
11
+ max: [number, number, number];
12
+ color: [number, number, number, number];
13
+ }
14
+
15
+ /** Result payload for gizmo draw commands. */
16
+ export interface CmdResultGizmoDraw {
17
+ status: number;
18
+ }
@@ -0,0 +1,231 @@
1
+ import * as Sys from './system';
2
+ import * as Win from './window';
3
+ import * as Cam from './camera';
4
+ import * as Mod from './model';
5
+ import * as Lite from './light';
6
+ import * as Mat from './material';
7
+ import * as Tex from './texture';
8
+ import * as Geo from './geometry';
9
+ import * as Shad from './shadow';
10
+ import * as Giz from './gizmo';
11
+ import * as Env from './environment';
12
+
13
+ export * from './system';
14
+ export * from './window';
15
+ export * from './camera';
16
+ export * from './model';
17
+ export * from './light';
18
+ export * from './material';
19
+ export * from './texture';
20
+ export * from './geometry';
21
+ export * from './shadow';
22
+ export * from './gizmo';
23
+ export * from './environment';
24
+
25
+ /** Discriminated union of all core commands. */
26
+ export type EngineCmd =
27
+ | { type: 'cmd-notification-send'; content: Sys.CmdNotificationSendArgs }
28
+ | { type: 'cmd-window-create'; content: Win.CmdWindowCreateArgs }
29
+ | { type: 'cmd-window-close'; content: Win.CmdWindowCloseArgs }
30
+ | { type: 'cmd-window-set-title'; content: Win.CmdWindowSetTitleArgs }
31
+ | { type: 'cmd-window-set-position'; content: Win.CmdWindowSetPositionArgs }
32
+ | { type: 'cmd-window-get-position'; content: Win.CmdWindowGetPositionArgs }
33
+ | { type: 'cmd-window-set-size'; content: Win.CmdWindowSetSizeArgs }
34
+ | { type: 'cmd-window-get-size'; content: Win.CmdWindowGetSizeArgs }
35
+ | {
36
+ type: 'cmd-window-get-outer-size';
37
+ content: Win.CmdWindowGetOuterSizeArgs;
38
+ }
39
+ | {
40
+ type: 'cmd-window-get-surface-size';
41
+ content: Win.CmdWindowGetSurfaceSizeArgs;
42
+ }
43
+ | { type: 'cmd-window-set-state'; content: Win.CmdWindowSetStateArgs }
44
+ | { type: 'cmd-window-get-state'; content: Win.CmdWindowGetStateArgs }
45
+ | { type: 'cmd-window-set-icon'; content: Win.CmdWindowSetIconArgs }
46
+ | {
47
+ type: 'cmd-window-set-decorations';
48
+ content: Win.CmdWindowSetDecorationsArgs;
49
+ }
50
+ | {
51
+ type: 'cmd-window-has-decorations';
52
+ content: Win.CmdWindowHasDecorationsArgs;
53
+ }
54
+ | { type: 'cmd-window-set-resizable'; content: Win.CmdWindowSetResizableArgs }
55
+ | { type: 'cmd-window-is-resizable'; content: Win.CmdWindowIsResizableArgs }
56
+ | {
57
+ type: 'cmd-window-request-attention';
58
+ content: Win.CmdWindowRequestAttentionArgs;
59
+ }
60
+ | { type: 'cmd-window-focus'; content: Win.CmdWindowFocusArgs }
61
+ | {
62
+ type: 'cmd-window-set-cursor-visible';
63
+ content: Win.CmdWindowSetCursorVisibleArgs;
64
+ }
65
+ | {
66
+ type: 'cmd-window-set-cursor-grab';
67
+ content: Win.CmdWindowSetCursorGrabArgs;
68
+ }
69
+ | {
70
+ type: 'cmd-window-set-cursor-icon';
71
+ content: Win.CmdWindowSetCursorIconArgs;
72
+ }
73
+ | { type: 'cmd-camera-create'; content: Cam.CmdCameraCreateArgs }
74
+ | { type: 'cmd-camera-update'; content: Cam.CmdCameraUpdateArgs }
75
+ | { type: 'cmd-camera-dispose'; content: Cam.CmdCameraDisposeArgs }
76
+ | { type: 'cmd-model-create'; content: Mod.CmdModelCreateArgs }
77
+ | { type: 'cmd-model-update'; content: Mod.CmdModelUpdateArgs }
78
+ | { type: 'cmd-model-dispose'; content: Mod.CmdModelDisposeArgs }
79
+ | { type: 'cmd-light-create'; content: Lite.CmdLightCreateArgs }
80
+ | { type: 'cmd-light-update'; content: Lite.CmdLightUpdateArgs }
81
+ | { type: 'cmd-light-dispose'; content: Lite.CmdLightDisposeArgs }
82
+ | { type: 'cmd-material-create'; content: Mat.CmdMaterialCreateArgs }
83
+ | { type: 'cmd-material-update'; content: Mat.CmdMaterialUpdateArgs }
84
+ | { type: 'cmd-material-dispose'; content: Mat.CmdMaterialDisposeArgs }
85
+ | {
86
+ type: 'cmd-texture-create-from-buffer';
87
+ content: Tex.CmdTextureCreateFromBufferArgs;
88
+ }
89
+ | {
90
+ type: 'cmd-texture-create-solid-color';
91
+ content: Tex.CmdTextureCreateSolidColorArgs;
92
+ }
93
+ | { type: 'cmd-texture-dispose'; content: Tex.CmdTextureDisposeArgs }
94
+ | { type: 'cmd-geometry-create'; content: Geo.CmdGeometryCreateArgs }
95
+ | { type: 'cmd-geometry-update'; content: Geo.CmdGeometryUpdateArgs }
96
+ | { type: 'cmd-geometry-dispose'; content: Geo.CmdGeometryDisposeArgs }
97
+ | {
98
+ type: 'cmd-primitive-geometry-create';
99
+ content: Geo.CmdPrimitiveGeometryCreateArgs;
100
+ }
101
+ | { type: 'cmd-environment-create'; content: Env.CmdEnvironmentCreateArgs }
102
+ | { type: 'cmd-environment-update'; content: Env.CmdEnvironmentUpdateArgs }
103
+ | { type: 'cmd-environment-dispose'; content: Env.CmdEnvironmentDisposeArgs }
104
+ | { type: 'cmd-shadow-configure'; content: Shad.CmdShadowConfigureArgs }
105
+ | { type: 'cmd-model-list'; content: Mod.CmdModelListArgs }
106
+ | { type: 'cmd-material-list'; content: Mat.CmdMaterialListArgs }
107
+ | { type: 'cmd-texture-list'; content: Tex.CmdTextureListArgs }
108
+ | { type: 'cmd-geometry-list'; content: Geo.CmdGeometryListArgs }
109
+ | { type: 'cmd-light-list'; content: Lite.CmdLightListArgs }
110
+ | { type: 'cmd-camera-list'; content: Cam.CmdCameraListArgs }
111
+ | { type: 'cmd-gizmo-draw-line'; content: Giz.CmdGizmoDrawLineArgs }
112
+ | { type: 'cmd-gizmo-draw-aabb'; content: Giz.CmdGizmoDrawAabbArgs };
113
+
114
+ /** Discriminated union of all core command responses. */
115
+ export type CommandResponse =
116
+ | { type: 'notification-send'; content: Sys.CmdResultNotificationSend }
117
+ | { type: 'window-create'; content: Win.CmdResultWindowCreate }
118
+ | { type: 'window-close'; content: Win.CmdResultWindowClose }
119
+ | { type: 'window-set-title'; content: Win.CmdResultWindowSetTitle }
120
+ | { type: 'window-set-position'; content: Win.CmdResultWindowSetPosition }
121
+ | { type: 'window-get-position'; content: Win.CmdResultWindowGetPosition }
122
+ | { type: 'window-set-size'; content: Win.CmdResultWindowSetSize }
123
+ | { type: 'window-get-size'; content: Win.CmdResultWindowGetSize }
124
+ | { type: 'window-get-outer-size'; content: Win.CmdResultWindowGetOuterSize }
125
+ | {
126
+ type: 'window-get-surface-size';
127
+ content: Win.CmdResultWindowGetSurfaceSize;
128
+ }
129
+ | { type: 'window-set-state'; content: Win.CmdResultWindowSetState }
130
+ | { type: 'window-get-state'; content: Win.CmdResultWindowGetState }
131
+ | { type: 'window-set-icon'; content: Win.CmdResultWindowSetIcon }
132
+ | {
133
+ type: 'window-set-decorations';
134
+ content: Win.CmdResultWindowSetDecorations;
135
+ }
136
+ | {
137
+ type: 'window-has-decorations';
138
+ content: Win.CmdResultWindowHasDecorations;
139
+ }
140
+ | { type: 'window-set-resizable'; content: Win.CmdResultWindowSetResizable }
141
+ | { type: 'window-is-resizable'; content: Win.CmdResultWindowIsResizable }
142
+ | {
143
+ type: 'window-request-attention';
144
+ content: Win.CmdResultWindowRequestAttention;
145
+ }
146
+ | { type: 'window-focus'; content: Win.CmdResultWindowFocus }
147
+ | {
148
+ type: 'window-set-cursor-visible';
149
+ content: Win.CmdResultWindowSetCursorVisible;
150
+ }
151
+ | {
152
+ type: 'window-set-cursor-grab';
153
+ content: Win.CmdResultWindowSetCursorGrab;
154
+ }
155
+ | {
156
+ type: 'window-set-cursor-icon';
157
+ content: Win.CmdResultWindowSetCursorIcon;
158
+ }
159
+ | { type: 'camera-create'; content: Cam.CmdResultCameraCreate }
160
+ | { type: 'camera-update'; content: Cam.CmdResultCameraUpdate }
161
+ | { type: 'camera-dispose'; content: Cam.CmdResultCameraDispose }
162
+ | { type: 'model-create'; content: Mod.CmdResultModelCreate }
163
+ | { type: 'model-update'; content: Mod.CmdResultModelUpdate }
164
+ | { type: 'model-dispose'; content: Mod.CmdResultModelDispose }
165
+ | { type: 'light-create'; content: Lite.CmdResultLightCreate }
166
+ | { type: 'light-update'; content: Lite.CmdResultLightUpdate }
167
+ | { type: 'light-dispose'; content: Lite.CmdResultLightDispose }
168
+ | { type: 'material-create'; content: Mat.CmdResultMaterialCreate }
169
+ | { type: 'material-update'; content: Mat.CmdResultMaterialUpdate }
170
+ | { type: 'material-dispose'; content: Mat.CmdResultMaterialDispose }
171
+ | {
172
+ type: 'texture-create-from-buffer';
173
+ content: Tex.CmdResultTextureCreateFromBuffer;
174
+ }
175
+ | {
176
+ type: 'texture-create-solid-color';
177
+ content: Tex.CmdResultTextureCreateSolidColor;
178
+ }
179
+ | { type: 'texture-dispose'; content: Tex.CmdResultTextureDispose }
180
+ | { type: 'geometry-create'; content: Geo.CmdResultGeometryCreate }
181
+ | { type: 'geometry-update'; content: Geo.CmdResultGeometryUpdate }
182
+ | { type: 'geometry-dispose'; content: Geo.CmdResultGeometryDispose }
183
+ | {
184
+ type: 'primitive-geometry-create';
185
+ content: Geo.CmdResultPrimitiveGeometryCreate;
186
+ }
187
+ | { type: 'environment-create'; content: Env.CmdResultEnvironment }
188
+ | { type: 'environment-update'; content: Env.CmdResultEnvironment }
189
+ | { type: 'environment-dispose'; content: Env.CmdResultEnvironment }
190
+ | { type: 'shadow-configure'; content: Shad.CmdResultShadowConfigure }
191
+ | { type: 'model-list'; content: Mod.CmdResultModelList }
192
+ | { type: 'material-list'; content: Mat.CmdResultMaterialList }
193
+ | { type: 'texture-list'; content: Tex.CmdResultTextureList }
194
+ | { type: 'geometry-list'; content: Geo.CmdResultGeometryList }
195
+ | { type: 'light-list'; content: Lite.CmdResultLightList }
196
+ | { type: 'camera-list'; content: Cam.CmdResultCameraList }
197
+ | { type: 'gizmo-draw-line'; content: Giz.CmdResultGizmoDraw }
198
+ | { type: 'gizmo-draw-aabb'; content: Giz.CmdResultGizmoDraw };
199
+
200
+ /** Envelope used when batching commands to the core. */
201
+ export interface EngineCmdEnvelope {
202
+ id: number;
203
+ type: EngineCmd['type'];
204
+ content: EngineCmd['content'];
205
+ }
206
+
207
+ /** Envelope used when decoding responses from the core. */
208
+ export interface CommandResponseEnvelope {
209
+ id: number;
210
+ type: CommandResponse['type'];
211
+ content: CommandResponse['content'];
212
+ }
213
+
214
+ /** Batch of commands sent in a single tick. */
215
+ export type EngineBatchCmds = EngineCmdEnvelope[];
216
+
217
+ /** Batch of responses received from the core. */
218
+ export type EngineBatchResponses = CommandResponseEnvelope[];
219
+
220
+ /** Result codes returned by core entrypoints. */
221
+ export enum VulframResult {
222
+ Success = 0,
223
+ UnknownError = 1,
224
+ NotInitialized = 2,
225
+ AlreadyInitialized = 3,
226
+ WrongThread = 4,
227
+ CmdInvalidMessagePackError = 5,
228
+ BufferNotFound = 6,
229
+ BufferIdCollision = 7,
230
+ InvalidUploadType = 8,
231
+ }
@@ -0,0 +1,69 @@
1
+ import type { LightKind } from '../kinds';
2
+
3
+ /** Command payload for creating a light. */
4
+ export interface CmdLightCreateArgs {
5
+ windowId: number;
6
+ lightId: number;
7
+ label?: string;
8
+ kind?: LightKind;
9
+ position?: [number, number, number, number]; // Vec4
10
+ direction?: [number, number, number, number]; // Vec4
11
+ color?: [number, number, number, number]; // Vec4
12
+ groundColor?: [number, number, number, number]; // Vec4
13
+ intensity?: number;
14
+ range?: number;
15
+ spotInnerOuter?: [number, number]; // Vec2
16
+ layerMask: number;
17
+ castShadow?: boolean;
18
+ }
19
+
20
+ /** Result payload for light create. */
21
+ export interface CmdResultLightCreate {
22
+ success: boolean;
23
+ message: string;
24
+ }
25
+
26
+ /** Command payload for updating a light. */
27
+ export interface CmdLightUpdateArgs {
28
+ windowId: number;
29
+ lightId: number;
30
+ label?: string;
31
+ kind?: LightKind;
32
+ position?: [number, number, number, number];
33
+ direction?: [number, number, number, number];
34
+ color?: [number, number, number, number];
35
+ groundColor?: [number, number, number, number];
36
+ intensity?: number;
37
+ range?: number;
38
+ spotInnerOuter?: [number, number];
39
+ layerMask?: number;
40
+ castShadow?: boolean;
41
+ }
42
+
43
+ /** Result payload for light update. */
44
+ export interface CmdResultLightUpdate {
45
+ success: boolean;
46
+ message: string;
47
+ }
48
+
49
+ /** Command payload for disposing a light. */
50
+ export interface CmdLightDisposeArgs {
51
+ windowId: number;
52
+ lightId: number;
53
+ }
54
+
55
+ /** Result payload for light dispose. */
56
+ export interface CmdResultLightDispose {
57
+ success: boolean;
58
+ message: string;
59
+ }
60
+
61
+ /** Command payload for listing lights. */
62
+ export interface CmdLightListArgs {}
63
+
64
+ /** Result payload for light list. */
65
+ export interface CmdResultLightList {
66
+ success: boolean;
67
+ message: string;
68
+ content: number[]; // List of light IDs
69
+ }
@@ -0,0 +1,98 @@
1
+ import type { MaterialKind, TransparencyMode, SamplerMode } from '../kinds';
2
+
3
+ /** Standard material options. */
4
+ export interface StandardOptions {
5
+ baseColor: [number, number, number, number];
6
+ surfaceType: TransparencyMode;
7
+ specColor?: [number, number, number, number] | null;
8
+ specPower?: number | null;
9
+ baseTexId?: number | null;
10
+ baseSampler?: SamplerMode | null;
11
+ specTexId?: number | null;
12
+ specSampler?: SamplerMode | null;
13
+ normalTexId?: number | null;
14
+ normalSampler?: SamplerMode | null;
15
+ toonRampTexId?: number | null;
16
+ toonRampSampler?: SamplerMode | null;
17
+ flags: number;
18
+ toonParams?: [number, number, number, number] | null;
19
+ }
20
+
21
+ /** PBR material options. */
22
+ export interface PbrOptions {
23
+ baseColor: [number, number, number, number];
24
+ surfaceType: TransparencyMode;
25
+ emissiveColor: [number, number, number, number];
26
+ metallic: number;
27
+ roughness: number;
28
+ ao: number;
29
+ normalScale: number;
30
+ baseTexId: number;
31
+ baseSampler: SamplerMode;
32
+ normalTexId: number;
33
+ normalSampler: SamplerMode;
34
+ metallicRoughnessTexId: number;
35
+ metallicRoughnessSampler: SamplerMode;
36
+ emissiveTexId: number;
37
+ emissiveSampler: SamplerMode;
38
+ aoTexId: number;
39
+ aoSampler: SamplerMode;
40
+ flags: number;
41
+ }
42
+
43
+ /** Union of material option payloads. */
44
+ export type MaterialOptions =
45
+ | { type: 'standard'; content: StandardOptions }
46
+ | { type: 'pbr'; content: PbrOptions };
47
+
48
+ /** Command payload for creating a material. */
49
+ export interface CmdMaterialCreateArgs {
50
+ windowId: number;
51
+ materialId: number;
52
+ label?: string;
53
+ kind: MaterialKind;
54
+ options?: MaterialOptions;
55
+ }
56
+
57
+ /** Result payload for material create. */
58
+ export interface CmdResultMaterialCreate {
59
+ success: boolean;
60
+ message: string;
61
+ }
62
+
63
+ /** Command payload for updating a material. */
64
+ export interface CmdMaterialUpdateArgs {
65
+ windowId: number;
66
+ materialId: number;
67
+ label?: string;
68
+ kind?: MaterialKind;
69
+ options?: MaterialOptions;
70
+ }
71
+
72
+ /** Result payload for material update. */
73
+ export interface CmdResultMaterialUpdate {
74
+ success: boolean;
75
+ message: string;
76
+ }
77
+
78
+ /** Command payload for disposing a material. */
79
+ export interface CmdMaterialDisposeArgs {
80
+ windowId: number;
81
+ materialId: number;
82
+ }
83
+
84
+ /** Result payload for material dispose. */
85
+ export interface CmdResultMaterialDispose {
86
+ success: boolean;
87
+ message: string;
88
+ }
89
+
90
+ /** Command payload for listing materials. */
91
+ export interface CmdMaterialListArgs {}
92
+
93
+ /** Result payload for material list. */
94
+ export interface CmdResultMaterialList {
95
+ success: boolean;
96
+ message: string;
97
+ content: number[]; // List of material IDs
98
+ }
@@ -0,0 +1,59 @@
1
+ /** Command payload for creating a model. */
2
+ export interface CmdModelCreateArgs {
3
+ windowId: number ;
4
+ modelId: number ;
5
+ label?: string;
6
+ geometryId: number;
7
+ materialId?: number;
8
+ transform: number[]; // Mat4
9
+ layerMask: number;
10
+ castShadow: boolean;
11
+ receiveShadow: boolean;
12
+ }
13
+
14
+ /** Result payload for model create. */
15
+ export interface CmdResultModelCreate {
16
+ success: boolean;
17
+ message: string;
18
+ }
19
+
20
+ /** Command payload for updating a model. */
21
+ export interface CmdModelUpdateArgs {
22
+ windowId: number ;
23
+ modelId: number ;
24
+ label?: string;
25
+ geometryId?: number;
26
+ materialId?: number;
27
+ transform?: number[];
28
+ layerMask?: number;
29
+ castShadow?: boolean;
30
+ receiveShadow?: boolean;
31
+ }
32
+
33
+ /** Result payload for model update. */
34
+ export interface CmdResultModelUpdate {
35
+ success: boolean;
36
+ message: string;
37
+ }
38
+
39
+ /** Command payload for disposing a model. */
40
+ export interface CmdModelDisposeArgs {
41
+ windowId: number ;
42
+ modelId: number ;
43
+ }
44
+
45
+ /** Result payload for model dispose. */
46
+ export interface CmdResultModelDispose {
47
+ success: boolean;
48
+ message: string;
49
+ }
50
+
51
+ /** Command payload for listing models. */
52
+ export interface CmdModelListArgs {}
53
+
54
+ /** Result payload for model list. */
55
+ export interface CmdResultModelList {
56
+ success: boolean;
57
+ message: string;
58
+ content: number[]; // List of model IDs
59
+ }
@@ -0,0 +1,22 @@
1
+ /** Shadow rendering configuration. */
2
+ export interface ShadowConfig {
3
+ tileResolution: number;
4
+ atlasTilesW: number;
5
+ atlasTilesH: number;
6
+ atlasLayers: number;
7
+ virtualGridSize: number;
8
+ smoothing: number;
9
+ normalBias: number;
10
+ }
11
+
12
+ /** Command payload for shadow configuration. */
13
+ export interface CmdShadowConfigureArgs {
14
+ windowId: number;
15
+ config: ShadowConfig;
16
+ }
17
+
18
+ /** Result payload for shadow configuration. */
19
+ export interface CmdResultShadowConfigure {
20
+ success: boolean;
21
+ message: string;
22
+ }
@@ -0,0 +1,15 @@
1
+ import type { NotificationLevel } from '../kinds';
2
+
3
+ /** Command payload for sending a notification. */
4
+ export interface CmdNotificationSendArgs {
5
+ id?: string;
6
+ title: string;
7
+ body: string;
8
+ level: NotificationLevel;
9
+ timeout?: number;
10
+ }
11
+
12
+ /** Result payload for notification send. */
13
+ export interface CmdResultNotificationSend {
14
+ success: boolean;
15
+ }