@blcklab/anyo-player 0.5.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 (181) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/LICENSE +21 -0
  3. package/README.md +304 -0
  4. package/dist/createAnyoPlayer.d.ts +3 -0
  5. package/dist/createAnyoPlayer.d.ts.map +1 -0
  6. package/dist/createAnyoPlayer.js +5 -0
  7. package/dist/createAnyoPlayer.js.map +1 -0
  8. package/dist/element-define.d.ts +2 -0
  9. package/dist/element-define.d.ts.map +1 -0
  10. package/dist/element-define.js +4 -0
  11. package/dist/element-define.js.map +1 -0
  12. package/dist/element.d.ts +66 -0
  13. package/dist/element.d.ts.map +1 -0
  14. package/dist/element.js +363 -0
  15. package/dist/element.js.map +1 -0
  16. package/dist/errors.d.ts +11 -0
  17. package/dist/errors.d.ts.map +1 -0
  18. package/dist/errors.js +21 -0
  19. package/dist/errors.js.map +1 -0
  20. package/dist/index.d.ts +13 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +10 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/inputBindings.d.ts +3 -0
  25. package/dist/inputBindings.d.ts.map +1 -0
  26. package/dist/inputBindings.js +3 -0
  27. package/dist/inputBindings.js.map +1 -0
  28. package/dist/internal/AccessibilityController.d.ts +50 -0
  29. package/dist/internal/AccessibilityController.d.ts.map +1 -0
  30. package/dist/internal/AccessibilityController.js +212 -0
  31. package/dist/internal/AccessibilityController.js.map +1 -0
  32. package/dist/internal/AnyoPlayerCore.d.ts +357 -0
  33. package/dist/internal/AnyoPlayerCore.d.ts.map +1 -0
  34. package/dist/internal/AnyoPlayerCore.js +3880 -0
  35. package/dist/internal/AnyoPlayerCore.js.map +1 -0
  36. package/dist/internal/AudioController.d.ts +37 -0
  37. package/dist/internal/AudioController.d.ts.map +1 -0
  38. package/dist/internal/AudioController.js +167 -0
  39. package/dist/internal/AudioController.js.map +1 -0
  40. package/dist/internal/CaptionController.d.ts +16 -0
  41. package/dist/internal/CaptionController.d.ts.map +1 -0
  42. package/dist/internal/CaptionController.js +83 -0
  43. package/dist/internal/CaptionController.js.map +1 -0
  44. package/dist/internal/ContainerHost.d.ts +17 -0
  45. package/dist/internal/ContainerHost.d.ts.map +1 -0
  46. package/dist/internal/ContainerHost.js +110 -0
  47. package/dist/internal/ContainerHost.js.map +1 -0
  48. package/dist/internal/DesktopInputController.d.ts +80 -0
  49. package/dist/internal/DesktopInputController.d.ts.map +1 -0
  50. package/dist/internal/DesktopInputController.js +367 -0
  51. package/dist/internal/DesktopInputController.js.map +1 -0
  52. package/dist/internal/EmbeddingController.d.ts +33 -0
  53. package/dist/internal/EmbeddingController.d.ts.map +1 -0
  54. package/dist/internal/EmbeddingController.js +161 -0
  55. package/dist/internal/EmbeddingController.js.map +1 -0
  56. package/dist/internal/EventHub.d.ts +7 -0
  57. package/dist/internal/EventHub.d.ts.map +1 -0
  58. package/dist/internal/EventHub.js +27 -0
  59. package/dist/internal/EventHub.js.map +1 -0
  60. package/dist/internal/FrameworkAdapterController.d.ts +46 -0
  61. package/dist/internal/FrameworkAdapterController.d.ts.map +1 -0
  62. package/dist/internal/FrameworkAdapterController.js +165 -0
  63. package/dist/internal/FrameworkAdapterController.js.map +1 -0
  64. package/dist/internal/FullscreenController.d.ts +29 -0
  65. package/dist/internal/FullscreenController.d.ts.map +1 -0
  66. package/dist/internal/FullscreenController.js +122 -0
  67. package/dist/internal/FullscreenController.js.map +1 -0
  68. package/dist/internal/GamepadController.d.ts +54 -0
  69. package/dist/internal/GamepadController.d.ts.map +1 -0
  70. package/dist/internal/GamepadController.js +276 -0
  71. package/dist/internal/GamepadController.js.map +1 -0
  72. package/dist/internal/InputBindingsController.d.ts +34 -0
  73. package/dist/internal/InputBindingsController.d.ts.map +1 -0
  74. package/dist/internal/InputBindingsController.js +223 -0
  75. package/dist/internal/InputBindingsController.js.map +1 -0
  76. package/dist/internal/InteractionPresentationController.d.ts +38 -0
  77. package/dist/internal/InteractionPresentationController.d.ts.map +1 -0
  78. package/dist/internal/InteractionPresentationController.js +208 -0
  79. package/dist/internal/InteractionPresentationController.js.map +1 -0
  80. package/dist/internal/MapController.d.ts +16 -0
  81. package/dist/internal/MapController.d.ts.map +1 -0
  82. package/dist/internal/MapController.js +68 -0
  83. package/dist/internal/MapController.js.map +1 -0
  84. package/dist/internal/PerformanceController.d.ts +94 -0
  85. package/dist/internal/PerformanceController.d.ts.map +1 -0
  86. package/dist/internal/PerformanceController.js +455 -0
  87. package/dist/internal/PerformanceController.js.map +1 -0
  88. package/dist/internal/PlayerCameraController.d.ts +79 -0
  89. package/dist/internal/PlayerCameraController.d.ts.map +1 -0
  90. package/dist/internal/PlayerCameraController.js +551 -0
  91. package/dist/internal/PlayerCameraController.js.map +1 -0
  92. package/dist/internal/ResponsiveController.d.ts +37 -0
  93. package/dist/internal/ResponsiveController.d.ts.map +1 -0
  94. package/dist/internal/ResponsiveController.js +143 -0
  95. package/dist/internal/ResponsiveController.js.map +1 -0
  96. package/dist/internal/RuntimeFactory.d.ts +42 -0
  97. package/dist/internal/RuntimeFactory.d.ts.map +1 -0
  98. package/dist/internal/RuntimeFactory.js +93 -0
  99. package/dist/internal/RuntimeFactory.js.map +1 -0
  100. package/dist/internal/ScreenshotController.d.ts +8 -0
  101. package/dist/internal/ScreenshotController.d.ts.map +1 -0
  102. package/dist/internal/ScreenshotController.js +47 -0
  103. package/dist/internal/ScreenshotController.js.map +1 -0
  104. package/dist/internal/SessionController.d.ts +44 -0
  105. package/dist/internal/SessionController.d.ts.map +1 -0
  106. package/dist/internal/SessionController.js +411 -0
  107. package/dist/internal/SessionController.js.map +1 -0
  108. package/dist/internal/SourceResolver.d.ts +31 -0
  109. package/dist/internal/SourceResolver.d.ts.map +1 -0
  110. package/dist/internal/SourceResolver.js +362 -0
  111. package/dist/internal/SourceResolver.js.map +1 -0
  112. package/dist/internal/StateMachine.d.ts +10 -0
  113. package/dist/internal/StateMachine.d.ts.map +1 -0
  114. package/dist/internal/StateMachine.js +35 -0
  115. package/dist/internal/StateMachine.js.map +1 -0
  116. package/dist/internal/StyleController.d.ts +14 -0
  117. package/dist/internal/StyleController.d.ts.map +1 -0
  118. package/dist/internal/StyleController.js +116 -0
  119. package/dist/internal/StyleController.js.map +1 -0
  120. package/dist/internal/TelemetryController.d.ts +28 -0
  121. package/dist/internal/TelemetryController.d.ts.map +1 -0
  122. package/dist/internal/TelemetryController.js +113 -0
  123. package/dist/internal/TelemetryController.js.map +1 -0
  124. package/dist/internal/TouchInputController.d.ts +73 -0
  125. package/dist/internal/TouchInputController.d.ts.map +1 -0
  126. package/dist/internal/TouchInputController.js +379 -0
  127. package/dist/internal/TouchInputController.js.map +1 -0
  128. package/dist/internal/VfxController.d.ts +11 -0
  129. package/dist/internal/VfxController.d.ts.map +1 -0
  130. package/dist/internal/VfxController.js +23 -0
  131. package/dist/internal/VfxController.js.map +1 -0
  132. package/dist/internal/ViewPreferenceController.d.ts +40 -0
  133. package/dist/internal/ViewPreferenceController.d.ts.map +1 -0
  134. package/dist/internal/ViewPreferenceController.js +132 -0
  135. package/dist/internal/ViewPreferenceController.js.map +1 -0
  136. package/dist/internal/VisibilityController.d.ts +26 -0
  137. package/dist/internal/VisibilityController.d.ts.map +1 -0
  138. package/dist/internal/VisibilityController.js +62 -0
  139. package/dist/internal/VisibilityController.js.map +1 -0
  140. package/dist/internal/XRController.d.ts +42 -0
  141. package/dist/internal/XRController.d.ts.map +1 -0
  142. package/dist/internal/XRController.js +169 -0
  143. package/dist/internal/XRController.js.map +1 -0
  144. package/dist/internal/sourceUrls.d.ts +6 -0
  145. package/dist/internal/sourceUrls.d.ts.map +1 -0
  146. package/dist/internal/sourceUrls.js +79 -0
  147. package/dist/internal/sourceUrls.js.map +1 -0
  148. package/dist/react.d.ts +44 -0
  149. package/dist/react.d.ts.map +1 -0
  150. package/dist/react.js +115 -0
  151. package/dist/react.js.map +1 -0
  152. package/dist/session.d.ts +3 -0
  153. package/dist/session.d.ts.map +1 -0
  154. package/dist/session.js +3 -0
  155. package/dist/session.js.map +1 -0
  156. package/dist/styleText.d.ts +2 -0
  157. package/dist/styleText.d.ts.map +1 -0
  158. package/dist/styleText.js +2 -0
  159. package/dist/styleText.js.map +1 -0
  160. package/dist/styles.css +573 -0
  161. package/dist/types.d.ts +1476 -0
  162. package/dist/types.d.ts.map +1 -0
  163. package/dist/types.js +2 -0
  164. package/dist/types.js.map +1 -0
  165. package/dist/ui/PlayerUI.d.ts +193 -0
  166. package/dist/ui/PlayerUI.d.ts.map +1 -0
  167. package/dist/ui/PlayerUI.js +1201 -0
  168. package/dist/ui/PlayerUI.js.map +1 -0
  169. package/dist/vue.d.ts +97 -0
  170. package/dist/vue.d.ts.map +1 -0
  171. package/dist/vue.js +126 -0
  172. package/dist/vue.js.map +1 -0
  173. package/dist/worldCache.d.ts +16 -0
  174. package/dist/worldCache.d.ts.map +1 -0
  175. package/dist/worldCache.js +46 -0
  176. package/dist/worldCache.js.map +1 -0
  177. package/dist/worldSources.d.ts +19 -0
  178. package/dist/worldSources.d.ts.map +1 -0
  179. package/dist/worldSources.js +51 -0
  180. package/dist/worldSources.js.map +1 -0
  181. package/package.json +114 -0
@@ -0,0 +1,143 @@
1
+ export class ResponsiveController {
2
+ container;
3
+ document;
4
+ window;
5
+ enabled;
6
+ fixedPixelRatio;
7
+ maxPixelRatio;
8
+ callbacks;
9
+ renderer = null;
10
+ observer = null;
11
+ mediaQuery = null;
12
+ current = { width: 1, height: 1, pixelRatio: 1 };
13
+ started = false;
14
+ disposed = false;
15
+ constructor(container, options, rendererPixelRatio, rendererMaxPixelRatio, callbacks) {
16
+ this.container = container;
17
+ this.document = container.ownerDocument;
18
+ this.window = this.document.defaultView;
19
+ this.enabled = options !== false && options?.enabled !== false;
20
+ const requestedRatio = options === false
21
+ ? rendererPixelRatio
22
+ : options?.pixelRatio === 'device'
23
+ ? undefined
24
+ : options?.pixelRatio ?? rendererPixelRatio;
25
+ this.fixedPixelRatio = requestedRatio === undefined ? null : normalizePositive(requestedRatio, 1);
26
+ this.maxPixelRatio = normalizePositive(options === false ? rendererMaxPixelRatio : options?.maxPixelRatio ?? rendererMaxPixelRatio ?? 2, 2);
27
+ this.callbacks = callbacks;
28
+ }
29
+ get viewport() {
30
+ return { ...this.current };
31
+ }
32
+ start() {
33
+ if (!this.enabled || this.started || this.disposed)
34
+ return;
35
+ this.started = true;
36
+ const scopedWindow = this.window;
37
+ const ResizeObserverConstructor = scopedWindow?.ResizeObserver ?? globalThis.ResizeObserver;
38
+ if (typeof ResizeObserverConstructor === 'function') {
39
+ const observer = new ResizeObserverConstructor(() => this.resizeNow());
40
+ this.observer = observer;
41
+ observer.observe(this.container);
42
+ }
43
+ this.window?.addEventListener('resize', this.handleWindowResize);
44
+ this.window?.addEventListener('orientationchange', this.handleWindowResize);
45
+ this.installDprWatcher();
46
+ this.resizeNow();
47
+ }
48
+ attach(renderer) {
49
+ if (this.disposed)
50
+ return;
51
+ this.renderer = renderer;
52
+ this.resizeNow(true);
53
+ }
54
+ detach(renderer) {
55
+ if (renderer && this.renderer !== renderer)
56
+ return;
57
+ this.renderer = null;
58
+ }
59
+ resizeNow(force = false) {
60
+ if (this.disposed)
61
+ return this.viewport;
62
+ const next = this.measure();
63
+ const changed = force
64
+ || next.width !== this.current.width
65
+ || next.height !== this.current.height
66
+ || next.pixelRatio !== this.current.pixelRatio;
67
+ this.current = next;
68
+ if (this.enabled && this.renderer) {
69
+ try {
70
+ this.renderer.resize(next.width, next.height, next.pixelRatio);
71
+ }
72
+ catch (error) {
73
+ this.callbacks.onWarning(`Anyo Player could not resize the renderer: ${String(error)}`);
74
+ }
75
+ }
76
+ if (changed)
77
+ this.callbacks.onResize(this.viewport);
78
+ return this.viewport;
79
+ }
80
+ dispose() {
81
+ if (this.disposed)
82
+ return;
83
+ this.disposed = true;
84
+ this.renderer = null;
85
+ this.observer?.disconnect();
86
+ this.observer = null;
87
+ this.window?.removeEventListener('resize', this.handleWindowResize);
88
+ this.window?.removeEventListener('orientationchange', this.handleWindowResize);
89
+ this.removeDprWatcher();
90
+ }
91
+ measure() {
92
+ const rect = this.container.getBoundingClientRect?.();
93
+ const rawWidth = rect?.width ?? this.container.clientWidth ?? 0;
94
+ const rawHeight = rect?.height ?? this.container.clientHeight ?? 0;
95
+ return {
96
+ width: Math.max(1, Math.round(Number.isFinite(rawWidth) ? rawWidth : 1)),
97
+ height: Math.max(1, Math.round(Number.isFinite(rawHeight) ? rawHeight : 1)),
98
+ pixelRatio: this.resolvePixelRatio(),
99
+ };
100
+ }
101
+ rawDevicePixelRatio() {
102
+ const ratio = this.window?.devicePixelRatio ?? globalThis.devicePixelRatio ?? 1;
103
+ return normalizePositive(ratio, 1);
104
+ }
105
+ resolvePixelRatio() {
106
+ const ratio = this.fixedPixelRatio ?? this.window?.devicePixelRatio ?? globalThis.devicePixelRatio ?? 1;
107
+ return Math.max(0.25, Math.min(this.maxPixelRatio, normalizePositive(ratio, 1)));
108
+ }
109
+ installDprWatcher() {
110
+ this.removeDprWatcher();
111
+ if (this.fixedPixelRatio !== null || !this.window?.matchMedia)
112
+ return;
113
+ try {
114
+ const query = `(resolution: ${this.rawDevicePixelRatio()}dppx)`;
115
+ this.mediaQuery = this.window.matchMedia(query);
116
+ this.mediaQuery.addEventListener?.('change', this.handleDprChange);
117
+ this.mediaQuery.addListener?.(this.handleLegacyDprChange);
118
+ }
119
+ catch (error) {
120
+ this.callbacks.onWarning(`Anyo Player could not observe device-pixel-ratio changes: ${String(error)}`);
121
+ }
122
+ }
123
+ removeDprWatcher() {
124
+ this.mediaQuery?.removeEventListener?.('change', this.handleDprChange);
125
+ this.mediaQuery?.removeListener?.(this.handleLegacyDprChange);
126
+ this.mediaQuery = null;
127
+ }
128
+ handleWindowResize = () => {
129
+ this.resizeNow();
130
+ };
131
+ handleDprChange = () => {
132
+ this.installDprWatcher();
133
+ this.resizeNow();
134
+ };
135
+ handleLegacyDprChange = () => {
136
+ this.installDprWatcher();
137
+ this.resizeNow();
138
+ };
139
+ }
140
+ function normalizePositive(value, fallback) {
141
+ return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : fallback;
142
+ }
143
+ //# sourceMappingURL=ResponsiveController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResponsiveController.js","sourceRoot":"","sources":["../../src/internal/ResponsiveController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { type RendererAdapter, type World, type WorldPlugin, type WorldSystem, type RuntimeSystemsOptions } from '@blcklab/anyo';
2
+ import { type WebSurfacePluginOptions } from '@blcklab/anyo/web-surface';
3
+ import type { AnyoPlayerComponentOptions, AnyoPlayerExplorationOptions, AnyoPlayerRendererOptions, AnyoPlayerPerformanceOptions, AnyoPlayerCameraMode, AnyoPlayerFallRecoveryStatus } from '../types.js';
4
+ import type { WorldValidationOptions } from '@blcklab/anyo';
5
+ import { PlayerCameraController } from './PlayerCameraController.js';
6
+ export interface PlayerRuntime {
7
+ world: World;
8
+ renderer: RendererAdapter;
9
+ camera?: PlayerCameraController;
10
+ }
11
+ export interface RuntimeFactoryOptions {
12
+ canvas: HTMLCanvasElement;
13
+ renderer: AnyoPlayerRendererOptions;
14
+ performance: false | AnyoPlayerPerformanceOptions | undefined;
15
+ exploration: AnyoPlayerExplorationOptions;
16
+ webSurface: false | WebSurfacePluginOptions;
17
+ components?: AnyoPlayerComponentOptions;
18
+ plugins: readonly WorldPlugin[];
19
+ systems?: readonly WorldSystem[];
20
+ systemOptions?: RuntimeSystemsOptions;
21
+ validation?: WorldValidationOptions;
22
+ onWarning: (message: string) => void;
23
+ onCameraModeChange?: (previous: AnyoPlayerCameraMode, mode: AnyoPlayerCameraMode) => void;
24
+ onFallRecoveryChange?: (status: AnyoPlayerFallRecoveryStatus) => void;
25
+ }
26
+ export interface PlayerRuntimeFactory {
27
+ create(options: RuntimeFactoryOptions): PlayerRuntime;
28
+ }
29
+ export interface RuntimePlan {
30
+ backend: 'auto' | 'webgpu' | 'webgl2';
31
+ desktopExploration: false | {
32
+ browserInput: false;
33
+ pointerLock?: boolean;
34
+ lookSensitivity?: number;
35
+ };
36
+ xrEnabled: boolean;
37
+ }
38
+ export declare function createRuntimePlan(renderer: AnyoPlayerRendererOptions, exploration: AnyoPlayerExplorationOptions, onWarning: (message: string) => void): RuntimePlan;
39
+ export declare class DefaultRuntimeFactory implements PlayerRuntimeFactory {
40
+ create(options: RuntimeFactoryOptions): PlayerRuntime;
41
+ }
42
+ //# sourceMappingURL=RuntimeFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuntimeFactory.d.ts","sourceRoot":"","sources":["../../src/internal/RuntimeFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,KAAK,EACV,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,qBAAqB,EAC3B,MAAM,eAAe,CAAA;AAEtB,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EACV,0BAA0B,EAC1B,4BAA4B,EAC5B,yBAAyB,EACzB,4BAA4B,EAC5B,oBAAoB,EACpB,4BAA4B,EAC7B,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAA;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAA;AAGpE,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,eAAe,CAAA;IACzB,MAAM,CAAC,EAAE,sBAAsB,CAAA;CAChC;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,iBAAiB,CAAA;IACzB,QAAQ,EAAE,yBAAyB,CAAA;IACnC,WAAW,EAAE,KAAK,GAAG,4BAA4B,GAAG,SAAS,CAAA;IAC7D,WAAW,EAAE,4BAA4B,CAAA;IACzC,UAAU,EAAE,KAAK,GAAG,uBAAuB,CAAA;IAC3C,UAAU,CAAC,EAAE,0BAA0B,CAAA;IACvC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAA;IAC/B,OAAO,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IAChC,aAAa,CAAC,EAAE,qBAAqB,CAAA;IACrC,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACpC,kBAAkB,CAAC,EAAE,CAAC,QAAQ,EAAE,oBAAoB,EAAE,IAAI,EAAE,oBAAoB,KAAK,IAAI,CAAA;IACzF,oBAAoB,CAAC,EAAE,CAAC,MAAM,EAAE,4BAA4B,KAAK,IAAI,CAAA;CACtE;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,CAAA;CACtD;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACrC,kBAAkB,EAAE,KAAK,GAAG;QAC1B,YAAY,EAAE,KAAK,CAAA;QACnB,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,eAAe,CAAC,EAAE,MAAM,CAAA;KACzB,CAAA;IACD,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,yBAAyB,EACnC,WAAW,EAAE,4BAA4B,EACzC,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GACnC,WAAW,CAkBb;AA2BD,qBAAa,qBAAsB,YAAW,oBAAoB;IAChE,MAAM,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa;CAkDtD"}
@@ -0,0 +1,93 @@
1
+ import { createWorld, entitiesPlugin, explorableBuildingPreset, xrExplorationPlugin, } from '@blcklab/anyo';
2
+ import { Sekai64Renderer } from '@blcklab/anyo/renderer-sekai64';
3
+ import { webSurfacePlugin, } from '@blcklab/anyo/web-surface';
4
+ import { PlayerCameraController } from './PlayerCameraController.js';
5
+ import { applyQualityToRendererOptions } from './PerformanceController.js';
6
+ export function createRuntimePlan(renderer, exploration, onWarning) {
7
+ const requestedBackend = renderer.backend ?? 'auto';
8
+ const vrEnabled = exploration.vr === true || typeof exploration.vr === 'object';
9
+ const backend = vrEnabled ? 'webgl2' : requestedBackend;
10
+ if (vrEnabled && requestedBackend === 'webgpu') {
11
+ onWarning('VR is enabled, so Anyo Player selected Sekai64 WebGL2 instead of WebGPU for the current XR backend.');
12
+ }
13
+ return {
14
+ backend,
15
+ desktopExploration: exploration.desktop === false && exploration.touch === false
16
+ ? false
17
+ : {
18
+ browserInput: false,
19
+ ...(exploration.pointerLock === undefined ? {} : { pointerLock: exploration.pointerLock }),
20
+ ...(exploration.lookSensitivity === undefined ? {} : { lookSensitivity: exploration.lookSensitivity }),
21
+ },
22
+ xrEnabled: vrEnabled,
23
+ };
24
+ }
25
+ function createPlugins(plan, exploration, webSurface, hostPlugins, camera, components) {
26
+ const plugins = explorableBuildingPreset({ exploration: false });
27
+ if (plan.desktopExploration)
28
+ plugins.push(camera.plugin);
29
+ if (components?.registry || components?.unknown) {
30
+ const entityPluginIndex = plugins.findIndex(plugin => plugin.name === 'anyo:entities');
31
+ const configuredEntityPlugin = entitiesPlugin({
32
+ ...(components.registry ? { componentRegistry: components.registry } : {}),
33
+ ...(components.unknown ? { unknownComponents: components.unknown } : {}),
34
+ });
35
+ if (entityPluginIndex >= 0)
36
+ plugins.splice(entityPluginIndex, 1, configuredEntityPlugin);
37
+ else
38
+ plugins.push(configuredEntityPlugin);
39
+ }
40
+ if (plan.xrEnabled)
41
+ plugins.push(xrExplorationPlugin(exploration.xr));
42
+ if (webSurface !== false)
43
+ plugins.push(webSurfacePlugin(webSurface));
44
+ plugins.push(...hostPlugins);
45
+ return plugins;
46
+ }
47
+ export class DefaultRuntimeFactory {
48
+ create(options) {
49
+ const rendererOptions = applyQualityToRendererOptions(options.renderer, options.performance);
50
+ const plan = createRuntimePlan(rendererOptions, options.exploration, options.onWarning);
51
+ const camera = new PlayerCameraController(plan.desktopExploration || { browserInput: false }, options.exploration.fallRecovery === false ? false : (options.exploration.fallRecovery ?? {}), {
52
+ ...(options.onCameraModeChange ? { onModeChange: options.onCameraModeChange } : {}),
53
+ ...(options.onFallRecoveryChange ? { onRecoveryChange: options.onFallRecoveryChange } : {}),
54
+ });
55
+ const renderer = new Sekai64Renderer({
56
+ canvas: options.canvas,
57
+ backend: plan.backend,
58
+ ...(rendererOptions.antialias === undefined ? {} : { antialias: rendererOptions.antialias }),
59
+ ...(rendererOptions.alpha === undefined ? {} : { alpha: rendererOptions.alpha }),
60
+ ...(rendererOptions.pixelRatio === undefined ? {} : { pixelRatio: rendererOptions.pixelRatio }),
61
+ ...(rendererOptions.maxPixelRatio === undefined ? {} : { maxPixelRatio: rendererOptions.maxPixelRatio }),
62
+ ...(rendererOptions.fieldOfView === undefined ? {} : { fieldOfView: rendererOptions.fieldOfView }),
63
+ ...(rendererOptions.near === undefined ? {} : { near: rendererOptions.near }),
64
+ ...(rendererOptions.far === undefined ? {} : { far: rendererOptions.far }),
65
+ ...(rendererOptions.development === undefined ? {} : { development: rendererOptions.development }),
66
+ ...(rendererOptions.maxPointLights === undefined ? {} : { maxPointLights: rendererOptions.maxPointLights }),
67
+ ...(rendererOptions.colorManagement === undefined ? {} : { colorManagement: rendererOptions.colorManagement }),
68
+ ...(rendererOptions.environmentLighting === undefined ? {} : { environmentLighting: rendererOptions.environmentLighting }),
69
+ ...(rendererOptions.shadows === undefined ? {} : { shadows: rendererOptions.shadows }),
70
+ ...(rendererOptions.imageQuality === undefined ? {} : { imageQuality: rendererOptions.imageQuality }),
71
+ ...(rendererOptions.atmosphere === undefined ? {} : { atmosphere: rendererOptions.atmosphere }),
72
+ ...(rendererOptions.colorGrading === undefined ? {} : { colorGrading: rendererOptions.colorGrading }),
73
+ ...(rendererOptions.postProcessing === undefined ? {} : { postProcessing: rendererOptions.postProcessing }),
74
+ ...(rendererOptions.optimization === undefined ? {} : { optimization: rendererOptions.optimization }),
75
+ ...(rendererOptions.entityGeometry === undefined ? {} : { entityGeometry: rendererOptions.entityGeometry }),
76
+ ...(rendererOptions.assetConcurrency === undefined ? {} : { assetConcurrency: rendererOptions.assetConcurrency }),
77
+ ...(rendererOptions.assetLoaders === undefined ? {} : { assetLoaders: rendererOptions.assetLoaders }),
78
+ ...(rendererOptions.modules === undefined ? {} : { modules: rendererOptions.modules }),
79
+ });
80
+ const world = createWorld({
81
+ renderer,
82
+ plugins: createPlugins(plan, options.exploration, options.webSurface, options.plugins, camera, options.components),
83
+ systems: [...(options.systems ?? [])],
84
+ ...(options.systemOptions === undefined ? {} : { systemOptions: options.systemOptions }),
85
+ autoResize: false,
86
+ ...(options.validation === undefined ? {} : { validation: options.validation }),
87
+ onWarning: options.onWarning,
88
+ });
89
+ world.exploration.setInputEnabled(false);
90
+ return { world, renderer, camera };
91
+ }
92
+ }
93
+ //# sourceMappingURL=RuntimeFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RuntimeFactory.js","sourceRoot":"","sources":["../../src/internal/RuntimeFactory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { AnyoPlayerScreenshotOptions, AnyoPlayerScreenshotResult } from '../types.js';
2
+ export declare class ScreenshotController {
3
+ private readonly now;
4
+ constructor(now?: () => Date);
5
+ capture(canvas: HTMLCanvasElement, render: (() => void) | undefined, options?: AnyoPlayerScreenshotOptions): Promise<AnyoPlayerScreenshotResult>;
6
+ private captureBlob;
7
+ }
8
+ //# sourceMappingURL=ScreenshotController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScreenshotController.d.ts","sourceRoot":"","sources":["../../src/internal/ScreenshotController.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,EAAE,0BAA0B,EAAE,MAAM,aAAa,CAAA;AAE1F,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,GAAG;gBAAH,GAAG,GAAE,MAAM,IAAuB;IAEzD,OAAO,CACX,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,EAChC,OAAO,GAAE,2BAAgC,GACxC,OAAO,CAAC,0BAA0B,CAAC;IA8BtC,OAAO,CAAC,WAAW;CAiBpB"}
@@ -0,0 +1,47 @@
1
+ import { AnyoPlayerError } from '../errors.js';
2
+ export class ScreenshotController {
3
+ now;
4
+ constructor(now = () => new Date()) {
5
+ this.now = now;
6
+ }
7
+ async capture(canvas, render, options = {}) {
8
+ const type = options.type ?? 'image/png';
9
+ const quality = options.quality;
10
+ if (!['image/png', 'image/jpeg', 'image/webp'].includes(type)) {
11
+ throw new TypeError('Screenshot type must be image/png, image/jpeg, or image/webp.');
12
+ }
13
+ if (quality !== undefined && (!Number.isFinite(quality) || quality < 0 || quality > 1)) {
14
+ throw new TypeError('Screenshot quality must be a finite number between 0 and 1.');
15
+ }
16
+ try {
17
+ render?.();
18
+ const blob = await this.captureBlob(canvas, type, quality);
19
+ return {
20
+ blob,
21
+ type: blob.type || type,
22
+ width: canvas.width,
23
+ height: canvas.height,
24
+ createdAt: this.now().toISOString(),
25
+ };
26
+ }
27
+ catch (cause) {
28
+ if (cause instanceof AnyoPlayerError)
29
+ throw cause;
30
+ throw new AnyoPlayerError('PLAYER_SCREENSHOT_FAILED', 'Anyo Player could not capture the current canvas frame.', { cause });
31
+ }
32
+ }
33
+ captureBlob(canvas, type, quality) {
34
+ if (typeof canvas.toBlob !== 'function') {
35
+ throw new AnyoPlayerError('PLAYER_SCREENSHOT_UNAVAILABLE', 'Canvas screenshot capture is unavailable in this browser.');
36
+ }
37
+ return new Promise((resolve, reject) => {
38
+ canvas.toBlob(blob => {
39
+ if (blob)
40
+ resolve(blob);
41
+ else
42
+ reject(new AnyoPlayerError('PLAYER_SCREENSHOT_FAILED', 'The browser returned an empty screenshot.'));
43
+ }, type, quality);
44
+ });
45
+ }
46
+ }
47
+ //# sourceMappingURL=ScreenshotController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScreenshotController.js","sourceRoot":"","sources":["../../src/internal/ScreenshotController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,MAAkB,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;QAAlC,QAAG,GAAH,GAAG,CAA+B;IAAG,CAAC;IAEnE,KAAK,CAAC,OAAO,CACX,MAAyB,EACzB,MAAgC,EAChC,UAAuC,EAAE;QAEzC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAA;QACxC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAA;QAC/B,IAAI,CAAC,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,SAAS,CAAC,+DAA+D,CAAC,CAAA;QACtF,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,OAAO,GAAG,CAAC,IAAI,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC;YACvF,MAAM,IAAI,SAAS,CAAC,6DAA6D,CAAC,CAAA;QACpF,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,EAAE,CAAA;YACV,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;YAC1D,OAAO;gBACL,IAAI;gBACJ,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;gBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;aACpC,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,eAAe;gBAAE,MAAM,KAAK,CAAA;YACjD,MAAM,IAAI,eAAe,CACvB,0BAA0B,EAC1B,yDAAyD,EACzD,EAAE,KAAK,EAAE,CACV,CAAA;QACH,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,MAAyB,EAAE,IAAY,EAAE,OAAgB;QAC3E,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACxC,MAAM,IAAI,eAAe,CACvB,+BAA+B,EAC/B,2DAA2D,CAC5D,CAAA;QACH,CAAC;QACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;gBACnB,IAAI,IAAI;oBAAE,OAAO,CAAC,IAAI,CAAC,CAAA;;oBAClB,MAAM,CAAC,IAAI,eAAe,CAC7B,0BAA0B,EAC1B,2CAA2C,CAC5C,CAAC,CAAA;YACJ,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAA;QACnB,CAAC,CAAC,CAAA;IACJ,CAAC;CACF"}
@@ -0,0 +1,44 @@
1
+ import type { World, WorldDocument } from '@blcklab/anyo';
2
+ import type { AnyoPlayerInputMode, AnyoPlayerPauseReason, AnyoPlayerSessionCaptureOptions, AnyoPlayerSessionOptions, AnyoPlayerSessionRestoreOptions, AnyoPlayerSessionSnapshot, AnyoPlayerSessionStorage } from '../types.js';
3
+ export interface SessionCaptureContext {
4
+ world: World;
5
+ document: WorldDocument;
6
+ paused: boolean;
7
+ pauseReason: AnyoPlayerPauseReason | null;
8
+ inputMode: AnyoPlayerInputMode | null;
9
+ }
10
+ export interface SessionRestoreContext {
11
+ world: World;
12
+ document: WorldDocument;
13
+ onWarning: (message: string) => void;
14
+ }
15
+ export interface SessionControllerEnvironment {
16
+ storage?: AnyoPlayerSessionStorage;
17
+ now?: () => Date;
18
+ }
19
+ export declare class SessionController {
20
+ readonly enabled: boolean;
21
+ readonly storageKey: string | null;
22
+ readonly worldKey: string | null;
23
+ readonly restoreOnLoad: boolean;
24
+ readonly saveOnPause: boolean;
25
+ readonly saveOnVisibilityHidden: boolean;
26
+ private readonly options;
27
+ private readonly storage;
28
+ private readonly now;
29
+ constructor(container: HTMLElement, options: false | AnyoPlayerSessionOptions | undefined, environment?: SessionControllerEnvironment);
30
+ get storageAvailable(): boolean;
31
+ capture(context: SessionCaptureContext, options?: AnyoPlayerSessionCaptureOptions): AnyoPlayerSessionSnapshot;
32
+ parse(value: unknown): AnyoPlayerSessionSnapshot;
33
+ restoreWorld(context: SessionRestoreContext, snapshotInput: unknown, options?: AnyoPlayerSessionRestoreOptions): Promise<AnyoPlayerSessionSnapshot>;
34
+ save(key: string | undefined, snapshot: AnyoPlayerSessionSnapshot): Promise<string>;
35
+ load(key?: string): Promise<{
36
+ key: string;
37
+ snapshot: AnyoPlayerSessionSnapshot;
38
+ } | null>;
39
+ clear(key?: string): Promise<string>;
40
+ private assertEnabled;
41
+ private requireStorage;
42
+ private resolveKey;
43
+ }
44
+ //# sourceMappingURL=SessionController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionController.d.ts","sourceRoot":"","sources":["../../src/internal/SessionController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAEzD,OAAO,KAAK,EACV,mBAAmB,EACnB,qBAAqB,EACrB,+BAA+B,EAE/B,wBAAwB,EACxB,+BAA+B,EAC/B,yBAAyB,EACzB,wBAAwB,EACzB,MAAM,aAAa,CAAA;AAMpB,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,aAAa,CAAA;IACvB,MAAM,EAAE,OAAO,CAAA;IACf,WAAW,EAAE,qBAAqB,GAAG,IAAI,CAAA;IACzC,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAAA;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,KAAK,CAAA;IACZ,QAAQ,EAAE,aAAa,CAAA;IACvB,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACrC;AAED,MAAM,WAAW,4BAA4B;IAC3C,OAAO,CAAC,EAAE,wBAAwB,CAAA;IAClC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAA;CACjB;AAgHD,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAA;IAExC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAsC;IAC9D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;gBAG9B,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,KAAK,GAAG,wBAAwB,GAAG,SAAS,EACrD,WAAW,GAAE,4BAAiC;IAahD,IAAI,gBAAgB,IAAI,OAAO,CAE9B;IAED,OAAO,CACL,OAAO,EAAE,qBAAqB,EAC9B,OAAO,GAAE,+BAAoC,GAC5C,yBAAyB;IA+D5B,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,yBAAyB;IA4D1C,YAAY,CAChB,OAAO,EAAE,qBAAqB,EAC9B,aAAa,EAAE,OAAO,EACtB,OAAO,GAAE,+BAAoC,GAC5C,OAAO,CAAC,yBAAyB,CAAC;IAuF/B,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,yBAAyB,GAAG,OAAO,CAAC,MAAM,CAAC;IAgBnF,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,yBAAyB,CAAA;KAAE,GAAG,IAAI,CAAC;IA2BxF,KAAK,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgB1C,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,UAAU;CAUnB"}