@fps-games/engine 0.0.1-beta.2 → 0.0.1-beta.4

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.
@@ -0,0 +1,25 @@
1
+ import { Camera } from '@babylonjs/core/Cameras/camera.js';
2
+ import type { Scene } from '@babylonjs/core/scene.js';
3
+ import { type FpsCameraProjectionSnapshot } from '../camera.js';
4
+ export interface FpsBabylonCameraRegistration {
5
+ dispose(): void;
6
+ }
7
+ export interface FpsBabylonCameraResource<TCamera extends Camera = Camera> {
8
+ readonly camera: TCamera;
9
+ isDisposed(): boolean;
10
+ dispose(): void;
11
+ }
12
+ export interface CreateFpsBabylonCameraResourceOptions<TCamera extends Camera> {
13
+ readonly scene: Scene;
14
+ readonly camera: TCamera;
15
+ readonly registration?: FpsBabylonCameraRegistration | null;
16
+ }
17
+ /**
18
+ * Transfers an already-created Camera and its renderer registration to one
19
+ * retryable owner. Project policy still decides camera type, active-camera
20
+ * routing and when the resource is created.
21
+ */
22
+ export declare function createFpsBabylonCameraResource<TCamera extends Camera>(options: CreateFpsBabylonCameraResourceOptions<TCamera>): FpsBabylonCameraResource<TCamera>;
23
+ export declare function applyFpsBabylonCameraProjection(camera: Camera, value: unknown, path?: string): Readonly<FpsCameraProjectionSnapshot>;
24
+ export declare function resizeFpsBabylonCameraProjection(camera: Camera, value: unknown, path?: string): Readonly<FpsCameraProjectionSnapshot>;
25
+ //# sourceMappingURL=camera.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../../src/babylon/camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAEL,KAAK,2BAA2B,EACjC,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,4BAA4B;IAC3C,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,wBAAwB,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM;IACvE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,UAAU,IAAI,OAAO,CAAC;IACtB,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,qCAAqC,CAAC,OAAO,SAAS,MAAM;IAC3E,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,CAAC,EAAE,4BAA4B,GAAG,IAAI,CAAC;CAC7D;AAED;;;;GAIG;AACH,wBAAgB,8BAA8B,CAAC,OAAO,SAAS,MAAM,EACnE,OAAO,EAAE,qCAAqC,CAAC,OAAO,CAAC,GACtD,wBAAwB,CAAC,OAAO,CAAC,CAuCnC;AAED,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,EACd,IAAI,SAAuB,GAC1B,QAAQ,CAAC,2BAA2B,CAAC,CAuBvC;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,EACd,IAAI,SAAuB,GAC1B,QAAQ,CAAC,2BAA2B,CAAC,CAkBvC"}
@@ -0,0 +1,149 @@
1
+ import { Camera } from '@babylonjs/core/Cameras/camera.js';
2
+ import { createFpsCameraProjectionSnapshot, } from '../camera.js';
3
+ /**
4
+ * Transfers an already-created Camera and its renderer registration to one
5
+ * retryable owner. Project policy still decides camera type, active-camera
6
+ * routing and when the resource is created.
7
+ */
8
+ export function createFpsBabylonCameraResource(options) {
9
+ const { camera, scene } = options;
10
+ if (!camera || typeof camera.getScene !== 'function' || camera.getScene() !== scene) {
11
+ throw Object.assign(new Error('Babylon Camera resource belongs to a different Scene.'), { code: 'camera.resource.sceneMismatch' });
12
+ }
13
+ if (camera.isDisposed()) {
14
+ throw Object.assign(new Error('Babylon Camera resource is already disposed.'), { code: 'camera.resource.alreadyDisposed' });
15
+ }
16
+ if (options.registration && typeof options.registration.dispose !== 'function') {
17
+ throw Object.assign(new Error('Babylon Camera registration must provide dispose().'), { code: 'camera.resource.registrationInvalid' });
18
+ }
19
+ let registration = options.registration ?? null;
20
+ let disposed = false;
21
+ return Object.freeze({
22
+ camera,
23
+ isDisposed() {
24
+ return disposed;
25
+ },
26
+ dispose() {
27
+ if (disposed)
28
+ return;
29
+ if (registration) {
30
+ registration.dispose();
31
+ registration = null;
32
+ }
33
+ camera.dispose();
34
+ disposed = true;
35
+ },
36
+ });
37
+ }
38
+ export function applyFpsBabylonCameraProjection(camera, value, path = '$.cameraProjection') {
39
+ const snapshot = createFpsCameraProjectionSnapshot(value, path);
40
+ const previous = captureProjectionState(camera);
41
+ try {
42
+ camera.minZ = snapshot.minZ;
43
+ camera.maxZ = snapshot.maxZ;
44
+ camera.fov = snapshot.fov;
45
+ camera.mode = snapshot.projection === 'perspective'
46
+ ? Camera.PERSPECTIVE_CAMERA
47
+ : Camera.ORTHOGRAPHIC_CAMERA;
48
+ applyOrthographicExtents(camera, snapshot);
49
+ camera.getProjectionMatrix(true);
50
+ return snapshot;
51
+ }
52
+ catch (error) {
53
+ const cleanupErrors = [];
54
+ try {
55
+ restoreProjectionState(camera, previous);
56
+ camera.getProjectionMatrix(true);
57
+ }
58
+ catch (cleanupError) {
59
+ cleanupErrors.push(cleanupError);
60
+ }
61
+ throw addFailureMetadata(error, 'Babylon Camera projection apply failed.', cleanupErrors);
62
+ }
63
+ }
64
+ export function resizeFpsBabylonCameraProjection(camera, value, path = '$.cameraProjection') {
65
+ const snapshot = createFpsCameraProjectionSnapshot(value, path);
66
+ if (snapshot.projection !== 'orthographic')
67
+ return snapshot;
68
+ const previous = captureOrthographicExtents(camera);
69
+ try {
70
+ applyOrthographicExtents(camera, snapshot);
71
+ camera.getProjectionMatrix(true);
72
+ return snapshot;
73
+ }
74
+ catch (error) {
75
+ const cleanupErrors = [];
76
+ try {
77
+ restoreOrthographicExtents(camera, previous);
78
+ camera.getProjectionMatrix(true);
79
+ }
80
+ catch (cleanupError) {
81
+ cleanupErrors.push(cleanupError);
82
+ }
83
+ throw addFailureMetadata(error, 'Babylon Camera projection resize failed.', cleanupErrors);
84
+ }
85
+ }
86
+ function applyOrthographicExtents(camera, snapshot) {
87
+ if (snapshot.projection !== 'orthographic')
88
+ return;
89
+ const engine = camera.getScene().getEngine();
90
+ const width = readPositiveDimension(engine.getRenderWidth());
91
+ const height = readPositiveDimension(engine.getRenderHeight());
92
+ const halfHeight = snapshot.orthoSize;
93
+ const halfWidth = halfHeight * (width / height);
94
+ camera.orthoLeft = -halfWidth;
95
+ camera.orthoRight = halfWidth;
96
+ camera.orthoBottom = -halfHeight;
97
+ camera.orthoTop = halfHeight;
98
+ }
99
+ function captureProjectionState(camera) {
100
+ return {
101
+ mode: camera.mode,
102
+ fov: camera.fov,
103
+ minZ: camera.minZ,
104
+ maxZ: camera.maxZ,
105
+ ...captureOrthographicExtents(camera),
106
+ };
107
+ }
108
+ function restoreProjectionState(camera, state) {
109
+ camera.mode = state.mode;
110
+ camera.fov = state.fov;
111
+ camera.minZ = state.minZ;
112
+ camera.maxZ = state.maxZ;
113
+ restoreOrthographicExtents(camera, state);
114
+ }
115
+ function captureOrthographicExtents(camera) {
116
+ return {
117
+ orthoLeft: camera.orthoLeft,
118
+ orthoRight: camera.orthoRight,
119
+ orthoTop: camera.orthoTop,
120
+ orthoBottom: camera.orthoBottom,
121
+ };
122
+ }
123
+ function restoreOrthographicExtents(camera, state) {
124
+ camera.orthoLeft = state.orthoLeft;
125
+ camera.orthoRight = state.orthoRight;
126
+ camera.orthoTop = state.orthoTop;
127
+ camera.orthoBottom = state.orthoBottom;
128
+ }
129
+ function readPositiveDimension(value) {
130
+ return Number.isFinite(value) && value > 0 ? value : 1;
131
+ }
132
+ function addFailureMetadata(failure, fallbackMessage, cleanupErrors) {
133
+ if (cleanupErrors.length === 0)
134
+ return failure;
135
+ if (failure && (typeof failure === 'object' || typeof failure === 'function')) {
136
+ try {
137
+ Object.assign(failure, { cleanupErrors: Object.freeze([...cleanupErrors]) });
138
+ return failure;
139
+ }
140
+ catch {
141
+ // Fall through to a wrapper when the original error is immutable.
142
+ }
143
+ }
144
+ return Object.assign(new Error(fallbackMessage), {
145
+ cause: failure,
146
+ cleanupErrors: Object.freeze([...cleanupErrors]),
147
+ });
148
+ }
149
+ //# sourceMappingURL=camera.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera.js","sourceRoot":"","sources":["../../src/babylon/camera.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Engine } from '@babylonjs/core/Engines/engine.js';
2
+ import { type FpsFrameClock, type FpsFrameClockOptions, type FpsFrameContext } from '../frame.js';
3
+ export interface CreateFpsBabylonFramePumpOptions {
4
+ readonly engine: Engine;
5
+ readonly onFrame: (frame: Readonly<FpsFrameContext>) => void;
6
+ readonly clock?: FpsFrameClock;
7
+ readonly clockOptions?: FpsFrameClockOptions;
8
+ readonly now?: () => number;
9
+ }
10
+ export interface FpsBabylonFramePump {
11
+ readonly clock: FpsFrameClock;
12
+ isRunning(): boolean;
13
+ isDisposed(): boolean;
14
+ start(): void;
15
+ stop(): void;
16
+ dispose(): void;
17
+ }
18
+ /**
19
+ * Owns only Babylon's outer runRenderLoop registration and frame timing.
20
+ *
21
+ * The callback remains the composition boundary: it can drive the shared
22
+ * Runtime Plugin scheduler, project gameplay, cleanup and Scene rendering in
23
+ * the order selected by the project. The pump does not introduce a competing
24
+ * phase scheduler and does not own the Engine or Scene.
25
+ */
26
+ export declare function createFpsBabylonFramePump(options: CreateFpsBabylonFramePumpOptions): FpsBabylonFramePump;
27
+ //# sourceMappingURL=frame-pump.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-pump.d.ts","sourceRoot":"","sources":["../../src/babylon/frame-pump.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mCAAmC,CAAC;AAChE,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,eAAe,CAAC,KAAK,IAAI,CAAC;IAC7D,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,YAAY,CAAC,EAAE,oBAAoB,CAAC;IAC7C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,SAAS,IAAI,OAAO,CAAC;IACrB,UAAU,IAAI,OAAO,CAAC;IACtB,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gCAAgC,GACxC,mBAAmB,CAqDrB"}
@@ -0,0 +1,90 @@
1
+ import { createFpsFrameClock, } from '../frame.js';
2
+ /**
3
+ * Owns only Babylon's outer runRenderLoop registration and frame timing.
4
+ *
5
+ * The callback remains the composition boundary: it can drive the shared
6
+ * Runtime Plugin scheduler, project gameplay, cleanup and Scene rendering in
7
+ * the order selected by the project. The pump does not introduce a competing
8
+ * phase scheduler and does not own the Engine or Scene.
9
+ */
10
+ export function createFpsBabylonFramePump(options) {
11
+ assertOptions(options);
12
+ if (options.clock && options.clockOptions) {
13
+ throw new Error('Babylon Frame Pump accepts either clock or clockOptions, not both.');
14
+ }
15
+ const clock = options.clock ?? createFpsFrameClock(options.clockOptions);
16
+ const now = options.now ?? readNowMs;
17
+ let running = false;
18
+ let disposed = false;
19
+ const renderLoop = () => {
20
+ if (!running)
21
+ return;
22
+ options.onFrame(clock.beginFrame(now()));
23
+ };
24
+ return Object.freeze({
25
+ clock,
26
+ isRunning() {
27
+ return running;
28
+ },
29
+ isDisposed() {
30
+ return disposed;
31
+ },
32
+ start() {
33
+ assertOpen(disposed);
34
+ if (running)
35
+ return;
36
+ clock.resetTime();
37
+ running = true;
38
+ try {
39
+ options.engine.runRenderLoop(renderLoop);
40
+ }
41
+ catch (error) {
42
+ running = false;
43
+ clock.resetTime();
44
+ throw error;
45
+ }
46
+ },
47
+ stop() {
48
+ if (!running)
49
+ return;
50
+ options.engine.stopRenderLoop(renderLoop);
51
+ running = false;
52
+ clock.resetTime();
53
+ },
54
+ dispose() {
55
+ if (disposed)
56
+ return;
57
+ if (running) {
58
+ options.engine.stopRenderLoop(renderLoop);
59
+ running = false;
60
+ clock.resetTime();
61
+ }
62
+ disposed = true;
63
+ },
64
+ });
65
+ }
66
+ function assertOptions(options) {
67
+ if (!options || typeof options !== 'object') {
68
+ throw new Error('Babylon Frame Pump options are required.');
69
+ }
70
+ if (!options.engine
71
+ || typeof options.engine.runRenderLoop !== 'function'
72
+ || typeof options.engine.stopRenderLoop !== 'function') {
73
+ throw new Error('Babylon Frame Pump requires an Engine.');
74
+ }
75
+ if (typeof options.onFrame !== 'function') {
76
+ throw new Error('Babylon Frame Pump onFrame callback is required.');
77
+ }
78
+ if (options.now !== undefined && typeof options.now !== 'function') {
79
+ throw new Error('Babylon Frame Pump now must be a function.');
80
+ }
81
+ }
82
+ function assertOpen(disposed) {
83
+ if (disposed)
84
+ throw new Error('Babylon Frame Pump is disposed.');
85
+ }
86
+ function readNowMs() {
87
+ const hostPerformance = globalThis.performance;
88
+ return hostPerformance ? hostPerformance.now() : Date.now();
89
+ }
90
+ //# sourceMappingURL=frame-pump.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame-pump.js","sourceRoot":"","sources":["../../src/babylon/frame-pump.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"lighting-controller.d.ts","sourceRoot":"","sources":["../../src/babylon/lighting-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAG9E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,2BAA2B,EACjC,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AACzE,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAE5E,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,CAAC,QAAQ,EAAE,2BAA2B,GAAG,QAAQ,CAAC,6BAA6B,CAAC,CAAC;IAC1F,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAAC;IACxD,sEAAsE;IACtE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAC1D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,UAAU,IAAI,SAAS,MAAM,EAAE,CAAC;IAChC,OAAO,IAAI,IAAI,CAAC;CACjB;AAOD;;;GAGG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,KAAK,GACX,4BAA4B,CA8E9B"}
1
+ {"version":3,"file":"lighting-controller.d.ts","sourceRoot":"","sources":["../../src/babylon/lighting-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AAG9E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAIL,KAAK,eAAe,EACpB,KAAK,2BAA2B,EACjC,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,sBAAsB,GAAG,gBAAgB,GAAG,gBAAgB,CAAC;AACzE,MAAM,MAAM,0BAA0B,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAE5E,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,0BAA0B,CAAC;IAC9C,QAAQ,CAAC,KAAK,EAAE,sBAAsB,CAAC;IACvC,QAAQ,CAAC,YAAY,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,4BAA4B;IAC3C,SAAS,CAAC,QAAQ,EAAE,2BAA2B,GAAG,QAAQ,CAAC,6BAA6B,CAAC,CAAC;IAC1F,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAAC;IACxD,sEAAsE;IACtE,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IAC1D,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IACpC,UAAU,IAAI,SAAS,MAAM,EAAE,CAAC;IAChC,OAAO,IAAI,IAAI,CAAC;CACjB;AAeD;;;GAGG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,KAAK,GACX,4BAA4B,CAwH9B"}
@@ -9,6 +9,7 @@ import { createFpsRuntimeLightSnapshot, } from '../lighting.js';
9
9
  */
10
10
  export function createFpsBabylonLightingController(scene) {
11
11
  const entries = new Map();
12
+ const pendingCleanup = new Set();
12
13
  let disposed = false;
13
14
  const assertActive = () => {
14
15
  if (disposed)
@@ -17,12 +18,13 @@ export function createFpsBabylonLightingController(scene) {
17
18
  return {
18
19
  applyNode(snapshot) {
19
20
  assertActive();
21
+ drainPendingCleanup(pendingCleanup);
20
22
  const nodeId = readNodeId(snapshot?.nodeId);
21
23
  const enabled = readEnabled(snapshot?.enabled);
22
24
  const lightSnapshot = createFpsRuntimeLightSnapshot(snapshot?.light, `$.scene.nodes[${JSON.stringify(nodeId)}].light`);
23
25
  const existing = entries.get(nodeId);
24
- if (existing?.type === lightSnapshot.type) {
25
- applyLightSnapshot(existing.light, lightSnapshot, enabled);
26
+ if (existing?.type === lightSnapshot.type && !existing.light.isDisposed()) {
27
+ applyLightSnapshotTransaction(existing.light, lightSnapshot, enabled);
26
28
  return Object.freeze({
27
29
  nodeId,
28
30
  mutation: 'updated',
@@ -32,14 +34,20 @@ export function createFpsBabylonLightingController(scene) {
32
34
  let replacement = null;
33
35
  try {
34
36
  replacement = createLight(scene, nodeId, lightSnapshot);
35
- applyLightSnapshot(replacement, lightSnapshot, enabled);
37
+ applyLightSnapshotTransaction(replacement, lightSnapshot, enabled);
36
38
  }
37
39
  catch (error) {
38
- replacement?.dispose();
39
- throw error;
40
+ throw cleanupFailedReplacement(error, replacement, pendingCleanup);
41
+ }
42
+ if (existing && !existing.light.isDisposed()) {
43
+ try {
44
+ existing.light.dispose();
45
+ }
46
+ catch (error) {
47
+ throw cleanupFailedReplacement(error, replacement, pendingCleanup);
48
+ }
40
49
  }
41
50
  entries.set(nodeId, { type: lightSnapshot.type, light: replacement });
42
- existing?.light.dispose();
43
51
  return Object.freeze({
44
52
  nodeId,
45
53
  mutation: existing ? 'replaced' : 'created',
@@ -53,23 +61,34 @@ export function createFpsBabylonLightingController(scene) {
53
61
  },
54
62
  setNodeEnabled(nodeId, enabled) {
55
63
  assertActive();
64
+ drainPendingCleanup(pendingCleanup);
56
65
  const entry = entries.get(readNodeId(nodeId));
57
66
  if (!entry)
58
67
  return false;
59
68
  const resolvedEnabled = readEnabled(enabled);
60
69
  if (entry.light.isEnabled() === resolvedEnabled)
61
70
  return false;
62
- entry.light.setEnabled(resolvedEnabled);
71
+ const previousEnabled = entry.light.isEnabled();
72
+ try {
73
+ entry.light.setEnabled(resolvedEnabled);
74
+ }
75
+ catch (error) {
76
+ const cleanupErrors = [];
77
+ attemptCleanup(() => entry.light.setEnabled(previousEnabled), cleanupErrors);
78
+ throw addFailureMetadata(error, 'Babylon Light enabled-state update failed.', cleanupErrors);
79
+ }
63
80
  return true;
64
81
  },
65
82
  removeNode(nodeId) {
66
83
  assertActive();
84
+ drainPendingCleanup(pendingCleanup);
67
85
  const resolvedNodeId = readNodeId(nodeId);
68
86
  const entry = entries.get(resolvedNodeId);
69
87
  if (!entry)
70
88
  return false;
89
+ if (!entry.light.isDisposed())
90
+ entry.light.dispose();
71
91
  entries.delete(resolvedNodeId);
72
- entry.light.dispose();
73
92
  return true;
74
93
  },
75
94
  getNodeIds() {
@@ -79,10 +98,31 @@ export function createFpsBabylonLightingController(scene) {
79
98
  dispose() {
80
99
  if (disposed)
81
100
  return;
101
+ const failures = [];
102
+ for (const [nodeId, entry] of entries) {
103
+ try {
104
+ if (!entry.light.isDisposed())
105
+ entry.light.dispose();
106
+ entries.delete(nodeId);
107
+ }
108
+ catch (error) {
109
+ failures.push(error);
110
+ }
111
+ }
112
+ for (const light of pendingCleanup) {
113
+ try {
114
+ if (!light.isDisposed())
115
+ light.dispose();
116
+ pendingCleanup.delete(light);
117
+ }
118
+ catch (error) {
119
+ failures.push(error);
120
+ }
121
+ }
122
+ if (failures.length > 0) {
123
+ throw addFailureMetadata(failures[0], 'Babylon Lighting Controller disposal failed.', failures.slice(1));
124
+ }
82
125
  disposed = true;
83
- for (const entry of entries.values())
84
- entry.light.dispose();
85
- entries.clear();
86
126
  },
87
127
  };
88
128
  }
@@ -90,18 +130,55 @@ function createLight(scene, nodeId, snapshot) {
90
130
  if (snapshot.type === 'directional') {
91
131
  return new DirectionalLight(`${nodeId}.directionalLight`, toVector3(snapshot.direction), scene);
92
132
  }
133
+ // Runtime Light schema v1 defines the standard environment light as
134
+ // zenith-up. A configurable hemispheric direction requires a future schema.
93
135
  return new HemisphericLight(`${nodeId}.hemisphericLight`, Vector3.Up(), scene);
94
136
  }
137
+ function applyLightSnapshotTransaction(light, snapshot, enabled) {
138
+ const previous = captureLightState(light);
139
+ try {
140
+ applyLightSnapshot(light, snapshot, enabled);
141
+ }
142
+ catch (error) {
143
+ const cleanupErrors = [];
144
+ restoreLightState(light, previous, cleanupErrors);
145
+ throw addFailureMetadata(error, 'Babylon Light snapshot apply failed.', cleanupErrors);
146
+ }
147
+ }
95
148
  function applyLightSnapshot(light, snapshot, enabled) {
149
+ // Enabled is applied first because it is the only Babylon method call here;
150
+ // all following field mutations are restored if a later assignment fails.
151
+ light.setEnabled(enabled);
96
152
  light.intensity = snapshot.intensity;
97
153
  copyColor(light.diffuse, snapshot.diffuseColor);
98
- light.setEnabled(enabled);
99
154
  if (snapshot.type === 'directional') {
100
- const directional = light;
101
- copyVector(directional.direction, snapshot.direction);
102
- return;
155
+ copyVector(light.direction, snapshot.direction);
156
+ }
157
+ else {
158
+ copyColor(light.groundColor, snapshot.groundColor);
159
+ }
160
+ }
161
+ function captureLightState(light) {
162
+ const base = {
163
+ enabled: light.isEnabled(),
164
+ intensity: light.intensity,
165
+ diffuse: colorTuple(light.diffuse),
166
+ };
167
+ if (light instanceof DirectionalLight) {
168
+ return { ...base, direction: vectorTuple(light.direction) };
169
+ }
170
+ return { ...base, groundColor: colorTuple(light.groundColor) };
171
+ }
172
+ function restoreLightState(light, state, cleanupErrors) {
173
+ attemptCleanup(() => light.setEnabled(state.enabled), cleanupErrors);
174
+ attemptCleanup(() => { light.intensity = state.intensity; }, cleanupErrors);
175
+ attemptCleanup(() => copyTupleToColor(light.diffuse, state.diffuse), cleanupErrors);
176
+ if (light instanceof DirectionalLight && state.direction) {
177
+ attemptCleanup(() => copyTupleToVector(light.direction, state.direction), cleanupErrors);
178
+ }
179
+ else if (light instanceof HemisphericLight && state.groundColor) {
180
+ attemptCleanup(() => copyTupleToColor(light.groundColor, state.groundColor), cleanupErrors);
103
181
  }
104
- copyColor(light.groundColor, snapshot.groundColor);
105
182
  }
106
183
  function copyVector(target, source) {
107
184
  target.copyFromFloats(source.x, source.y, source.z);
@@ -112,6 +189,75 @@ function copyColor(target, source) {
112
189
  function toVector3(source) {
113
190
  return new Vector3(source.x, source.y, source.z);
114
191
  }
192
+ function vectorTuple(value) {
193
+ return [value.x, value.y, value.z];
194
+ }
195
+ function colorTuple(value) {
196
+ return [value.r, value.g, value.b];
197
+ }
198
+ function copyTupleToVector(target, source) {
199
+ target.copyFromFloats(source[0], source[1], source[2]);
200
+ }
201
+ function copyTupleToColor(target, source) {
202
+ target.copyFromFloats(source[0], source[1], source[2]);
203
+ }
204
+ function cleanupFailedReplacement(failure, replacement, pendingCleanup) {
205
+ if (!replacement)
206
+ return failure;
207
+ const cleanupErrors = [];
208
+ attemptCleanup(() => replacement.setEnabled(false), cleanupErrors);
209
+ try {
210
+ if (!replacement.isDisposed())
211
+ replacement.dispose();
212
+ }
213
+ catch (cleanupError) {
214
+ cleanupErrors.push(cleanupError);
215
+ if (!replacement.isDisposed())
216
+ pendingCleanup.add(replacement);
217
+ }
218
+ return addFailureMetadata(failure, 'Babylon Light replacement failed.', cleanupErrors);
219
+ }
220
+ function drainPendingCleanup(pendingCleanup) {
221
+ const failures = [];
222
+ for (const light of pendingCleanup) {
223
+ try {
224
+ if (!light.isDisposed())
225
+ light.dispose();
226
+ pendingCleanup.delete(light);
227
+ }
228
+ catch (error) {
229
+ failures.push(error);
230
+ }
231
+ }
232
+ if (failures.length > 0) {
233
+ throw addFailureMetadata(failures[0], 'Babylon Light pending cleanup failed.', failures.slice(1));
234
+ }
235
+ }
236
+ function attemptCleanup(operation, cleanupErrors) {
237
+ try {
238
+ operation();
239
+ }
240
+ catch (error) {
241
+ cleanupErrors.push(error);
242
+ }
243
+ }
244
+ function addFailureMetadata(failure, fallbackMessage, cleanupErrors) {
245
+ if (cleanupErrors.length === 0)
246
+ return failure;
247
+ if (failure && (typeof failure === 'object' || typeof failure === 'function')) {
248
+ try {
249
+ Object.assign(failure, { cleanupErrors: Object.freeze([...cleanupErrors]) });
250
+ return failure;
251
+ }
252
+ catch {
253
+ // Fall through to a wrapper when the original failure is immutable.
254
+ }
255
+ }
256
+ return Object.assign(new Error(fallbackMessage), {
257
+ cause: failure,
258
+ cleanupErrors: Object.freeze([...cleanupErrors]),
259
+ });
260
+ }
115
261
  function readNodeId(value) {
116
262
  if (typeof value !== 'string' || !value.trim()) {
117
263
  throw new Error('runtime.lighting.nodeIdInvalid');
@@ -1 +1 @@
1
- {"version":3,"file":"lighting-controller.js","sourceRoot":"","sources":["../../src/babylon/lighting-controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lighting-controller.js","sourceRoot":"","sources":["../../src/babylon/lighting-controller.ts"],"names":[],"mappings":"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"}
package/dist/babylon.d.ts CHANGED
@@ -1,3 +1,5 @@
1
1
  export declare const ENGINE_BABYLON_SUBPATH = "@fps-games/engine/babylon";
2
+ export { createFpsBabylonFramePump, type CreateFpsBabylonFramePumpOptions, type FpsBabylonFramePump, } from './babylon/frame-pump.js';
3
+ export { applyFpsBabylonCameraProjection, createFpsBabylonCameraResource, resizeFpsBabylonCameraProjection, type CreateFpsBabylonCameraResourceOptions, type FpsBabylonCameraRegistration, type FpsBabylonCameraResource, } from './babylon/camera.js';
2
4
  export { createFpsBabylonLightingController, type FpsBabylonLightingApplyResult, type FpsBabylonLightingController, type FpsBabylonLightingMutation, type FpsBabylonRuntimeLight, } from './babylon/lighting-controller.js';
3
5
  //# sourceMappingURL=babylon.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"babylon.d.ts","sourceRoot":"","sources":["../src/babylon.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,8BAA8B,CAAC;AAElE,OAAO,EACL,kCAAkC,EAClC,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,GAC5B,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"babylon.d.ts","sourceRoot":"","sources":["../src/babylon.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,sBAAsB,8BAA8B,CAAC;AAElE,OAAO,EACL,yBAAyB,EACzB,KAAK,gCAAgC,EACrC,KAAK,mBAAmB,GACzB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,+BAA+B,EAC/B,8BAA8B,EAC9B,gCAAgC,EAChC,KAAK,qCAAqC,EAC1C,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,GAC9B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,kCAAkC,EAClC,KAAK,6BAA6B,EAClC,KAAK,4BAA4B,EACjC,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,GAC5B,MAAM,kCAAkC,CAAC"}
package/dist/babylon.js CHANGED
@@ -1,3 +1,5 @@
1
1
  export const ENGINE_BABYLON_SUBPATH = '@fps-games/engine/babylon';
2
+ export { createFpsBabylonFramePump, } from './babylon/frame-pump.js';
3
+ export { applyFpsBabylonCameraProjection, createFpsBabylonCameraResource, resizeFpsBabylonCameraProjection, } from './babylon/camera.js';
2
4
  export { createFpsBabylonLightingController, } from './babylon/lighting-controller.js';
3
5
  //# sourceMappingURL=babylon.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"babylon.js","sourceRoot":"","sources":["../src/babylon.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAElE,OAAO,EACL,kCAAkC,GAKnC,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"babylon.js","sourceRoot":"","sources":["../src/babylon.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAElE,OAAO,EACL,yBAAyB,GAG1B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,+BAA+B,EAC/B,8BAA8B,EAC9B,gCAAgC,GAIjC,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,kCAAkC,GAKnC,MAAM,kCAAkC,CAAC"}
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
3
  "packageName": "@fps-games/engine",
4
- "version": "0.0.1-beta.2",
5
- "gitSha": "a9d2210d8a8ad81aa0a1d0a2606df1fa36ce0c2d",
6
- "distHash": "2f04a9cf130c7933cda2047dc29b154b9461bc6915800c97e2f9cfd2ef2503fc",
7
- "cacheKey": "0.0.1-beta.2-2f04a9cf130c"
4
+ "version": "0.0.1-beta.4",
5
+ "gitSha": "99a52ba8cce56d90a6433b4348aadf38001ca1a4",
6
+ "distHash": "66297ef379491afd13d84833423c787fb2873b5e0d790c075dacbbf1fd774797",
7
+ "cacheKey": "0.0.1-beta.4-66297ef37949"
8
8
  }
@@ -0,0 +1,25 @@
1
+ export declare const FPS_CAMERA_PROJECTION_SCHEMA_VERSION: 1;
2
+ export type FpsCameraProjectionMode = 'orthographic' | 'perspective';
3
+ /**
4
+ * Renderer-neutral camera lens/clip snapshot.
5
+ *
6
+ * This deliberately does not describe a Main Camera, an orbit rig, a follow
7
+ * target or gameplay control ownership. `orthoSize` is the vertical
8
+ * half-height used by renderer backends.
9
+ */
10
+ export interface FpsCameraProjectionSnapshot {
11
+ readonly schemaVersion: typeof FPS_CAMERA_PROJECTION_SCHEMA_VERSION;
12
+ readonly projection: FpsCameraProjectionMode;
13
+ readonly fov: number;
14
+ readonly orthoSize: number;
15
+ readonly minZ: number;
16
+ readonly maxZ: number;
17
+ }
18
+ export declare class FpsCameraProjectionDataError extends Error {
19
+ readonly path: string;
20
+ readonly reason: string;
21
+ readonly code = "camera.projection.invalid";
22
+ constructor(path: string, reason: string);
23
+ }
24
+ export declare function createFpsCameraProjectionSnapshot(value: unknown, path?: string): Readonly<FpsCameraProjectionSnapshot>;
25
+ //# sourceMappingURL=camera.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera.d.ts","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oCAAoC,EAAG,CAAU,CAAC;AAE/D,MAAM,MAAM,uBAAuB,GAAG,cAAc,GAAG,aAAa,CAAC;AAErE;;;;;;GAMG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,aAAa,EAAE,OAAO,oCAAoC,CAAC;IACpE,QAAQ,CAAC,UAAU,EAAE,uBAAuB,CAAC;IAC7C,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,4BAA6B,SAAQ,KAAK;IAInD,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAJzB,QAAQ,CAAC,IAAI,+BAA+B;gBAGjC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM;CAK1B;AAWD,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,OAAO,EACd,IAAI,SAAuB,GAC1B,QAAQ,CAAC,2BAA2B,CAAC,CAuBvC"}
package/dist/camera.js ADDED
@@ -0,0 +1,68 @@
1
+ export const FPS_CAMERA_PROJECTION_SCHEMA_VERSION = 1;
2
+ export class FpsCameraProjectionDataError extends Error {
3
+ path;
4
+ reason;
5
+ code = 'camera.projection.invalid';
6
+ constructor(path, reason) {
7
+ super(`Invalid Camera Projection data at ${path}: ${reason}`);
8
+ this.path = path;
9
+ this.reason = reason;
10
+ this.name = 'FpsCameraProjectionDataError';
11
+ }
12
+ }
13
+ const CAMERA_PROJECTION_FIELDS = new Set([
14
+ 'schemaVersion',
15
+ 'projection',
16
+ 'fov',
17
+ 'orthoSize',
18
+ 'minZ',
19
+ 'maxZ',
20
+ ]);
21
+ export function createFpsCameraProjectionSnapshot(value, path = '$.cameraProjection') {
22
+ const input = record(value, path);
23
+ assertKnownFields(input, CAMERA_PROJECTION_FIELDS, path);
24
+ if (input.schemaVersion !== FPS_CAMERA_PROJECTION_SCHEMA_VERSION) {
25
+ invalid(`${path}.schemaVersion`, `expected ${FPS_CAMERA_PROJECTION_SCHEMA_VERSION}`);
26
+ }
27
+ if (input.projection !== 'orthographic' && input.projection !== 'perspective') {
28
+ invalid(`${path}.projection`, 'expected orthographic or perspective');
29
+ }
30
+ const minZ = positiveFiniteNumber(input.minZ, `${path}.minZ`);
31
+ const maxZ = positiveFiniteNumber(input.maxZ, `${path}.maxZ`);
32
+ if (maxZ <= minZ)
33
+ invalid(`${path}.maxZ`, 'expected a value greater than minZ');
34
+ return Object.freeze({
35
+ schemaVersion: FPS_CAMERA_PROJECTION_SCHEMA_VERSION,
36
+ projection: input.projection,
37
+ fov: positiveFiniteNumber(input.fov, `${path}.fov`),
38
+ orthoSize: positiveFiniteNumber(input.orthoSize, `${path}.orthoSize`),
39
+ minZ,
40
+ maxZ,
41
+ });
42
+ }
43
+ function record(value, path) {
44
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
45
+ invalid(path, 'expected a plain object');
46
+ }
47
+ const prototype = Object.getPrototypeOf(value);
48
+ if (prototype !== Object.prototype && prototype !== null) {
49
+ invalid(path, 'expected a plain object');
50
+ }
51
+ return value;
52
+ }
53
+ function assertKnownFields(value, fields, path) {
54
+ for (const field of Object.keys(value)) {
55
+ if (!fields.has(field))
56
+ invalid(`${path}.${field}`, 'unknown field');
57
+ }
58
+ }
59
+ function positiveFiniteNumber(value, path) {
60
+ if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) {
61
+ invalid(path, 'expected a positive finite number');
62
+ }
63
+ return value;
64
+ }
65
+ function invalid(path, reason) {
66
+ throw new FpsCameraProjectionDataError(path, reason);
67
+ }
68
+ //# sourceMappingURL=camera.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera.js","sourceRoot":"","sources":["../src/camera.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ export declare const FPS_FRAME_CLOCK_DEFAULT_MAX_DELTA_SECONDS = 0.1;
2
+ /**
3
+ * Renderer-neutral timing emitted once by the outer Runtime frame pump.
4
+ *
5
+ * This is deliberately not a gameplay phase scheduler. Projects and Runtime
6
+ * Plugins decide how a frame is split into update phases and when rendering
7
+ * occurs.
8
+ */
9
+ export interface FpsFrameContext {
10
+ readonly frame: number;
11
+ readonly nowMs: number;
12
+ readonly deltaSeconds: number;
13
+ readonly elapsedSeconds: number;
14
+ }
15
+ export interface FpsFrameClockOptions {
16
+ readonly maxDeltaSeconds?: number;
17
+ }
18
+ export interface FpsFrameClock {
19
+ readonly maxDeltaSeconds: number;
20
+ beginFrame(nowMs: number): Readonly<FpsFrameContext>;
21
+ resetTime(): void;
22
+ reset(): void;
23
+ }
24
+ /**
25
+ * Creates a monotonic, clamped Runtime frame clock.
26
+ *
27
+ * `resetTime()` prevents a stopped, hidden or paused interval from becoming a
28
+ * large delta while preserving the accumulated frame diagnostics. `reset()`
29
+ * starts a completely new frame timeline.
30
+ */
31
+ export declare function createFpsFrameClock(options?: FpsFrameClockOptions): FpsFrameClock;
32
+ //# sourceMappingURL=frame.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame.d.ts","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,yCAAyC,MAAM,CAAC;AAE7D;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;IACrD,SAAS,IAAI,IAAI,CAAC;IAClB,KAAK,IAAI,IAAI,CAAC;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,GAAE,oBAAyB,GACjC,aAAa,CAsCf"}
package/dist/frame.js ADDED
@@ -0,0 +1,54 @@
1
+ export const FPS_FRAME_CLOCK_DEFAULT_MAX_DELTA_SECONDS = 0.1;
2
+ /**
3
+ * Creates a monotonic, clamped Runtime frame clock.
4
+ *
5
+ * `resetTime()` prevents a stopped, hidden or paused interval from becoming a
6
+ * large delta while preserving the accumulated frame diagnostics. `reset()`
7
+ * starts a completely new frame timeline.
8
+ */
9
+ export function createFpsFrameClock(options = {}) {
10
+ const maxDeltaSeconds = readPositiveFinite(options.maxDeltaSeconds ?? FPS_FRAME_CLOCK_DEFAULT_MAX_DELTA_SECONDS, 'maxDeltaSeconds');
11
+ let frame = 0;
12
+ let elapsedSeconds = 0;
13
+ let previousNowMs = null;
14
+ return Object.freeze({
15
+ maxDeltaSeconds,
16
+ beginFrame(nowMs) {
17
+ const currentNowMs = readFinite(nowMs, 'nowMs');
18
+ const rawDeltaSeconds = previousNowMs === null
19
+ ? 0
20
+ : Math.max(0, (currentNowMs - previousNowMs) / 1000);
21
+ const deltaSeconds = Math.min(rawDeltaSeconds, maxDeltaSeconds);
22
+ previousNowMs = currentNowMs;
23
+ elapsedSeconds += deltaSeconds;
24
+ frame += 1;
25
+ return Object.freeze({
26
+ frame,
27
+ nowMs: currentNowMs,
28
+ deltaSeconds,
29
+ elapsedSeconds,
30
+ });
31
+ },
32
+ resetTime() {
33
+ previousNowMs = null;
34
+ },
35
+ reset() {
36
+ frame = 0;
37
+ elapsedSeconds = 0;
38
+ previousNowMs = null;
39
+ },
40
+ });
41
+ }
42
+ function readPositiveFinite(value, label) {
43
+ if (!Number.isFinite(value) || value <= 0) {
44
+ throw new Error(`Frame Clock ${label} must be a positive finite number.`);
45
+ }
46
+ return value;
47
+ }
48
+ function readFinite(value, label) {
49
+ if (!Number.isFinite(value)) {
50
+ throw new Error(`Frame Clock ${label} must be a finite number.`);
51
+ }
52
+ return value;
53
+ }
54
+ //# sourceMappingURL=frame.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"frame.js","sourceRoot":"","sources":["../src/frame.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,yCAAyC,GAAG,GAAG,CAAC;AA2B7D;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,UAAgC,EAAE;IAElC,MAAM,eAAe,GAAG,kBAAkB,CACxC,OAAO,CAAC,eAAe,IAAI,yCAAyC,EACpE,iBAAiB,CAClB,CAAC;IACF,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,aAAa,GAAkB,IAAI,CAAC;IAExC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,eAAe;QACf,UAAU,CAAC,KAAa;YACtB,MAAM,YAAY,GAAG,UAAU,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,eAAe,GAAG,aAAa,KAAK,IAAI;gBAC5C,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,YAAY,GAAG,aAAa,CAAC,GAAG,IAAI,CAAC,CAAC;YACvD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;YAEhE,aAAa,GAAG,YAAY,CAAC;YAC7B,cAAc,IAAI,YAAY,CAAC;YAC/B,KAAK,IAAI,CAAC,CAAC;YAEX,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,KAAK;gBACL,KAAK,EAAE,YAAY;gBACnB,YAAY;gBACZ,cAAc;aACf,CAAC,CAAC;QACL,CAAC;QACD,SAAS;YACP,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,KAAK;YACH,KAAK,GAAG,CAAC,CAAC;YACV,cAAc,GAAG,CAAC,CAAC;YACnB,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAa,EAAE,KAAa;IACtD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,oCAAoC,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,UAAU,CAAC,KAAa,EAAE,KAAa;IAC9C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,eAAe,KAAK,2BAA2B,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
package/dist/index.d.ts CHANGED
@@ -4,5 +4,7 @@ export interface FpsEngineRuntimeDataMarker {
4
4
  readonly schemaVersion: 1;
5
5
  readonly marker: typeof ENGINE_PACKAGE_MARKER;
6
6
  }
7
- export { FPS_RUNTIME_LIGHT_COMPONENT_SCHEMA_VERSION, FpsRuntimeLightingDataError, createFpsRuntimeLightSnapshot, createFpsRuntimeSystemLightingSnapshot, normalizeFpsRuntimeLightDirection, type FpsRuntimeDirectionalLight, type FpsRuntimeHemisphericLight, type FpsRuntimeLight, type FpsRuntimeLightColorRgb, type FpsRuntimeLightNodeSnapshot, type FpsRuntimeLightVec3, type FpsRuntimeSystemLightingSnapshot, } from './lighting.js';
7
+ export { FPS_FRAME_CLOCK_DEFAULT_MAX_DELTA_SECONDS, createFpsFrameClock, type FpsFrameClock, type FpsFrameClockOptions, type FpsFrameContext, } from './frame.js';
8
+ export { FPS_CAMERA_PROJECTION_SCHEMA_VERSION, FpsCameraProjectionDataError, createFpsCameraProjectionSnapshot, type FpsCameraProjectionMode, type FpsCameraProjectionSnapshot, } from './camera.js';
9
+ export { FPS_RUNTIME_LIGHT_COMPONENT_SCHEMA_VERSION, FpsRuntimeLightingDataError, createFpsRuntimeLightSnapshot, createFpsRuntimeStandardSystemLightingSnapshot, createFpsRuntimeSystemLightingSnapshot, normalizeFpsRuntimeLightDirection, type FpsRuntimeDirectionalLight, type FpsRuntimeHemisphericLight, type FpsRuntimeLight, type FpsRuntimeLightColorRgb, type FpsRuntimeLightNodeSnapshot, type FpsRuntimeLightVec3, type FpsRuntimeStandardSystemLightingSnapshot, type FpsRuntimeSystemLightingSnapshot, } from './lighting.js';
8
10
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AACzD,eAAO,MAAM,2BAA2B,qBAAqB,CAAC;AAE9D,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,qBAAqB,CAAC;CAC/C;AAED,OAAO,EACL,0CAA0C,EAC1C,2BAA2B,EAC3B,6BAA6B,EAC7B,sCAAsC,EACtC,iCAAiC,EACjC,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,EACxB,KAAK,gCAAgC,GACtC,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AACzD,eAAO,MAAM,2BAA2B,qBAAqB,CAAC;AAE9D,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,OAAO,qBAAqB,CAAC;CAC/C;AAED,OAAO,EACL,yCAAyC,EACzC,mBAAmB,EACnB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,eAAe,GACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,oCAAoC,EACpC,4BAA4B,EAC5B,iCAAiC,EACjC,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,GACjC,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,0CAA0C,EAC1C,2BAA2B,EAC3B,6BAA6B,EAC7B,8CAA8C,EAC9C,sCAAsC,EACtC,iCAAiC,EACjC,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,2BAA2B,EAChC,KAAK,mBAAmB,EACxB,KAAK,wCAAwC,EAC7C,KAAK,gCAAgC,GACtC,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -1,4 +1,6 @@
1
1
  export const ENGINE_PACKAGE_MARKER = '@fps-games/engine';
2
2
  export const ENGINE_IMPLEMENTATION_PHASE = 'domain-migration';
3
- export { FPS_RUNTIME_LIGHT_COMPONENT_SCHEMA_VERSION, FpsRuntimeLightingDataError, createFpsRuntimeLightSnapshot, createFpsRuntimeSystemLightingSnapshot, normalizeFpsRuntimeLightDirection, } from './lighting.js';
3
+ export { FPS_FRAME_CLOCK_DEFAULT_MAX_DELTA_SECONDS, createFpsFrameClock, } from './frame.js';
4
+ export { FPS_CAMERA_PROJECTION_SCHEMA_VERSION, FpsCameraProjectionDataError, createFpsCameraProjectionSnapshot, } from './camera.js';
5
+ export { FPS_RUNTIME_LIGHT_COMPONENT_SCHEMA_VERSION, FpsRuntimeLightingDataError, createFpsRuntimeLightSnapshot, createFpsRuntimeStandardSystemLightingSnapshot, createFpsRuntimeSystemLightingSnapshot, normalizeFpsRuntimeLightDirection, } from './lighting.js';
4
6
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AACzD,MAAM,CAAC,MAAM,2BAA2B,GAAG,kBAAkB,CAAC;AAO9D,OAAO,EACL,0CAA0C,EAC1C,2BAA2B,EAC3B,6BAA6B,EAC7B,sCAAsC,EACtC,iCAAiC,GAQlC,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG,mBAAmB,CAAC;AACzD,MAAM,CAAC,MAAM,2BAA2B,GAAG,kBAAkB,CAAC;AAO9D,OAAO,EACL,yCAAyC,EACzC,mBAAmB,GAIpB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,oCAAoC,EACpC,4BAA4B,EAC5B,iCAAiC,GAGlC,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,0CAA0C,EAC1C,2BAA2B,EAC3B,6BAA6B,EAC7B,8CAA8C,EAC9C,sCAAsC,EACtC,iCAAiC,GASlC,MAAM,eAAe,CAAC"}
@@ -16,6 +16,7 @@ export interface FpsRuntimeDirectionalLight {
16
16
  readonly direction: FpsRuntimeLightVec3;
17
17
  readonly diffuseColor: FpsRuntimeLightColorRgb;
18
18
  }
19
+ /** Schema v1 models a zenith-up environment light; direction is not configurable. */
19
20
  export interface FpsRuntimeHemisphericLight {
20
21
  readonly schemaVersion: typeof FPS_RUNTIME_LIGHT_COMPONENT_SCHEMA_VERSION;
21
22
  readonly type: 'hemispheric';
@@ -29,10 +30,17 @@ export interface FpsRuntimeLightNodeSnapshot<TLight extends FpsRuntimeLight = Fp
29
30
  readonly enabled: boolean;
30
31
  readonly light: TLight;
31
32
  }
32
- export interface FpsRuntimeSystemLightingSnapshot {
33
+ /**
34
+ * Forge Play's standard two-light scene profile. This is a product policy,
35
+ * not a limit on the number or kinds of lights the Babylon controller owns.
36
+ * In schema v1 the environment light is zenith-up by definition.
37
+ */
38
+ export interface FpsRuntimeStandardSystemLightingSnapshot {
33
39
  readonly environment: FpsRuntimeLightNodeSnapshot<FpsRuntimeHemisphericLight>;
34
40
  readonly directional: FpsRuntimeLightNodeSnapshot<FpsRuntimeDirectionalLight>;
35
41
  }
42
+ /** @deprecated Use FpsRuntimeStandardSystemLightingSnapshot. */
43
+ export type FpsRuntimeSystemLightingSnapshot = FpsRuntimeStandardSystemLightingSnapshot;
36
44
  export declare class FpsRuntimeLightingDataError extends Error {
37
45
  readonly path: string;
38
46
  readonly reason: string;
@@ -46,9 +54,13 @@ export declare class FpsRuntimeLightingDataError extends Error {
46
54
  export declare function normalizeFpsRuntimeLightDirection(value: unknown, path?: string): Readonly<FpsRuntimeLightVec3>;
47
55
  export declare function createFpsRuntimeLightSnapshot(value: unknown, path?: string): Readonly<FpsRuntimeLight>;
48
56
  /**
49
- * Resolves the two required system lights before a Renderer creates resources.
50
- * Extra non-light scene nodes are ignored; duplicate or missing system roles
51
- * fail closed.
57
+ * Resolves Forge Play's standard two-light scene profile before a Renderer
58
+ * creates resources. The roles are intentionally inferred from the two v1
59
+ * component types; this helper must not be used as a general scene-light
60
+ * collection API. Extra non-light scene nodes are ignored, while duplicate or
61
+ * missing standard roles fail closed.
52
62
  */
63
+ export declare function createFpsRuntimeStandardSystemLightingSnapshot(value: unknown, path?: string): Readonly<FpsRuntimeStandardSystemLightingSnapshot>;
64
+ /** @deprecated Use createFpsRuntimeStandardSystemLightingSnapshot. */
53
65
  export declare function createFpsRuntimeSystemLightingSnapshot(value: unknown, path?: string): Readonly<FpsRuntimeSystemLightingSnapshot>;
54
66
  //# sourceMappingURL=lighting.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lighting.d.ts","sourceRoot":"","sources":["../src/lighting.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0CAA0C,EAAG,CAAU,CAAC;AAErE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,EAAE,OAAO,0CAA0C,CAAC;IAC1E,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAC;CAChD;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,EAAE,OAAO,0CAA0C,CAAC;IAC1E,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAC;CAC/C;AAED,MAAM,MAAM,eAAe,GAAG,0BAA0B,GAAG,0BAA0B,CAAC;AAEtF,MAAM,WAAW,2BAA2B,CAAC,MAAM,SAAS,eAAe,GAAG,eAAe;IAC3F,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gCAAgC;IAC/C,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC,0BAA0B,CAAC,CAAC;IAC9E,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC,0BAA0B,CAAC,CAAC;CAC/E;AAED,qBAAa,2BAA4B,SAAQ,KAAK;IAIlD,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAJzB,QAAQ,CAAC,IAAI,8BAA8B;gBAGhC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM;CAK1B;AAqBD;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,OAAO,EACd,IAAI,SAAgB,GACnB,QAAQ,CAAC,mBAAmB,CAAC,CAS/B;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,EACd,IAAI,SAAY,GACf,QAAQ,CAAC,eAAe,CAAC,CAyC3B;AAED;;;;GAIG;AACH,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,OAAO,EACd,IAAI,SAAkB,GACrB,QAAQ,CAAC,gCAAgC,CAAC,CA8B5C"}
1
+ {"version":3,"file":"lighting.d.ts","sourceRoot":"","sources":["../src/lighting.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0CAA0C,EAAG,CAAU,CAAC;AAErE,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,EAAE,OAAO,0CAA0C,CAAC;IAC1E,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC;IACxC,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAC;CAChD;AAED,qFAAqF;AACrF,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,aAAa,EAAE,OAAO,0CAA0C,CAAC;IAC1E,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,uBAAuB,CAAC;CAC/C;AAED,MAAM,MAAM,eAAe,GAAG,0BAA0B,GAAG,0BAA0B,CAAC;AAEtF,MAAM,WAAW,2BAA2B,CAAC,MAAM,SAAS,eAAe,GAAG,eAAe;IAC3F,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,wCAAwC;IACvD,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC,0BAA0B,CAAC,CAAC;IAC9E,QAAQ,CAAC,WAAW,EAAE,2BAA2B,CAAC,0BAA0B,CAAC,CAAC;CAC/E;AAED,gEAAgE;AAChE,MAAM,MAAM,gCAAgC,GAAG,wCAAwC,CAAC;AAExF,qBAAa,2BAA4B,SAAQ,KAAK;IAIlD,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAJzB,QAAQ,CAAC,IAAI,8BAA8B;gBAGhC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM;CAK1B;AAqBD;;;GAGG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,OAAO,EACd,IAAI,SAAgB,GACnB,QAAQ,CAAC,mBAAmB,CAAC,CAS/B;AAED,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,OAAO,EACd,IAAI,SAAY,GACf,QAAQ,CAAC,eAAe,CAAC,CAyC3B;AAED;;;;;;GAMG;AACH,wBAAgB,8CAA8C,CAC5D,KAAK,EAAE,OAAO,EACd,IAAI,SAAkB,GACrB,QAAQ,CAAC,wCAAwC,CAAC,CA8BpD;AAED,sEAAsE;AACtE,wBAAgB,sCAAsC,CACpD,KAAK,EAAE,OAAO,EACd,IAAI,SAAkB,GACrB,QAAQ,CAAC,gCAAgC,CAAC,CAE5C"}
package/dist/lighting.js CHANGED
@@ -80,11 +80,13 @@ export function createFpsRuntimeLightSnapshot(value, path = '$.light') {
80
80
  invalid(`${path}.type`, 'expected directional or hemispheric');
81
81
  }
82
82
  /**
83
- * Resolves the two required system lights before a Renderer creates resources.
84
- * Extra non-light scene nodes are ignored; duplicate or missing system roles
85
- * fail closed.
83
+ * Resolves Forge Play's standard two-light scene profile before a Renderer
84
+ * creates resources. The roles are intentionally inferred from the two v1
85
+ * component types; this helper must not be used as a general scene-light
86
+ * collection API. Extra non-light scene nodes are ignored, while duplicate or
87
+ * missing standard roles fail closed.
86
88
  */
87
- export function createFpsRuntimeSystemLightingSnapshot(value, path = '$.scene.nodes') {
89
+ export function createFpsRuntimeStandardSystemLightingSnapshot(value, path = '$.scene.nodes') {
88
90
  if (!Array.isArray(value))
89
91
  invalid(path, 'expected an array of Runtime scene nodes');
90
92
  let environment;
@@ -120,6 +122,10 @@ export function createFpsRuntimeSystemLightingSnapshot(value, path = '$.scene.no
120
122
  invalid(path, 'missing Directional/Sun system light');
121
123
  return Object.freeze({ environment, directional });
122
124
  }
125
+ /** @deprecated Use createFpsRuntimeStandardSystemLightingSnapshot. */
126
+ export function createFpsRuntimeSystemLightingSnapshot(value, path = '$.scene.nodes') {
127
+ return createFpsRuntimeStandardSystemLightingSnapshot(value, path);
128
+ }
123
129
  function readVec3(value, path) {
124
130
  const vector = record(value, path);
125
131
  assertKnownFields(vector, VEC3_FIELDS, path);
@@ -1 +1 @@
1
- {"version":3,"file":"lighting.js","sourceRoot":"","sources":["../src/lighting.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lighting.js","sourceRoot":"","sources":["../src/lighting.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fps-games/engine",
3
- "version": "0.0.1-beta.2",
3
+ "version": "0.0.1-beta.4",
4
4
  "description": "Forge Play game engine Runtime Data and renderer backend product.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",