import { System, Game, PureObserverInfo, ComponentChanged, GameObject, UpdateParams } from '@combos-fun/engine'; import { Scene, PerspectiveCamera, WebGLRenderer, Clock, AnimationMixer, Group } from 'three'; import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js'; interface ThreeContextParams { canvas?: HTMLCanvasElement; container?: HTMLElement; width: number; height: number; antialias?: boolean; backgroundColor?: number; backgroundAlpha?: number; } declare class ThreeContext { scene: Scene; camera: PerspectiveCamera; renderer: WebGLRenderer; clock: Clock; gltfLoader: GLTFLoader; mixers: Map; models: Map; constructor(params: ThreeContextParams); update(): void; loadGLB(id: number, url: string): Promise; playAnimation(id: number, animationIndex: number, speed: number): void; stopAnimation(id: number): void; removeModel(id: number): void; resize(width: number, height: number): void; destroy(): void; } declare class Renderer3D extends System { name: string; game: Game; static observerInfo: PureObserverInfo; observerInfo: PureObserverInfo; rendererManager: Renderer3DManager; threeContext: ThreeContext; constructor(params?: T); componentChanged(_changed: ComponentChanged): void; rendererUpdate(_gameObject: GameObject): void; update(e?: UpdateParams): void; protected asyncIdMap: Record; protected increaseAsyncId(id: number): number; protected validateAsyncId(id: number, asyncId: number): boolean; } declare class Renderer3DManager { game: Game; rendererSystem: Renderer3DSystem; renderers: Renderer3D[]; constructor({ game, rendererSystem }: { game: Game; rendererSystem: Renderer3DSystem; }); register(...renderers: Renderer3D[]): void; componentChanged(changes: ComponentChanged[]): void; update(gameObject: GameObject): void; } interface Renderer3DSystemParams extends Partial { canvas?: HTMLCanvasElement; container?: HTMLElement; width?: number; height?: number; antialias?: boolean; backgroundColor?: number; backgroundAlpha?: number; } declare class Renderer3DSystem extends System { static systemName: string; name: string; threeContext: ThreeContext; rendererManager: Renderer3DManager; init(params?: Renderer3DSystemParams): void; update(e?: UpdateParams): void; lateUpdate(): void; resize(width: number, height: number): void; onDestroy(): void; } export { Renderer3D, Renderer3DManager, Renderer3DSystem, ThreeContext }; export type { Renderer3DSystemParams, ThreeContextParams };