import { BufferGeometry, InstancedMesh, LineSegments, Matrix4, Mesh } from 'three'; import { InstancedLods } from '../render/lods/InstancedLods'; /** * Callback function for models load progress event. * @param progress - progress of loaded models in percent. */ export type ProgressCallbackFunction = (progress: number) => void; /** * Callback function for load model event. * @param modelId - GUID for loaded model. */ export type LoadedCallbackFunction = (modelId: string, isLastModel: boolean) => void; /** * Callback function for notFound model event. * @param modelId - GUID for loaded model. */ export type NotFoundCallbackFunction = (modelId: string) => void; /** * Callback function for error model event. * @param modelId - GUID for loaded model. * @param error - error message. */ export type ErrorCallbackFunction = (modelId: string, error: string) => void; /** * Callback function called for each buffer vertex with custom value. * @param geometry - Current BufferGeometry instance. * @param elNum - Current element number. * @param idx - Current buffer index in BufferGeometry instance. * @param val - Current custom value. */ export type TraverseMeshValCallbackFunction = (geometry: BufferGeometry, elNum: number, idx: number, val: any) => void; /** * Callback function called for each buffer vertex. * @param geometry - Current BufferGeometry instance. * @param elNum - Current element number. * @param idx - Current buffer index in BufferGeometry instance. */ export type TraverseMeshCallbackFunction = (geometry: BufferGeometry, elNum: number, idx: number, val?: any) => void; /** * Callback function called at the end of each buffer traversing. * @param geometry - Current BufferGeometry instance. * @param isMesh - Is buffer mesh or line. */ export type EndTraverseMeshCallbackFunction = (geometry: BufferGeometry, isMesh: boolean, object: Mesh | LineSegments) => void; /** * Callback function called at the start of each buffer before traversing. * @param geometry - Current BufferGeometry instance. * @param objIdx - Current mesh index. * @param isMesh - Is buffer mesh or line. */ export type StartTraverseMeshCallbackFunction = (geometry: BufferGeometry, objIdx: number, isMesh: boolean, object: Mesh | LineSegments) => void; /** * Callback function called for each mesh instance item. * @param child - Current BufferGeometry instance. * @param objIdx - Current mesh index. * @param elNum - Current element number. * @param matrix - Transformation matrix for current item. * @param idx - Instance item number. * @param val - Current custom value. */ export type TraverseInstanceMeshValCallbackFunction = (child: InstancedMesh, objIdx: number, elNum: number, matrix: Matrix4, idx: number, val: any) => void; /** * Callback function called for each instanced mesh item. * @param child - Current BufferGeometry instance. * @param objIdx - Current mesh index. * @param elNum - Current element number. * @param matrix - Transformation matrix for current item. * @param idx - Instance item number. */ export type TraverseInstancedMeshCallbackFunction = (child: InstancedMesh, objIdx: number, elNum: number, matrix: Matrix4, idx: number, val?: any) => void; /** * Callback function called at the end of instanced mesh traversing. * @param child - Current BufferGeometry instance. * @param objIdx - Current mesh index. */ export type EndTraverseInstancedMeshCallbackFunction = (child: InstancedMesh, objIdx: number) => void; /** * Callback function called at the start of instanced mesh traversing. * @param child - Current BufferGeometry instance. * @param objIdx - Current mesh index. */ export type StartTraverseInstancedMeshCallbackFunction = (child: InstancedMesh, objIdx: number) => void; /** * Callback function called for each LOD instance item. * @param child - Current BufferGeometry instance. * @param objIdx - Current mesh index. * @param elNum - Current element number. * @param matrix - Transformation matrix for current item. * @param idx - Instance item number. */ export type TraverseInstancedLodsCallbackFunction = (child: InstancedLods, objIdx: number, elNum: number, matrix: Matrix4, idx: number) => void; /** * Callback function called at the end of LOD traversing. * @param child - Current BufferGeometry instance. * @param objIdx - Current mesh index. */ export type EndTraverseInstancedLodsCallbackFunction = (child: InstancedLods, objIdx: number) => void; /** * Callback function called at the start of LOD traversing. * @param child - Current BufferGeometry instance. * @param objIdx - Current mesh index. */ export type StartTraverseInstancedLodsCallbackFunction = (child: InstancedLods, objIdx: number) => void; /** * Options with callbacks used in traverse functions of {@link SceneManager}. * Used for changing buffers data for particular elements in traversing loop. * @param meshCallback - See {@link TraverseMeshCallbackFunction} * @param endMeshCallback - See {@link EndTraverseMeshCallbackFunction} * @param startMeshCallback - See {@link StartTraverseMeshCallbackFunction} * @param instanceMeshCallback - See {@link TraverseInstancedMeshCallbackFunction} * @param startInstanceMeshCallback - See {@link StartTraverseInstancedMeshCallbackFunction} * @param endInstanceMeshCallback - See {@link EndTraverseInstancedMeshCallbackFunction} * @param instancedLodsCallback - See {@link TraverseInstancedLodsCallbackFunction} * @param startInstancedLodsCallback - See {@link StartTraverseInstancedLodsCallbackFunction} * @param endInstancedLodsCallback - See {@link EndTraverseInstancedLodsCallbackFunction} */ export interface TraverseCallbackOptions { meshCallback?: TraverseMeshCallbackFunction; endMeshCallback?: EndTraverseMeshCallbackFunction; startMeshCallback?: StartTraverseMeshCallbackFunction; instancedMeshCallback?: TraverseInstancedMeshCallbackFunction; startInstancedMeshCallback?: StartTraverseInstancedMeshCallbackFunction; endInstancedMeshCallback?: EndTraverseInstancedMeshCallbackFunction; instancedLodsCallback?: TraverseInstancedLodsCallbackFunction; /** When set, called once per InstancedLods instead of per-instance {@link instancedLodsCallback}. */ instancedLodsSpatialTraverseCallback?: (child: InstancedLods, objIdx: number) => void; startInstancedLodsCallback?: StartTraverseInstancedLodsCallbackFunction; endInstancedLodsCallback?: EndTraverseInstancedLodsCallbackFunction; }