lecodes-sdk 2.2.13 → 2.3.0

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 (48) hide show
  1. package/dist/global.d.ts +11 -0
  2. package/dist/types/gl/Scene.d.ts +0 -11
  3. package/dist/types/gl/postProcessing.d.ts +31 -2
  4. package/dist/types/inject.d.ts +3 -2
  5. package/dist/types/plugin.d.ts +3 -0
  6. package/dist/types/plugins/gen/push/sdk/push.d.ts +10 -3
  7. package/dist/types/plugins/gen/push/sdk/push.gen.d.ts +11 -3
  8. package/dist/types/runtime/device.d.ts +7 -19
  9. package/dist/types/runtime/pushSeam.d.ts +23 -0
  10. package/dist/types/runtime/rpc.d.ts +15 -1
  11. package/dist/types/server/auth/models.d.ts +13 -1
  12. package/dist/types/server/auth/types.d.ts +2 -0
  13. package/dist/types/server/inject.d.ts +1 -0
  14. package/dist/types/server/pushChannel.d.ts +79 -0
  15. package/dist/types/ui/UINode.d.ts +1 -1
  16. package/dist/types/version.d.ts +1 -1
  17. package/dist/types.json +1 -1
  18. package/package.json +1 -1
  19. package/src/animate/tween/Timeline.ts +175 -175
  20. package/src/bridges/gl.d.ts +5 -13
  21. package/src/compile/serverSplit.ts +29 -19
  22. package/src/compile/serverTypes.ts +1 -1
  23. package/src/gl/CameraPlace.ts +52 -52
  24. package/src/gl/Light.ts +257 -257
  25. package/src/gl/Mesh.ts +120 -120
  26. package/src/gl/Scene.ts +0 -13
  27. package/src/gl/animation/DynamicBone.ts +486 -486
  28. package/src/gl/postProcessing.ts +52 -9
  29. package/src/gl/scenarios.ts +291 -291
  30. package/src/inject.ts +3 -2
  31. package/src/plugin.ts +3 -0
  32. package/src/plugins/gen/push/contract.d.ts +24 -2
  33. package/src/plugins/gen/push/sdk/push.gen.ts +17 -5
  34. package/src/plugins/gen/push/sdk/push.ts +159 -55
  35. package/src/runtime/device.ts +8 -37
  36. package/src/runtime/pushSeam.ts +22 -0
  37. package/src/runtime/rpc.ts +35 -1
  38. package/src/server/auth/host.ts +40 -9
  39. package/src/server/auth/models.ts +5 -1
  40. package/src/server/auth/types.ts +2 -0
  41. package/src/server/host.ts +6 -0
  42. package/src/server/inject.ts +3 -2
  43. package/src/server/push/host.ts +143 -0
  44. package/src/server/pushChannel.ts +121 -0
  45. package/src/server/runtime.ts +20 -8
  46. package/src/ui/UIInput.ts +2 -2
  47. package/src/ui/UINode.ts +1 -1
  48. package/src/version.ts +1 -1
package/src/gl/Mesh.ts CHANGED
@@ -1,120 +1,120 @@
1
- // A renderable 3D node from raw geometry — the primitive shapes (box/sphere/cylinder/capsule/plane) and
2
- // Mesh.from for a custom Geometry. A GLB import is a different kind: see Model.load.
3
-
4
- import { cx, cy, cz, type Vec3Like } from "../math/vec"
5
- import {
6
- Geometry,
7
- type CapsuleOptions,
8
- type CylinderOptions,
9
- type PlaneOptions,
10
- type SphereOptions,
11
- } from "./Geometry"
12
- import { Material } from "./Material"
13
- import { Node } from "./Node"
14
-
15
- /** Common transform/render options every primitive factory accepts. */
16
- export type MeshOptions = {
17
- material?: Material
18
- position?: Vec3Like
19
- eulerAngles?: Vec3Like
20
- scale?: Vec3Like | number
21
- name?: string
22
- castShadows?: boolean
23
- receiveShadows?: boolean
24
- /** Coarse draw order, 0 (first) … 7 (last); default 4. See `Mesh.renderPriority`. */
25
- renderPriority?: number
26
- }
27
-
28
- export class Mesh extends Node {
29
- private _geometry?: Geometry
30
-
31
- constructor(geometry?: Geometry, material?: Material) {
32
- super()
33
- if (geometry) {
34
- const mat = material ?? Material.unlit()
35
- this._geometry = geometry
36
- this._materials = [ mat ]
37
- _creator.setMesh(this.id, Material.idOf(mat), geometry.vertices, geometry.normals, geometry.indices, geometry.uv, geometry._meshKind, geometry.uv1, geometry.colors)
38
- }
39
- }
40
-
41
- override get geometry(): Geometry | undefined { return this._geometry }
42
- /** Replace the geometry in place — the node, its transform and its material stay, the vertex and
43
- * index buffers are rebuilt. What an editor overlay or a debug drawer redraws with. */
44
- setGeometry(geometry: Geometry): this {
45
- this._geometry = geometry
46
- _creator.setMesh(this.id, Material.idOf(this._materials![0]!), geometry.vertices, geometry.normals, geometry.indices, geometry.uv, geometry._meshKind, geometry.uv1, geometry.colors)
47
- // the host rebuilds the renderable for a new geometry (creator-gl createMesh destroys + builds), which
48
- // resets its priority / culling / shadow flags to the defaults — an overlay redrawn every frame lost its
49
- // renderPriority 7 after one frame and hid inside the model. What was set on this mesh is set again.
50
- if (this._renderPriority !== undefined) this.renderPriority = this._renderPriority
51
- if (this._culling !== undefined) this.culling = this._culling
52
- if (this._castShadows !== undefined) this.castShadows = this._castShadows
53
- if (this._receiveShadows !== undefined) this.receiveShadows = this._receiveShadows
54
- return this
55
- }
56
- private _renderPriority?: number
57
- private _culling?: boolean
58
- private _castShadows?: boolean
59
- private _receiveShadows?: boolean
60
-
61
- /** A Mesh always carries a material (slot 0) — see Node.setMaterial for the slot API. */
62
- override get material(): Material { return this._materials![0]! }
63
- override set material(m: Material) { this.setMaterial(m, 0) }
64
-
65
- set culling(v: boolean) { this._culling = v; _creator.setCulling(this.id, v) }
66
- /** Coarse draw order within the frame: 0 draws first, 7 last, 4 is the default (Filament's
67
- * renderable priority; within one priority opaque draws sort front-to-back, blended back-to-front).
68
- * Something drawn over the scene with `Material.depthTest = false` goes in 7, so nothing drawn
69
- * after it can cover it. Write-only; a host that predates the call ignores it. */
70
- set renderPriority(v: number) {
71
- this._renderPriority = v
72
- if (_creator.setRenderPriority) _creator.setRenderPriority(this.id, Math.max(0, Math.min(7, Math.round(v))))
73
- else if (!Mesh._warnedPriority) { Mesh._warnedPriority = true; console.warn("[mesh] this host has no setRenderPriority — renderPriority ignored") }
74
- }
75
- private static _warnedPriority = false
76
- set castShadows(v: boolean) { this._castShadows = v; _creator.setCastShadows(this.id, v) }
77
- set receiveShadows(v: boolean) { this._receiveShadows = v; _creator.setReceiveShadows(this.id, v) }
78
-
79
- // --- factories ---
80
-
81
- static box(options: MeshOptions & { size?: Vec3Like | number } = {}): Mesh {
82
- // the size goes into the geometry (not a scale after): the lightmap chart is laid out per face area
83
- return apply(new Mesh(Geometry.box(options.size ?? 1), options.material), options)
84
- }
85
-
86
- static sphere(options: MeshOptions & SphereOptions = {}): Mesh {
87
- return apply(new Mesh(Geometry.sphere(options), options.material), options)
88
- }
89
-
90
- static cylinder(options: MeshOptions & CylinderOptions = {}): Mesh {
91
- return apply(new Mesh(Geometry.cylinder(options), options.material), options)
92
- }
93
-
94
- /** A capsule along Y (`radius`, `length` between the cap centres) — a character's or a collider's shape in one mesh. */
95
- static capsule(options: MeshOptions & CapsuleOptions = {}): Mesh {
96
- return apply(new Mesh(Geometry.capsule(options), options.material), options)
97
- }
98
-
99
- static plane(options: MeshOptions & PlaneOptions = {}): Mesh {
100
- return apply(new Mesh(Geometry.plane(options), options.material), options)
101
- }
102
-
103
- /** Wrap a custom Geometry. */
104
- static from(geometry: Geometry, options: MeshOptions = {}): Mesh {
105
- return apply(new Mesh(geometry, options.material), options)
106
- }
107
- }
108
-
109
- const sizeToVec = (s: Vec3Like | number): [number, number, number] => (typeof s === "number" ? [ s, s, s ] : [ cx(s), cy(s), cz(s) ])
110
-
111
- const apply = (mesh: Mesh, o: MeshOptions): Mesh => {
112
- if (o.position) mesh.position = o.position
113
- if (o.eulerAngles) mesh.eulerAngles = o.eulerAngles
114
- if (o.scale !== undefined) mesh.scale = typeof o.scale === "number" ? [ o.scale, o.scale, o.scale ] : o.scale
115
- if (o.name !== undefined) mesh.name = o.name
116
- if (o.castShadows !== undefined) mesh.castShadows = o.castShadows
117
- if (o.receiveShadows !== undefined) mesh.receiveShadows = o.receiveShadows
118
- if (o.renderPriority !== undefined) mesh.renderPriority = o.renderPriority
119
- return mesh
120
- }
1
+ // A renderable 3D node from raw geometry — the primitive shapes (box/sphere/cylinder/capsule/plane) and
2
+ // Mesh.from for a custom Geometry. A GLB import is a different kind: see Model.load.
3
+
4
+ import { cx, cy, cz, type Vec3Like } from "../math/vec"
5
+ import {
6
+ Geometry,
7
+ type CapsuleOptions,
8
+ type CylinderOptions,
9
+ type PlaneOptions,
10
+ type SphereOptions,
11
+ } from "./Geometry"
12
+ import { Material } from "./Material"
13
+ import { Node } from "./Node"
14
+
15
+ /** Common transform/render options every primitive factory accepts. */
16
+ export type MeshOptions = {
17
+ material?: Material
18
+ position?: Vec3Like
19
+ eulerAngles?: Vec3Like
20
+ scale?: Vec3Like | number
21
+ name?: string
22
+ castShadows?: boolean
23
+ receiveShadows?: boolean
24
+ /** Coarse draw order, 0 (first) … 7 (last); default 4. See `Mesh.renderPriority`. */
25
+ renderPriority?: number
26
+ }
27
+
28
+ export class Mesh extends Node {
29
+ private _geometry?: Geometry
30
+
31
+ constructor(geometry?: Geometry, material?: Material) {
32
+ super()
33
+ if (geometry) {
34
+ const mat = material ?? Material.unlit()
35
+ this._geometry = geometry
36
+ this._materials = [ mat ]
37
+ _creator.setMesh(this.id, Material.idOf(mat), geometry.vertices, geometry.normals, geometry.indices, geometry.uv, geometry._meshKind, geometry.uv1, geometry.colors)
38
+ }
39
+ }
40
+
41
+ override get geometry(): Geometry | undefined { return this._geometry }
42
+ /** Replace the geometry in place — the node, its transform and its material stay, the vertex and
43
+ * index buffers are rebuilt. What an editor overlay or a debug drawer redraws with. */
44
+ setGeometry(geometry: Geometry): this {
45
+ this._geometry = geometry
46
+ _creator.setMesh(this.id, Material.idOf(this._materials![0]!), geometry.vertices, geometry.normals, geometry.indices, geometry.uv, geometry._meshKind, geometry.uv1, geometry.colors)
47
+ // the host rebuilds the renderable for a new geometry (creator-gl createMesh destroys + builds), which
48
+ // resets its priority / culling / shadow flags to the defaults — an overlay redrawn every frame lost its
49
+ // renderPriority 7 after one frame and hid inside the model. What was set on this mesh is set again.
50
+ if (this._renderPriority !== undefined) this.renderPriority = this._renderPriority
51
+ if (this._culling !== undefined) this.culling = this._culling
52
+ if (this._castShadows !== undefined) this.castShadows = this._castShadows
53
+ if (this._receiveShadows !== undefined) this.receiveShadows = this._receiveShadows
54
+ return this
55
+ }
56
+ private _renderPriority?: number
57
+ private _culling?: boolean
58
+ private _castShadows?: boolean
59
+ private _receiveShadows?: boolean
60
+
61
+ /** A Mesh always carries a material (slot 0) — see Node.setMaterial for the slot API. */
62
+ override get material(): Material { return this._materials![0]! }
63
+ override set material(m: Material) { this.setMaterial(m, 0) }
64
+
65
+ set culling(v: boolean) { this._culling = v; _creator.setCulling(this.id, v) }
66
+ /** Coarse draw order within the frame: 0 draws first, 7 last, 4 is the default (Filament's
67
+ * renderable priority; within one priority opaque draws sort front-to-back, blended back-to-front).
68
+ * Something drawn over the scene with `Material.depthTest = false` goes in 7, so nothing drawn
69
+ * after it can cover it. Write-only; a host that predates the call ignores it. */
70
+ set renderPriority(v: number) {
71
+ this._renderPriority = v
72
+ if (_creator.setRenderPriority) _creator.setRenderPriority(this.id, Math.max(0, Math.min(7, Math.round(v))))
73
+ else if (!Mesh._warnedPriority) { Mesh._warnedPriority = true; console.warn("[mesh] this host has no setRenderPriority — renderPriority ignored") }
74
+ }
75
+ private static _warnedPriority = false
76
+ set castShadows(v: boolean) { this._castShadows = v; _creator.setCastShadows(this.id, v) }
77
+ set receiveShadows(v: boolean) { this._receiveShadows = v; _creator.setReceiveShadows(this.id, v) }
78
+
79
+ // --- factories ---
80
+
81
+ static box(options: MeshOptions & { size?: Vec3Like | number } = {}): Mesh {
82
+ // the size goes into the geometry (not a scale after): the lightmap chart is laid out per face area
83
+ return apply(new Mesh(Geometry.box(options.size ?? 1), options.material), options)
84
+ }
85
+
86
+ static sphere(options: MeshOptions & SphereOptions = {}): Mesh {
87
+ return apply(new Mesh(Geometry.sphere(options), options.material), options)
88
+ }
89
+
90
+ static cylinder(options: MeshOptions & CylinderOptions = {}): Mesh {
91
+ return apply(new Mesh(Geometry.cylinder(options), options.material), options)
92
+ }
93
+
94
+ /** A capsule along Y (`radius`, `length` between the cap centres) — a character's or a collider's shape in one mesh. */
95
+ static capsule(options: MeshOptions & CapsuleOptions = {}): Mesh {
96
+ return apply(new Mesh(Geometry.capsule(options), options.material), options)
97
+ }
98
+
99
+ static plane(options: MeshOptions & PlaneOptions = {}): Mesh {
100
+ return apply(new Mesh(Geometry.plane(options), options.material), options)
101
+ }
102
+
103
+ /** Wrap a custom Geometry. */
104
+ static from(geometry: Geometry, options: MeshOptions = {}): Mesh {
105
+ return apply(new Mesh(geometry, options.material), options)
106
+ }
107
+ }
108
+
109
+ const sizeToVec = (s: Vec3Like | number): [number, number, number] => (typeof s === "number" ? [ s, s, s ] : [ cx(s), cy(s), cz(s) ])
110
+
111
+ const apply = (mesh: Mesh, o: MeshOptions): Mesh => {
112
+ if (o.position) mesh.position = o.position
113
+ if (o.eulerAngles) mesh.eulerAngles = o.eulerAngles
114
+ if (o.scale !== undefined) mesh.scale = typeof o.scale === "number" ? [ o.scale, o.scale, o.scale ] : o.scale
115
+ if (o.name !== undefined) mesh.name = o.name
116
+ if (o.castShadows !== undefined) mesh.castShadows = o.castShadows
117
+ if (o.receiveShadows !== undefined) mesh.receiveShadows = o.receiveShadows
118
+ if (o.renderPriority !== undefined) mesh.renderPriority = o.renderPriority
119
+ return mesh
120
+ }
package/src/gl/Scene.ts CHANGED
@@ -12,7 +12,6 @@ import { _bumpNavEpoch, _setCurrent, Presentable, type DestTuple, type DismissOp
12
12
  import { _transitionId, TRANSITION_NONE } from "../ui/transitions"
13
13
  import { TREE_DEST_SCENE3D, TREE_FLAG_BACK, ensureEmitter, registerDest, unregisterDest } from "../ui/tree"
14
14
  import { _surfaceWidgets, type LayerElement, type WidgetSet } from "../ui/UILayer"
15
- import { device } from "../runtime/device"
16
15
  import { File } from "../runtime/fetch"
17
16
  import type { ClickEvent, TouchStartEvent } from "../runtime/touch"
18
17
  import { Camera } from "./Camera"
@@ -142,14 +141,6 @@ export type SceneOptions = {
142
141
  * loses its top mip levels on load, a glTF image is downsampled. Applied before this scene's
143
142
  * assets load; like `anisotropy` it does not touch textures already loaded. */
144
143
  maxTextureSize?: number
145
- /** The look on an HDR display (a screen with headroom above SDR white — Apple XDR panels, the
146
- * macOS host today); ignored on SDR. `strength` 0..1 is how much of the picture reaches for the
147
- * display's headroom (0 only what SDR clipped, 1 nearly everything; default 0.35). `paperWhite`
148
- * 1..8 is where white lands as a multiple of SDR white — the "HDR brightness" of a console
149
- * calibration screen, where 1.5–2 is the norm; default 1 keeps a white wall at the UI's white,
150
- * faithful but dim next to what "HDR on" is expected to look like. Engine-wide like `anisotropy`;
151
- * `device.hdr` is the runtime form and tells you whether the display has any headroom at all. */
152
- hdr?: { strength?: number; paperWhite?: number }
153
144
  }
154
145
 
155
146
  // Route aspect update(dt) through the render-synced native phases (render() early = before physics,
@@ -253,10 +244,6 @@ export class Scene implements Presentable {
253
244
  // place by the time assets bind their samplers.
254
245
  if (options.anisotropy !== undefined) Texture.anisotropy = options.anisotropy
255
246
  if (options.maxTextureSize !== undefined) Texture.maxSize = options.maxTextureSize
256
- if (options.hdr) {
257
- if (options.hdr.strength !== undefined) device.hdr.strength = options.hdr.strength
258
- if (options.hdr.paperWhite !== undefined) device.hdr.paperWhite = options.hdr.paperWhite
259
- }
260
247
  if (options.renderScale !== undefined || options.dynamicResolution) {
261
248
  this.setRenderOptions(options.renderScale ?? 1, options.dynamicResolution ?? false)
262
249
  }