@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.
71 lines (63 loc) • 2.09 kB
text/typescript
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");