import type { Object3D } from '@anov/3d-core'; import { Vector3 } from '@anov/3d-core'; import ObjectLayer from '../Base/ObjectLayer'; import type { MaterialSwitchSystemInterface } from '.'; type MaterialSwitchType = 'Real' | 'Fresnel' | 'Frame' | 'Pure'; export declare enum SwitchType { Real = "Real", Fresnel = "Fresnel", Frame = "Frame", Pure = "Pure" } interface MaterialSwitchOption { duration?: number; center?: Vector3; isApi?: boolean; } interface MaterialSwitchUniforms { progress: { value: number; }; isFresnelFadeIn: { value: boolean; }; isRealFadeIn: { value: boolean; }; isPureFadeIn: { value: boolean; }; isFrameFadeIn: { value: boolean; }; maxSize: { value: number; }; center: { value: Vector3; }; time: { value: number; }; isApi: { value: boolean; }; height: { value: number; }; } type RuleItem = { type: string; keys: string[] | string; material: string; limit?: SwitchType; }; /** * 材质切换系统 */ export declare class MaterialSwitchSystem extends ObjectLayer implements MaterialSwitchSystemInterface { type: MaterialSwitchType; originalMaterial: Map; uniforms: MaterialSwitchUniforms; private objects; private objectsMap; private frame; private gsap; private duration; private center; private isGenPlane; private rules; constructor(options?: MaterialSwitchOption, sceneControl?: any); private initializeUniforms; private initializeBuiltInShader; private hideAllObjects; private showObjectsByType; switchType(type: MaterialSwitchType, option?: { mode: 'auto' | 'time'; duration?: number; center?: number[]; genPlane?: boolean; rules?: RuleItem[]; }): void; private handleApiOption; private cleanupAnimations; private prepareForSwitch; private startSwitchAnimation; private animateWithGSAP; private beginBySpeed; private animateWithFrame; addObject(object: Object3D): void; private getObjectUuid; private handleGroundObject; private handleGroundMatching; private getMaterialByName; private replaceMaterial; private resetMaterial; private handleNameMatching; private handleSizeMatching; private matchingStrategy; private handleMatch; private handleNormalObject; removeObject(object: Object3D): void; private createGroundMesh; private updateGroundMesh; private get box3(); private getMaxSize; private getBoxVertices; private calculateMaxDistance; private generateFresnelObject; private generateRealObject; private generatePureObject; private generateFrameObject; private updateVisibility; } export {};