import "./engine/webcomponents/needle-engine.js"; import "./engine/engine_setup.js"; import "./engine/engine_audio.js"; export * from "./engine/api.js"; export * from "./engine-components/api.js"; export * from "./engine-components-experimental/api.js"; export * from "./engine-schemes/api.js"; // make accessible for external javascript import { Context, loadAsset, NeedleXRSession, onAfterRender, onBeforeRender, onClear, onDestroy, onInitialized, onStart, onUpdate, VERSION } from "./engine/api.js"; const Needle = { VERSION: VERSION, Context: Context, NeedleXRSession: NeedleXRSession, assets: { loadFromURL: loadAsset, }, onStart: onStart, onUpdate: onUpdate, onBeforeRender: onBeforeRender, onAfterRender: onAfterRender, onInitializedContext: onInitialized, onDestroyContext: onDestroy, onClearContext: onClear, }; if (globalThis["Needle"]?.VERSION !== undefined) { console.warn(`Needle Engine is already imported: ${globalThis["Needle"].VERSION}`); } function registerGlobal(obj: object) { for (const key in obj) { Needle[key] = obj[key]; } } import * as Component from "./engine-components/Component.js"; registerGlobal(Component); import * as Components from "./engine-components/codegen/components.js"; registerGlobal(Components); import { GameObject } from "./engine-components/Component.js"; for (const method of Object.getOwnPropertyNames(GameObject)) { switch (method) { case "prototype": case "constructor": case "length": case "name": continue; default: Needle[method] = GameObject[method]; break; } } if (!globalThis["Needle"]) { globalThis["Needle"] = Needle; } else { for (const key in Needle) { globalThis["Needle"][key] = Needle[key]; } } // make three accessible import * as THREE from "three"; if (!globalThis["THREE"]) { globalThis["THREE"] = THREE; } else console.warn("Three.js is already imported");