@needle-tools/engine
Version:
Needle Engine is a web-based runtime for 3D apps. It runs on your machine for development with great integrations into editors like Unity or Blender - and can be deployed onto any device! It is flexible, extensible and networking and XR are built-in.
103 lines (94 loc) • 3.1 kB
text/typescript
import type { NeedleXRSession } from "./NeedleXRSession.js";
export declare type XRSessionEventArgs = { session: NeedleXRSession };
const onXRSessionStartListeners: ((evt: XRSessionEventArgs) => void)[] = [];
/**
* Add a listener for when an XR session starts
* This event is triggered when the XR session is started, either by the user or by the application before all other XR start events
* @param fn The function to call when the XR session starts
* @example
* ```js
* onXRSessionStart((evt) => {
* console.log("XR session started", evt);
* });
* ```
*/
export function onXRSessionStart(fn: (evt: XRSessionEventArgs) => void) {
if (onXRSessionStartListeners.indexOf(fn) === -1) {
onXRSessionStartListeners.push(fn);
}
}
/**
* Remove a listener for when an XR session starts
* @param fn The function to remove from the listeners
* @example
* ```js
* const myFunction = (evt) => {
* console.log("XR session started", evt);
* };
* onXRSessionStart(myFunction);
* offXRSessionStart(myFunction);
* ```
*/
export function offXRSessionStart(fn: (evt: XRSessionEventArgs) => void) {
const index = onXRSessionStartListeners.indexOf(fn);
if (index !== -1) {
onXRSessionStartListeners.splice(index, 1);
}
}
const onXRSessionEndListeners: ((evt: XRSessionEventArgs) => void)[] = [];
/**
* Add a listener for when an XR session ends
* This event is triggered when the XR session is ended, either by the user or by the application before all other XR end events
* @param fn The function to call when the XR session ends
* @example
* ```js
* onXRSessionEnd((evt) => {
* console.log("XR session ended", evt);
* });
* ```
*/
export function onXRSessionEnd(fn: (evt: XRSessionEventArgs) => void) {
if (onXRSessionEndListeners.indexOf(fn) === -1) {
onXRSessionEndListeners.push(fn);
}
};
/**
* Remove a listener for when an XR session ends
* @param fn The function to remove from the listeners
* @example
* ```js
* const myFunction = (evt) => {
* console.log("XR session ended", evt);
* };
* onXRSessionEnd(myFunction);
* offXRSessionEnd(myFunction);
* ```
*/
export function offXRSessionEnd(fn: (evt: XRSessionEventArgs) => void) {
const index = onXRSessionEndListeners.indexOf(fn);
if (index !== -1) {
onXRSessionEndListeners.splice(index, 1);
}
}
/**
* @internal
* Invoke the XRSessionStart event
* @param evt The XRSession event arguments
*/
export function invokeXRSessionStart(evt: XRSessionEventArgs) {
globalThis.dispatchEvent(new CustomEvent("needle-xrsession-start", { detail: evt }));
for (let i = 0; i < onXRSessionStartListeners.length; i++) {
onXRSessionStartListeners[i](evt);
}
}
/**
* @internal
* Invoke the XRSessionEnd event
* @param evt The XRSession event arguments
*/
export function invokeXRSessionEnd(evt: XRSessionEventArgs) {
globalThis.dispatchEvent(new CustomEvent("needle-xrsession-end", { detail: evt }));
for (let i = 0; i < onXRSessionEndListeners.length; i++) {
onXRSessionEndListeners[i](evt);
}
}