UNPKG

@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.

30 lines (25 loc) 1.58 kB
import { SerializationContext } from "./engine_serialization_core.js"; import { Context } from "./engine_setup.js"; import type { ConstructorConcrete, GLTF, Model, SourceIdentifier, UIDProvider } from "./engine_types.js"; import { NEEDLE_components } from "./extensions/NEEDLE_components.js"; export interface INeedleGltfLoader { createBuiltinComponents(context: Context, gltfId: SourceIdentifier, gltf: GLTF, seed: number | null | UIDProvider, extension?: NEEDLE_components): Promise<void> writeBuiltinComponentData(comp: object, context: SerializationContext); parseSync(context: Context, data: string | ArrayBuffer, path: string, seed: number | UIDProvider | null): Promise<Model | undefined>; loadSync(context: Context, url: string, sourceId: string, seed: number | UIDProvider | null, prog?: (prog: ProgressEvent) => void): Promise<Model | undefined> } let gltfLoader: INeedleGltfLoader; let gltfLoaderType: ConstructorConcrete<INeedleGltfLoader> | null = null; export function getLoader(): INeedleGltfLoader { return gltfLoader; } export function registerLoader<T extends INeedleGltfLoader>(loader: ConstructorConcrete<T>) { if (loader === null || loader === undefined) { console.warn("Oh no: someone tried registering a non-existend gltf-loader. When you see this log it might mean that needle-engine is being imported multiple times. Please check your project setup."); return; } if (gltfLoaderType !== loader) { gltfLoaderType = loader; gltfLoader = new loader(); } }