import { IDisposable } from "../../Interfaces/IDisposable";
import { Nullable } from "../../types";
export type MeshDesignRefreshRequiredEventArgs = {
    meshes: Nullable<BABYLON.AbstractMesh[]>;
    effect: Nullable<MPlaza.ModelSceneMeshDesignEffect>;
};
export type MeshDesignRefreshRequiredCallback = (evtArg: MeshDesignRefreshRequiredEventArgs) => void;
export type ComposerScriptActions = {
    attributeID: Nullable<number>;
    selectedValue: Nullable<string>;
    actions: MPlaza.AttributeSceneAction[];
};
export type ComposerScript = ComposerScriptActions[];
export declare class SceneActionsExecutor implements IDisposable {
    private _zkScene;
    private _scene;
    private _zkModel;
    private _sceneHelper;
    private _elementSelector;
    private _deviceType;
    private _meshDesignRefreshRequiredListeners;
    private _beginAssetsLoadingListeners;
    private _endAssetsLoadingListeners;
    private _useMaterialOffloading;
    private _prefetchMeshes;
    private _prefetchMaterials;
    get deviceType(): MPlaza.DeviceType;
    set deviceType(value: MPlaza.DeviceType);
    get useMaterialOffloading(): boolean;
    set useMaterialOffloading(value: boolean);
    get prefetchMeshes(): boolean;
    set prefetchMeshes(value: boolean);
    get prefetchMaterials(): boolean;
    set prefetchMaterials(value: boolean);
    constructor(zkScene: Zakeke.Scene, scene: BABYLON.Scene, zkModel?: MPlaza.Model);
    dispose(): void;
    addMeshDesignRefreshRequiredListeners(callback: MeshDesignRefreshRequiredCallback): void;
    private fireMeshDesignRefreshRequiredEvent;
    addBeginAssetsLoadingListener(callback: () => void): void;
    private fireBeginAssetsLoadingEvent;
    addEndAssetsLoadingListener(callback: () => void): void;
    private fireEndAssetsLoadingEvent;
    private isActionForDevice;
    private setupMeshData;
    private setMeshFilterAsync;
    private setMeshVisibilityAsync;
    private chekMeshVisibilityAsync;
    private getMeshByID;
    private getMaterialByID;
    private setCameraLocation;
    private adjustCamera;
    private zoomIn;
    private zoomOut;
    private zoom;
    private setCameraPivot;
    private setCameraZoomEnabled;
    private setMeshMaterial;
    private setSubmeshMaterial;
    private getMaterialFromActionValue;
    private getDelayedMaterialIDFromAction;
    private checkDelayedMaterial;
    private getOffloadedMaterialIDFromAction;
    private checkOffloadedMaterialAsync;
    private getDeepMaterialFromActionValueAsync;
    scriptRequiresDelayedLoading(script: ComposerScript): boolean;
    actionsRequireDelayedLoading(actions: MPlaza.AttributeSceneAction[]): boolean;
    actionRequiresDelayedLoading(action: MPlaza.AttributeSceneAction): boolean;
    private getAllMaterialElementsAsync;
    executeScriptAsync(script: ComposerScript): Promise<void>;
    executeActionsAsync(attributeID: Nullable<number>, selectedValue: Nullable<string>, actions: MPlaza.AttributeSceneAction[], notifyDelayLoading?: boolean): Promise<void>;
    executeActionAsync(attributeID: Nullable<number>, selectedValue: Nullable<string>, action: MPlaza.AttributeSceneAction): Promise<void>;
    executeFilterActionAsync(attributeID: Nullable<number>, selectedValue: Nullable<string>, action: MPlaza.AttributeSceneAction): Promise<void>;
    executeShowHideActionAsync(attributeID: Nullable<number>, selectedValue: Nullable<string>, action: MPlaza.AttributeSceneAction): Promise<void>;
    executeSetMeshMaterialActionAsync(attributeID: Nullable<number>, selectedValue: Nullable<string>, action: MPlaza.AttributeSceneAction): Promise<void>;
    executeSetSubMeshMaterialActionAsync(attributeID: Nullable<number>, selectedValue: Nullable<string>, action: MPlaza.AttributeSceneAction): Promise<void>;
    executeSetMaterialColorActionAsync(attributeID: Nullable<number>, selectedValue: Nullable<string>, action: MPlaza.AttributeSceneAction): Promise<void>;
    executeSetCameraLocationActionAsync(attributeID: Nullable<number>, selectedValue: Nullable<string>, action: MPlaza.AttributeSceneAction): Promise<void>;
    executeAdjustCameraActionAsync(attributeID: Nullable<number>, selectedValue: Nullable<string>, action: MPlaza.AttributeSceneAction): Promise<void>;
    executeSetCameraPivotActionAsync(attributeID: Nullable<number>, selectedValue: Nullable<string>, action: MPlaza.AttributeSceneAction): Promise<void>;
    executeResetCameraPivotActionAsync(attributeID: Nullable<number>, selectedValue: Nullable<string>, action: MPlaza.AttributeSceneAction): Promise<void>;
    executeEnableDisableZoomActionAsync(attributeID: Nullable<number>, selectedValue: Nullable<string>, action: MPlaza.AttributeSceneAction): Promise<void>;
    executeSetMeshDesignMaterialActionAsync(attributeID: Nullable<number>, selectedValue: Nullable<string>, action: MPlaza.AttributeSceneAction): Promise<void>;
    executeSetMeshDesignEffectActionAsync(attributeID: Nullable<number>, selectedValue: Nullable<string>, action: MPlaza.AttributeSceneAction): Promise<void>;
    prefetchMeshesForUnselectedOptionsAsync(actions: MPlaza.AttributeSceneAction[]): Promise<void>;
    checkActionsAssetsAreReadyAsync(actions: MPlaza.AttributeSceneAction[]): Promise<void>;
    prefetchDataForUnselectedOptionsAsync(actions: MPlaza.AttributeSceneAction[]): Promise<void>;
}
