import type { Engine, HitTestBoxParams, HitTestCustomParams, HitTestSphereParams, Renderer, VFXItem } from '@galacean/effects';
import { Behaviour, RendererComponent, AnimationClip } from '@galacean/effects';
import type { ModelCameraComponentData, ModelItemBounding, ModelLightComponentData, ModelMeshComponentData, ModelSkyboxComponentData, AnimationComponentData } from '../index';
import type { PSceneManager, Euler } from '../runtime';
import { PCamera, PLight, PMesh, PSkybox, Vector3 } from '../runtime';
/**
 * 插件 Mesh 组件类，支持 3D Mesh 渲染能力
 * @since 2.0.0
 */
export declare class ModelMeshComponent extends RendererComponent {
    /**
     * 内部 Mesh 对象
     */
    content: PMesh;
    /**
     * 参数
     */
    data?: ModelMeshComponentData;
    /**
     * 包围盒
     */
    bounding?: ModelItemBounding;
    /**
     * 场景管理器
     */
    sceneManager?: PSceneManager;
    /**
     * morph 动画权重
     */
    morphWeights: number[];
    /**
     * 构造函数，只保存传入参数，不在这里创建内部对象
     * @param engine - 引擎
     * @param data - Mesh 参数
     */
    constructor(engine: Engine, data?: ModelMeshComponentData);
    /**
     * 组件开始，需要创建内部对象，更新父元素信息和添加到场景管理器中
     */
    onStart(): void;
    /**
     * 组件更新，更新内部对象状态
     * @param dt - 更新间隔
     */
    onUpdate(dt: number): void;
    /**
     * 组件晚更新，晚更新内部对象状态
     * @param dt - 更新间隔
     */
    onLateUpdate(dt: number): void;
    /**
     * 组件渲染，需要检查可见性
     * @param renderer - 渲染器
     * @returns
     */
    render(renderer: Renderer): void;
    /**
     * 组件销毁，需要重场景管理器中删除
     */
    onDestroy(): void;
    /**
     * 反序列化，记录传入参数
     * @param data - 组件参数
     */
    fromData(data: ModelMeshComponentData): void;
    /**
     * 创建内部对象
     */
    createContent(): void;
    /**
     * 设置当前 Mesh 的可见性。
     * @param visible - true：可见，false：不可见
     */
    setVisible(visible: boolean): void;
    /**
     * 获取当前 Mesh 的可见性。
     */
    getVisible(): boolean;
    /**
     * 获取点击测试参数，根据元素包围盒进行相交测试，Mesh 对象会进行更加精确的点击测试
     * @param force - 是否强制进行点击测试
     * @returns 点击测试参数
     */
    getHitTestParams: (force?: boolean) => HitTestBoxParams | HitTestSphereParams | HitTestCustomParams | undefined;
    /**
     * 计算元素包围盒，只针对 Mesh 对象
     * @returns 包围盒
     */
    computeBoundingBox(): ModelItemBounding | undefined;
}
/**
 * 插件天空盒组件类，支持 3D 天空盒渲染能力
 * @since 2.0.0
 */
export declare class ModelSkyboxComponent extends RendererComponent {
    /**
     * 内部天空盒对象
     */
    content: PSkybox;
    /**
     * 天空盒参数
     */
    data?: ModelSkyboxComponentData;
    /**
     * 场景管理器
     */
    sceneManager?: PSceneManager;
    /**
     * 构造函数，只保存传入参数，不在这里创建内部对象
     * @param engine - 引擎
     * @param data - Mesh 参数
     */
    constructor(engine: Engine, data?: ModelSkyboxComponentData);
    /**
     * 组件开始，需要创建内部对象和添加到场景管理器中
     */
    onStart(): void;
    /**
     * 组件渲染，需要检查可见性
     * @param renderer - 渲染器
     * @returns
     */
    render(renderer: Renderer): void;
    /**
     * 组件销毁，需要重场景管理器中删除
     */
    onDestroy(): void;
    /**
     * 反序列化，记录传入参数
     * @param data - 组件参数
     */
    fromData(data: ModelSkyboxComponentData): void;
    /**
     * 创建内部对象
     */
    createContent(): void;
    /**
     * 设置当前可见性。
     * @param visible - true：可见，false：不可见
     */
    setVisible(visible: boolean): void;
    /**
     * 获取当前可见性。
     */
    getVisible(): boolean;
}
/**
 * 插件灯光组件类，支持 3D 灯光能力
 * @since 2.0.0
 */
export declare class ModelLightComponent extends Behaviour {
    /**
     * 内部灯光对象
     */
    content: PLight;
    /**
     * 参数
     */
    data?: ModelLightComponentData;
    /**
     * 构造函数，只保存传入参数，不在这里创建内部对象
     * @param engine - 引擎
     * @param data - Mesh 参数
     */
    constructor(engine: Engine, data?: ModelLightComponentData);
    /**
     * 组件开始，需要创建内部对象和添加到场景管理器中
     */
    onStart(): void;
    /**
     * 组件更新，更新内部对象状态
     * @param dt - 更新间隔
     */
    onUpdate(dt: number): void;
    /**
     * 组件销毁
     */
    onDestroy(): void;
    /**
     * 反序列化，记录传入参数
     * @param data - 组件参数
     */
    fromData(data: ModelLightComponentData): void;
    /**
     * 创建内部对象
     */
    createContent(): void;
    /**
     * 设置当前可见性。
     * @param visible - true：可见，false：不可见
     */
    setVisible(visible: boolean): void;
    /**
     * 获取当前 Mesh 的可见性。
     */
    getVisible(): boolean;
}
/**
 * 插件相机组件类，支持 3D 相机能力
 * @since 2.0.0
 */
export declare class ModelCameraComponent extends Behaviour {
    /**
     * 内部相机对象
     */
    content: PCamera;
    /**
     * 参数
     */
    data?: ModelCameraComponentData;
    /**
     * 构造函数，只保存传入参数，不在这里创建内部对象
     * @param engine - 引擎
     * @param data - Mesh 参数
     */
    constructor(engine: Engine, data?: ModelCameraComponentData);
    /**
     * 组件开始，需要创建内部对象和添加到场景管理器中
     */
    onStart(): void;
    /**
     * 组件更新，更新内部对象状态
     * @param dt - 更新间隔
     */
    onUpdate(dt: number): void;
    /**
     * 组件销毁
     */
    onDestroy(): void;
    /**
     * 反序列化，记录传入参数
     * @param data - 组件参数
     */
    fromData(data: ModelCameraComponentData): void;
    /**
     * 创建内部对象
     */
    createContent(): void;
    /**
     * 更新合成主相机，更加当前相机元素状态
     */
    updateMainCamera(): void;
    /**
     * 设置变换
     * @param position - 位置
     * @param rotation - 旋转
     */
    setTransform(position?: Vector3, rotation?: Euler): void;
}
/**
 * 插件动画组件类，支持 3D 动画能力
 * @since 2.0.0
 */
export declare class AnimationComponent extends Behaviour {
    /**
     * 参数
     */
    data?: AnimationComponentData;
    elapsedTime: number;
    animation: number;
    clips: ModelAnimationClip[];
    /**
     * 构造函数，只保存传入参数，不在这里创建内部对象
     * @param engine - 引擎
     */
    constructor(engine: Engine);
    /**
     * 组件开始，需要创建内部对象和添加到场景管理器中
     */
    onStart(): void;
    /**
     * 组件更新，更新内部对象状态
     * @param dt - 更新间隔
     */
    onUpdate(dt: number): void;
    /**
     * 组件销毁
     */
    onDestroy(): void;
    /**
     * 反序列化，记录传入参数
     * @param data - 组件参数
     */
    fromData(data: AnimationComponentData): void;
}
declare class ModelAnimationClip extends AnimationClip {
    path2Node: Record<string, VFXItem>;
    sampleAnimation(vfxItem: VFXItem, time: number): void;
    setFromAnimationClip(clip: AnimationClip): void;
    getTargetItem(rootItem: VFXItem, path: string): VFXItem;
}
export {};
