@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,113 @@
1
+ import { AnyoPlayerError } from '../errors.js';
2
+ const DEFAULT_BUFFER_SIZE = 100;
3
+ function finiteInteger(value, fallback, min, max) {
4
+ if (value === undefined)
5
+ return fallback;
6
+ if (!Number.isFinite(value))
7
+ throw new TypeError('Analytics bufferSize must be a finite number.');
8
+ return Math.min(max, Math.max(min, Math.trunc(value)));
9
+ }
10
+ function normalizeDetails(value) {
11
+ if (!value)
12
+ return undefined;
13
+ const seen = new WeakSet();
14
+ const visit = (input, depth) => {
15
+ if (input === null || typeof input === 'string' || typeof input === 'boolean')
16
+ return input;
17
+ if (typeof input === 'number')
18
+ return Number.isFinite(input) ? input : String(input);
19
+ if (typeof input === 'bigint')
20
+ return input.toString();
21
+ if (typeof input === 'undefined' || typeof input === 'function' || typeof input === 'symbol')
22
+ return undefined;
23
+ if (depth >= 6)
24
+ return '[max-depth]';
25
+ if (typeof input !== 'object')
26
+ return String(input);
27
+ if (seen.has(input))
28
+ return '[circular]';
29
+ seen.add(input);
30
+ if (Array.isArray(input))
31
+ return input.map(item => visit(item, depth + 1)).filter(item => item !== undefined);
32
+ const output = {};
33
+ for (const [key, item] of Object.entries(input)) {
34
+ if (key === '__proto__' || key === 'prototype' || key === 'constructor')
35
+ continue;
36
+ const normalized = visit(item, depth + 1);
37
+ if (normalized !== undefined)
38
+ output[key] = normalized;
39
+ }
40
+ return output;
41
+ };
42
+ return Object.freeze(visit(value, 0));
43
+ }
44
+ export class TelemetryController {
45
+ enabledValue;
46
+ categories;
47
+ bufferSize;
48
+ callbacks;
49
+ now;
50
+ sinks = new Set();
51
+ historyValue = [];
52
+ sequence = 0;
53
+ constructor(options, callbacks, now = () => new Date()) {
54
+ this.enabledValue = options !== false && options?.enabled !== false;
55
+ this.callbacks = callbacks;
56
+ this.now = now;
57
+ this.bufferSize = finiteInteger(options === false ? undefined : options?.bufferSize, DEFAULT_BUFFER_SIZE, 0, 1000);
58
+ this.categories = options !== false && options?.categories?.length
59
+ ? new Set(options.categories)
60
+ : null;
61
+ if (options !== false && options?.sink) {
62
+ const initial = Array.isArray(options.sink) ? options.sink : [options.sink];
63
+ for (const sink of initial)
64
+ this.register(sink);
65
+ }
66
+ }
67
+ get enabled() { return this.enabledValue; }
68
+ get history() { return this.historyValue.map(event => structuredClone(event)); }
69
+ register(sink) {
70
+ if (typeof sink !== 'function')
71
+ throw new TypeError('Analytics sink must be a function.');
72
+ this.sinks.add(sink);
73
+ return () => this.sinks.delete(sink);
74
+ }
75
+ clear() { this.historyValue.length = 0; }
76
+ track(name, category, context, details) {
77
+ if (!this.enabledValue || (this.categories && !this.categories.has(category)))
78
+ return null;
79
+ const normalizedName = name.trim();
80
+ if (!normalizedName)
81
+ throw new TypeError('Telemetry event name must not be empty.');
82
+ const normalizedDetails = normalizeDetails(details);
83
+ const event = Object.freeze({
84
+ format: '@blcklab/anyo-player/telemetry',
85
+ version: 1,
86
+ sequence: ++this.sequence,
87
+ name: normalizedName,
88
+ category,
89
+ timestamp: this.now().toISOString(),
90
+ state: context.state,
91
+ phase: context.phase,
92
+ ...(normalizedDetails === undefined ? {} : { details: normalizedDetails }),
93
+ });
94
+ if (this.bufferSize > 0) {
95
+ this.historyValue.push(event);
96
+ if (this.historyValue.length > this.bufferSize)
97
+ this.historyValue.splice(0, this.historyValue.length - this.bufferSize);
98
+ }
99
+ this.callbacks.onEvent(structuredClone(event));
100
+ for (const sink of [...this.sinks]) {
101
+ try {
102
+ void Promise.resolve(sink(structuredClone(event))).catch(cause => {
103
+ this.callbacks.onError(new AnyoPlayerError('PLAYER_ANALYTICS_SINK_FAILED', `An Anyo Player analytics sink rejected the "${event.name}" event.`, { cause }), event);
104
+ });
105
+ }
106
+ catch (cause) {
107
+ this.callbacks.onError(new AnyoPlayerError('PLAYER_ANALYTICS_SINK_FAILED', `An Anyo Player analytics sink threw while handling the "${event.name}" event.`, { cause }), event);
108
+ }
109
+ }
110
+ return structuredClone(event);
111
+ }
112
+ }
113
+ //# sourceMappingURL=TelemetryController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelemetryController.js","sourceRoot":"","sources":["../../src/internal/TelemetryController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import type { AnyoPlayerTouchOptions } from '../types.js';
2
+ import type { ExplorationInputTarget } from './DesktopInputController.js';
3
+ export interface TouchInputCallbacks {
4
+ onEnterRequest(): boolean;
5
+ onTap(clientX: number, clientY: number): void;
6
+ }
7
+ export interface TouchInputConfiguration {
8
+ enabled: boolean;
9
+ showControls: boolean;
10
+ moveLabel: string;
11
+ runLabel: string;
12
+ jumpLabel: string;
13
+ options: AnyoPlayerTouchOptions;
14
+ }
15
+ export declare function detectTouchCapability(container: HTMLElement): boolean;
16
+ export declare class TouchInputController {
17
+ private readonly container;
18
+ private readonly canvas;
19
+ private readonly configuration;
20
+ private readonly callbacks;
21
+ private readonly root;
22
+ private readonly moveZone;
23
+ private readonly moveThumb;
24
+ private readonly runButton;
25
+ private readonly jumpButton;
26
+ private target;
27
+ private movePointer;
28
+ private lookPointer;
29
+ private active;
30
+ private visible;
31
+ private running;
32
+ private disposed;
33
+ private suppressClickUntil;
34
+ private readonly moveRadius;
35
+ private readonly deadZone;
36
+ private readonly moveSensitivity;
37
+ private lookSensitivity;
38
+ private invertY;
39
+ private readonly preventDefault;
40
+ private readonly tapThreshold;
41
+ private readonly tapMaxDuration;
42
+ constructor(container: HTMLElement, canvas: HTMLCanvasElement, configuration: TouchInputConfiguration, callbacks: TouchInputCallbacks);
43
+ get enabled(): boolean;
44
+ get entered(): boolean;
45
+ setLookSettings(scale: number, invertY: boolean): void;
46
+ bind(target: ExplorationInputTarget): void;
47
+ unbind(): void;
48
+ activate(): boolean;
49
+ deactivate(): void;
50
+ setVisible(visible: boolean): void;
51
+ dispose(): void;
52
+ private installCanvasListeners;
53
+ private uninstallCanvasListeners;
54
+ private installControlListeners;
55
+ private uninstallControlListeners;
56
+ private readonly handleCanvasClick;
57
+ private readonly handleCanvasPointerDown;
58
+ private readonly handleCanvasPointerMove;
59
+ private readonly handleCanvasPointerEnd;
60
+ private readonly handleMovePointerDown;
61
+ private readonly handleMovePointerMove;
62
+ private readonly handleMovePointerEnd;
63
+ private readonly handleJump;
64
+ private readonly handleRunStart;
65
+ private readonly handleRunEnd;
66
+ private ensureActive;
67
+ private updateMove;
68
+ private resetMoveVisual;
69
+ private updateRunVisual;
70
+ private consume;
71
+ private capture;
72
+ }
73
+ //# sourceMappingURL=TouchInputController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TouchInputController.d.ts","sourceRoot":"","sources":["../../src/internal/TouchInputController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,379 @@
1
+ const DEFAULT_MOVE_RADIUS = 54;
2
+ const DEFAULT_DEAD_ZONE = 0.08;
3
+ const DEFAULT_MOVE_SENSITIVITY = 1;
4
+ const DEFAULT_LOOK_SENSITIVITY = 1;
5
+ const DEFAULT_TAP_THRESHOLD = 10;
6
+ const DEFAULT_TAP_MAX_DURATION = 500;
7
+ function clamp(value, minimum, maximum) {
8
+ return Math.min(maximum, Math.max(minimum, value));
9
+ }
10
+ function finitePositive(value, fallback) {
11
+ return value !== undefined && Number.isFinite(value) && value > 0 ? value : fallback;
12
+ }
13
+ function finiteNonNegative(value, fallback) {
14
+ return value !== undefined && Number.isFinite(value) && value >= 0 ? value : fallback;
15
+ }
16
+ function isTouchPointer(event) {
17
+ return event.pointerType === 'touch' || event.pointerType === 'pen';
18
+ }
19
+ function eventTime(event) {
20
+ return Number.isFinite(event.timeStamp) && event.timeStamp > 0 ? event.timeStamp : Date.now();
21
+ }
22
+ export function detectTouchCapability(container) {
23
+ const view = container.ownerDocument?.defaultView;
24
+ const navigatorValue = view?.navigator ?? (typeof navigator === 'undefined' ? undefined : navigator);
25
+ if ((navigatorValue?.maxTouchPoints ?? 0) > 0)
26
+ return true;
27
+ return Boolean(view && 'ontouchstart' in view);
28
+ }
29
+ export class TouchInputController {
30
+ container;
31
+ canvas;
32
+ configuration;
33
+ callbacks;
34
+ root;
35
+ moveZone;
36
+ moveThumb;
37
+ runButton;
38
+ jumpButton;
39
+ target = null;
40
+ movePointer = null;
41
+ lookPointer = null;
42
+ active = false;
43
+ visible = false;
44
+ running = false;
45
+ disposed = false;
46
+ suppressClickUntil = 0;
47
+ moveRadius;
48
+ deadZone;
49
+ moveSensitivity;
50
+ lookSensitivity;
51
+ invertY = false;
52
+ preventDefault;
53
+ tapThreshold;
54
+ tapMaxDuration;
55
+ constructor(container, canvas, configuration, callbacks) {
56
+ this.container = container;
57
+ this.canvas = canvas;
58
+ this.configuration = configuration;
59
+ this.callbacks = callbacks;
60
+ const options = configuration.options;
61
+ this.moveRadius = finitePositive(options.moveRadius, DEFAULT_MOVE_RADIUS);
62
+ this.deadZone = clamp(finiteNonNegative(options.deadZone, DEFAULT_DEAD_ZONE), 0, 0.95);
63
+ this.moveSensitivity = finitePositive(options.moveSensitivity, DEFAULT_MOVE_SENSITIVITY);
64
+ this.lookSensitivity = finitePositive(options.lookSensitivity, DEFAULT_LOOK_SENSITIVITY);
65
+ this.preventDefault = options.preventDefault ?? true;
66
+ this.tapThreshold = finiteNonNegative(options.tapThreshold, DEFAULT_TAP_THRESHOLD);
67
+ this.tapMaxDuration = finitePositive(options.tapMaxDuration, DEFAULT_TAP_MAX_DURATION);
68
+ if (configuration.enabled && configuration.showControls) {
69
+ const document = container.ownerDocument;
70
+ this.root = document.createElement('div');
71
+ this.root.classList.add('anyo-player__touch');
72
+ this.root.setAttribute('data-anyo-player-touch', '');
73
+ this.root.setAttribute('aria-label', 'Touch exploration controls');
74
+ this.moveZone = document.createElement('div');
75
+ this.moveZone.classList.add('anyo-player__touch-move');
76
+ this.moveZone.setAttribute('data-anyo-player-touch-move', '');
77
+ this.moveZone.setAttribute('role', 'application');
78
+ this.moveZone.setAttribute('aria-label', configuration.moveLabel);
79
+ this.moveZone.style.setProperty('--anyo-player-touch-radius', `${this.moveRadius}px`);
80
+ const moveBase = document.createElement('div');
81
+ moveBase.classList.add('anyo-player__touch-base');
82
+ this.moveThumb = document.createElement('div');
83
+ this.moveThumb.classList.add('anyo-player__touch-thumb');
84
+ moveBase.appendChild(this.moveThumb);
85
+ this.moveZone.appendChild(moveBase);
86
+ this.root.appendChild(this.moveZone);
87
+ if (options.runButton ?? true) {
88
+ this.runButton = document.createElement('button');
89
+ this.runButton.type = 'button';
90
+ this.runButton.classList.add('anyo-player__touch-run');
91
+ this.runButton.setAttribute('data-anyo-player-touch-run', '');
92
+ this.runButton.setAttribute('aria-pressed', 'false');
93
+ this.runButton.textContent = configuration.runLabel;
94
+ this.root.appendChild(this.runButton);
95
+ }
96
+ else {
97
+ this.runButton = null;
98
+ }
99
+ if (options.jumpButton ?? true) {
100
+ this.jumpButton = document.createElement('button');
101
+ this.jumpButton.type = 'button';
102
+ this.jumpButton.classList.add('anyo-player__touch-jump');
103
+ this.jumpButton.setAttribute('data-anyo-player-touch-jump', '');
104
+ this.jumpButton.textContent = configuration.jumpLabel;
105
+ this.root.appendChild(this.jumpButton);
106
+ }
107
+ else {
108
+ this.jumpButton = null;
109
+ }
110
+ this.container.appendChild(this.root);
111
+ this.installControlListeners();
112
+ this.setVisible(false);
113
+ }
114
+ else {
115
+ this.root = null;
116
+ this.moveZone = null;
117
+ this.moveThumb = null;
118
+ this.runButton = null;
119
+ this.jumpButton = null;
120
+ }
121
+ if (configuration.enabled)
122
+ this.installCanvasListeners();
123
+ }
124
+ get enabled() { return this.configuration.enabled; }
125
+ get entered() { return this.active; }
126
+ setLookSettings(scale, invertY) {
127
+ this.lookSensitivity = finitePositive(scale, DEFAULT_LOOK_SENSITIVITY);
128
+ this.invertY = Boolean(invertY);
129
+ }
130
+ bind(target) {
131
+ if (this.disposed || !this.configuration.enabled)
132
+ return;
133
+ if (this.target && this.target !== target)
134
+ this.deactivate();
135
+ this.target = target;
136
+ this.target.setInputEnabled(false);
137
+ this.target.clearInput();
138
+ }
139
+ unbind() {
140
+ this.deactivate();
141
+ this.target = null;
142
+ }
143
+ activate() {
144
+ if (this.disposed || !this.configuration.enabled || !this.target)
145
+ return false;
146
+ if (this.active)
147
+ return true;
148
+ this.active = true;
149
+ this.target.clearInput();
150
+ this.target.setInputEnabled(true);
151
+ return true;
152
+ }
153
+ deactivate() {
154
+ this.active = false;
155
+ this.movePointer = null;
156
+ this.lookPointer = null;
157
+ this.running = false;
158
+ this.target?.setMoveAxes(0, 0);
159
+ this.target?.setRun(false);
160
+ this.target?.clearInput();
161
+ this.target?.setInputEnabled(false);
162
+ this.resetMoveVisual();
163
+ this.updateRunVisual();
164
+ }
165
+ setVisible(visible) {
166
+ this.visible = visible && this.configuration.enabled;
167
+ if (!this.root)
168
+ return;
169
+ this.root.hidden = !this.visible;
170
+ this.root.setAttribute('aria-hidden', this.visible ? 'false' : 'true');
171
+ }
172
+ dispose() {
173
+ if (this.disposed)
174
+ return;
175
+ this.disposed = true;
176
+ this.deactivate();
177
+ this.uninstallCanvasListeners();
178
+ this.uninstallControlListeners();
179
+ this.target = null;
180
+ if (this.root?.parentNode)
181
+ this.root.parentNode.removeChild(this.root);
182
+ }
183
+ installCanvasListeners() {
184
+ this.canvas.addEventListener('pointerdown', this.handleCanvasPointerDown, { capture: true });
185
+ this.canvas.addEventListener('pointermove', this.handleCanvasPointerMove, { capture: true });
186
+ this.canvas.addEventListener('pointerup', this.handleCanvasPointerEnd, { capture: true });
187
+ this.canvas.addEventListener('pointercancel', this.handleCanvasPointerEnd, { capture: true });
188
+ this.canvas.addEventListener('click', this.handleCanvasClick, { capture: true });
189
+ }
190
+ uninstallCanvasListeners() {
191
+ this.canvas.removeEventListener('pointerdown', this.handleCanvasPointerDown, { capture: true });
192
+ this.canvas.removeEventListener('pointermove', this.handleCanvasPointerMove, { capture: true });
193
+ this.canvas.removeEventListener('pointerup', this.handleCanvasPointerEnd, { capture: true });
194
+ this.canvas.removeEventListener('pointercancel', this.handleCanvasPointerEnd, { capture: true });
195
+ this.canvas.removeEventListener('click', this.handleCanvasClick, { capture: true });
196
+ }
197
+ installControlListeners() {
198
+ this.moveZone?.addEventListener('pointerdown', this.handleMovePointerDown);
199
+ this.moveZone?.addEventListener('pointermove', this.handleMovePointerMove);
200
+ this.moveZone?.addEventListener('pointerup', this.handleMovePointerEnd);
201
+ this.moveZone?.addEventListener('pointercancel', this.handleMovePointerEnd);
202
+ this.moveZone?.addEventListener('lostpointercapture', this.handleMovePointerEnd);
203
+ this.runButton?.addEventListener('pointerdown', this.handleRunStart);
204
+ this.jumpButton?.addEventListener('pointerdown', this.handleJump);
205
+ this.runButton?.addEventListener('pointerup', this.handleRunEnd);
206
+ this.runButton?.addEventListener('pointercancel', this.handleRunEnd);
207
+ this.runButton?.addEventListener('lostpointercapture', this.handleRunEnd);
208
+ }
209
+ uninstallControlListeners() {
210
+ this.moveZone?.removeEventListener('pointerdown', this.handleMovePointerDown);
211
+ this.moveZone?.removeEventListener('pointermove', this.handleMovePointerMove);
212
+ this.moveZone?.removeEventListener('pointerup', this.handleMovePointerEnd);
213
+ this.moveZone?.removeEventListener('pointercancel', this.handleMovePointerEnd);
214
+ this.moveZone?.removeEventListener('lostpointercapture', this.handleMovePointerEnd);
215
+ this.runButton?.removeEventListener('pointerdown', this.handleRunStart);
216
+ this.jumpButton?.removeEventListener('pointerdown', this.handleJump);
217
+ this.runButton?.removeEventListener('pointerup', this.handleRunEnd);
218
+ this.runButton?.removeEventListener('pointercancel', this.handleRunEnd);
219
+ this.runButton?.removeEventListener('lostpointercapture', this.handleRunEnd);
220
+ }
221
+ handleCanvasClick = (event) => {
222
+ if (Date.now() > this.suppressClickUntil)
223
+ return;
224
+ event.preventDefault();
225
+ event.stopPropagation();
226
+ event.stopImmediatePropagation();
227
+ };
228
+ handleCanvasPointerDown = (event) => {
229
+ if (!isTouchPointer(event) || this.lookPointer)
230
+ return;
231
+ if (!this.ensureActive())
232
+ return;
233
+ this.consume(event);
234
+ this.capture(event.currentTarget, event.pointerId);
235
+ this.lookPointer = {
236
+ id: event.pointerId,
237
+ startX: event.clientX,
238
+ startY: event.clientY,
239
+ lastX: event.clientX,
240
+ lastY: event.clientY,
241
+ startedAt: eventTime(event),
242
+ maxDistance: 0,
243
+ };
244
+ };
245
+ handleCanvasPointerMove = (event) => {
246
+ const pointer = this.lookPointer;
247
+ if (!pointer || event.pointerId !== pointer.id || !this.active)
248
+ return;
249
+ this.consume(event);
250
+ const deltaX = event.clientX - pointer.lastX;
251
+ const deltaY = event.clientY - pointer.lastY;
252
+ pointer.lastX = event.clientX;
253
+ pointer.lastY = event.clientY;
254
+ pointer.maxDistance = Math.max(pointer.maxDistance, Math.hypot(event.clientX - pointer.startX, event.clientY - pointer.startY));
255
+ if (Number.isFinite(deltaX) && Number.isFinite(deltaY)) {
256
+ this.target?.addLookDelta(deltaX * this.lookSensitivity, deltaY * this.lookSensitivity * (this.invertY ? -1 : 1));
257
+ }
258
+ };
259
+ handleCanvasPointerEnd = (event) => {
260
+ const pointer = this.lookPointer;
261
+ if (!pointer || event.pointerId !== pointer.id)
262
+ return;
263
+ this.consume(event);
264
+ this.lookPointer = null;
265
+ this.suppressClickUntil = Date.now() + 700;
266
+ const duration = eventTime(event) - pointer.startedAt;
267
+ if (pointer.maxDistance <= this.tapThreshold && duration <= this.tapMaxDuration) {
268
+ this.callbacks.onTap(event.clientX, event.clientY);
269
+ }
270
+ };
271
+ handleMovePointerDown = (event) => {
272
+ if (!isTouchPointer(event) || this.movePointer)
273
+ return;
274
+ if (!this.ensureActive())
275
+ return;
276
+ this.consume(event);
277
+ this.capture(event.currentTarget, event.pointerId);
278
+ this.movePointer = {
279
+ id: event.pointerId,
280
+ startX: event.clientX,
281
+ startY: event.clientY,
282
+ lastX: event.clientX,
283
+ lastY: event.clientY,
284
+ startedAt: eventTime(event),
285
+ maxDistance: 0,
286
+ };
287
+ this.updateMove(event.clientX, event.clientY);
288
+ };
289
+ handleMovePointerMove = (event) => {
290
+ const pointer = this.movePointer;
291
+ if (!pointer || event.pointerId !== pointer.id || !this.active)
292
+ return;
293
+ this.consume(event);
294
+ pointer.lastX = event.clientX;
295
+ pointer.lastY = event.clientY;
296
+ this.updateMove(event.clientX, event.clientY);
297
+ };
298
+ handleMovePointerEnd = (event) => {
299
+ if (!this.movePointer || event.pointerId !== this.movePointer.id)
300
+ return;
301
+ this.consume(event);
302
+ this.movePointer = null;
303
+ this.target?.setMoveAxes(0, 0);
304
+ this.resetMoveVisual();
305
+ };
306
+ handleJump = (event) => {
307
+ if (!isTouchPointer(event) || !this.ensureActive())
308
+ return;
309
+ this.consume(event);
310
+ this.target?.requestJump?.();
311
+ };
312
+ handleRunStart = (event) => {
313
+ if (!isTouchPointer(event) || !this.ensureActive())
314
+ return;
315
+ this.consume(event);
316
+ this.capture(event.currentTarget, event.pointerId);
317
+ this.running = true;
318
+ this.target?.setRun(true);
319
+ this.updateRunVisual();
320
+ };
321
+ handleRunEnd = (event) => {
322
+ if (!this.running)
323
+ return;
324
+ this.consume(event);
325
+ this.running = false;
326
+ this.target?.setRun(false);
327
+ this.updateRunVisual();
328
+ };
329
+ ensureActive() {
330
+ if (this.active)
331
+ return true;
332
+ return this.callbacks.onEnterRequest() && this.active;
333
+ }
334
+ updateMove(clientX, clientY) {
335
+ const pointer = this.movePointer;
336
+ if (!pointer || !this.target)
337
+ return;
338
+ const rawX = clientX - pointer.startX;
339
+ const rawY = clientY - pointer.startY;
340
+ const distance = Math.hypot(rawX, rawY);
341
+ const scale = distance > this.moveRadius ? this.moveRadius / distance : 1;
342
+ const visualX = rawX * scale;
343
+ const visualY = rawY * scale;
344
+ const normalizedX = visualX / this.moveRadius;
345
+ const normalizedY = visualY / this.moveRadius;
346
+ const magnitude = Math.hypot(normalizedX, normalizedY);
347
+ let right = 0;
348
+ let forward = 0;
349
+ if (magnitude > this.deadZone) {
350
+ const adjustedMagnitude = clamp((magnitude - this.deadZone) / (1 - this.deadZone), 0, 1);
351
+ const inverseMagnitude = magnitude > 0 ? 1 / magnitude : 0;
352
+ right = clamp(normalizedX * inverseMagnitude * adjustedMagnitude * this.moveSensitivity, -1, 1);
353
+ forward = clamp(-normalizedY * inverseMagnitude * adjustedMagnitude * this.moveSensitivity, -1, 1);
354
+ }
355
+ this.target.setMoveAxes(right, forward);
356
+ this.moveThumb?.style.setProperty('transform', `translate(${visualX}px, ${visualY}px)`);
357
+ }
358
+ resetMoveVisual() {
359
+ this.moveThumb?.style.setProperty('transform', 'translate(0px, 0px)');
360
+ }
361
+ updateRunVisual() {
362
+ this.runButton?.setAttribute('aria-pressed', this.running ? 'true' : 'false');
363
+ }
364
+ consume(event) {
365
+ if (this.preventDefault)
366
+ event.preventDefault();
367
+ event.stopPropagation();
368
+ }
369
+ capture(target, pointerId) {
370
+ const candidate = target;
371
+ try {
372
+ candidate?.setPointerCapture?.(pointerId);
373
+ }
374
+ catch {
375
+ // Pointer capture can fail when a browser has already cancelled the pointer.
376
+ }
377
+ }
378
+ }
379
+ //# sourceMappingURL=TouchInputController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TouchInputController.js","sourceRoot":"","sources":["../../src/internal/TouchInputController.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { AnyoPlayerVfxTarget } from '../types.js';
2
+ export declare class VfxController {
3
+ private readonly targets;
4
+ private disposed;
5
+ register(target: AnyoPlayerVfxTarget): () => void;
6
+ pause(): void;
7
+ resume(): void;
8
+ dispose(): void;
9
+ get size(): number;
10
+ }
11
+ //# sourceMappingURL=VfxController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VfxController.d.ts","sourceRoot":"","sources":["../../src/internal/VfxController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAEtD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAQ;IACxB,QAAQ,CAAC,MAAM,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAOjD,KAAK,IAAI,IAAI;IACb,MAAM,IAAI,IAAI;IACd,OAAO,IAAI,IAAI;IACf,IAAI,IAAI,IAAI,MAAM,CAA6B;CAChD"}
@@ -0,0 +1,23 @@
1
+ export class VfxController {
2
+ targets = new Set();
3
+ disposed = false;
4
+ register(target) {
5
+ if (this.disposed)
6
+ throw new Error('Anyo Player VFX lifecycle has been disposed.');
7
+ if (!target || typeof target !== 'object' || (typeof target.onPause !== 'function' && typeof target.onResume !== 'function'))
8
+ throw new TypeError('VFX targets must implement onPause() or onResume().');
9
+ this.targets.add(target);
10
+ let active = true;
11
+ return () => { if (!active)
12
+ return; active = false; this.targets.delete(target); };
13
+ }
14
+ pause() { if (this.disposed)
15
+ return; for (const target of this.targets)
16
+ target.onPause?.(); }
17
+ resume() { if (this.disposed)
18
+ return; for (const target of this.targets)
19
+ target.onResume?.(); }
20
+ dispose() { this.disposed = true; this.targets.clear(); }
21
+ get size() { return this.targets.size; }
22
+ }
23
+ //# sourceMappingURL=VfxController.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VfxController.js","sourceRoot":"","sources":["../../src/internal/VfxController.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,aAAa;IACP,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAA;IACjD,QAAQ,GAAG,KAAK,CAAA;IACxB,QAAQ,CAAC,MAA2B;QAClC,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;QAClF,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,UAAU,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,qDAAqD,CAAC,CAAA;QACxM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACxB,IAAI,MAAM,GAAG,IAAI,CAAA;QACjB,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA,CAAC,CAAC,CAAA;IACnF,CAAC;IACD,KAAK,KAAW,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;QAAE,MAAM,CAAC,OAAO,EAAE,EAAE,CAAA,CAAC,CAAC;IAClG,MAAM,KAAW,IAAI,IAAI,CAAC,QAAQ;QAAE,OAAO,CAAC,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;QAAE,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAA,CAAC,CAAC;IACpG,OAAO,KAAW,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA,CAAC,CAAC;IAC9D,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA,CAAC,CAAC;CAChD"}