import { JsFunctionName } from '../../../utils/shaders/ShaderName';
import { BaseJsDefinition, TriggerableJsDefinitionOptions } from '../../utils/JsDefinition';
import { JsLinesController, DefinitionTraverseCallback, AddBodyLinesOptions } from './LinesController';
import { BaseJsNodeType } from '../../_Base';
import { BaseJsShaderAssembler } from '../assemblers/_Base';
import { RegisterableVariable } from '../assemblers/_BaseJsPersistedConfigUtils';
import { JsConnectionPointType } from '../../../utils/io/connections/Js';
import { BaseNamedFunction } from '../../../../functions/_Base';
import { EvaluatorMethodName } from '../assemblers/actor/ActorEvaluator';
export interface ComputedValueJsDefinitionData {
    dataType: JsConnectionPointType;
    varName: string;
    value: string;
}
interface TriggeringJsDefinitionOptionsExtended {
    gatherable: boolean;
    triggeringMethodName?: EvaluatorMethodName;
    nodeMethodName?: string;
}
interface TriggerableJsDefinitionOptionsExtended extends TriggerableJsDefinitionOptions {
    addTriggeredLines?: boolean;
}
interface AddBodyOrComputedOptions {
    constPrefix?: boolean;
}
export declare class JsLinesCollectionController {
    private _shaderNames;
    private _currentShaderName;
    private _assembler;
    private _linesControllerByShaderName;
    constructor(_shaderNames: JsFunctionName[], _currentShaderName: JsFunctionName, _assembler: BaseJsShaderAssembler);
    assembler(): BaseJsShaderAssembler;
    linesController(shaderName: JsFunctionName): JsLinesController | undefined;
    shaderNames(): JsFunctionName[];
    setCurrentShaderName(shaderName: JsFunctionName): void;
    currentShaderName(): JsFunctionName;
    addVariable(node: BaseJsNodeType, variable: RegisterableVariable, varName?: string): string;
    addFunction(node: BaseJsNodeType, namedFunction: BaseNamedFunction): void;
    addTriggeringLines(node: BaseJsNodeType, triggeringLines: string[], options: TriggeringJsDefinitionOptionsExtended): void;
    addTriggerableLines(node: BaseJsNodeType, triggerableLines: string[], options?: TriggerableJsDefinitionOptionsExtended): void;
    addComputedVarName(varName: string): void;
    registeredAsComputed(varName: string): boolean;
    addBodyOrComputed(node: BaseJsNodeType, linesData: ComputedValueJsDefinitionData[], options?: AddBodyOrComputedOptions): void;
    addComputed(node: BaseJsNodeType, linesData: ComputedValueJsDefinitionData[]): void;
    addDefinitions(node: BaseJsNodeType, definitions: BaseJsDefinition[], shaderName?: JsFunctionName): void;
    definitions(shaderName: JsFunctionName, node: BaseJsNodeType): BaseJsDefinition[] | undefined;
    traverseDefinitions(shaderName: JsFunctionName, callback: DefinitionTraverseCallback): void;
    _addBodyLines(node: BaseJsNodeType, lines: string[], shaderName?: JsFunctionName, options?: AddBodyLinesOptions): void;
    bodyLines(shaderName: JsFunctionName, node: BaseJsNodeType): string[] | undefined;
}
export {};
