@lifeart/gxt
Version:
<img align="right" width="95" height="95" alt="Philosopher’s stone, logo of PostCSS" src="./public/logo.png">
51 lines (49 loc) • 1.91 kB
TypeScript
import { Cell } from '../../reactive';
import { Camera, Scene, WebGLRenderer, Object3D, Raycaster, Vector2 } from 'three';
export declare const TRES_CONTEXT: unique symbol;
export interface TresContextState {
scene: Scene;
camera: Cell<Camera | null>;
cameras: Cell<Camera[]>;
renderer: Cell<WebGLRenderer | null>;
raycaster: Raycaster | null;
pointer: Vector2 | null;
onBeforeRender: Set<(state: TresContextState, delta: number) => void>;
onAfterRender: Set<(state: TresContextState, delta: number) => void>;
interactiveObjects: Set<Object3D>;
isRunning: Cell<boolean>;
}
export interface TresContext {
/** The Three.js scene */
scene: Scene;
/** Get the active camera */
getCamera(): Camera | null;
/** Get all registered cameras */
getCameras(): Camera[];
/** Get the WebGL renderer */
getRenderer(): WebGLRenderer | null;
/** Register a callback to run before each render */
onBeforeRender(callback: (state: TresContextState, delta: number) => void): () => void;
/** Register a callback to run after each render */
onAfterRender(callback: (state: TresContextState, delta: number) => void): () => void;
/** Register an object for pointer events */
registerInteractiveObject(object: Object3D): void;
/** Unregister an object from pointer events */
unregisterInteractiveObject(object: Object3D): void;
/** Pause the render loop */
pause(): void;
/** Resume the render loop */
resume(): void;
/** Check if the render loop is running */
isRunning(): boolean;
/** Internal state (for advanced use) */
state: TresContextState;
}
/**
* Create a new Tres context state
*/
export declare function createTresContextState(scene: Scene): TresContextState;
/**
* Create a Tres context from state
*/
export declare function createTresContext(state: TresContextState): TresContext;