import type { Component } from "./Component";
import type { ComponentConstructor } from "./ComponentConstructor";
import { GameObject } from "./GameObject";
import type { InitializeComponent } from "./InitializeComponent";
import type { PrefabRef } from "./PrefabRef";
/**
 * builder for GameObject
 */
export declare class GameObjectBuilder {
    private readonly _gameObject;
    private readonly _children;
    private readonly _componentInitializeFuncList;
    private _isBuilt;
    /**
     * set active in hierarchy
     * @param active
     * @returns
     */
    active(active: boolean): GameObjectBuilder;
    /**
     * get gameObject as call by reference
     * @param gameObjectRef
     * @returns
     */
    getGameObject(gameObjectRef: PrefabRef<GameObject>): GameObjectBuilder;
    /**
     * get component of componentCtor: ComponentConstructor<T> as call by reference
     * @param componentCtor
     * @param componentRef
     * @returns
     */
    getComponent<T extends Component>(componentCtor: ComponentConstructor<T>, componentRef: PrefabRef<T>): GameObjectBuilder;
    /**
     * get all components as call by reference
     * @param componentsRef
     * @returns
     */
    getComponents(componentsRef: PrefabRef<Component[]>): GameObjectBuilder;
    /**
     * get all components of componentCtor: ComponentConstructor<T> as call by reference
     * @param componentsRef
     * @param componentCtor
     * @returns
     */
    getComponents<T extends Component>(componentsRef: PrefabRef<T[]>, componentCtor: ComponentConstructor<T>): GameObjectBuilder;
    /**
     * get component of componentCtor: ComponentConstructor<T> in GameObject or any of its children as call by reference
     * @param componentCtor
     * @param componentRef
     * @returns
     */
    getComponentInChildren<T extends Component>(componentCtor: ComponentConstructor<T>, componentRef: PrefabRef<T>): GameObjectBuilder;
    /**
     * get all components in GameObject or any of its children as call by reference
     * @param componentsRef
     * @returns
     */
    getComponentsInChildren(componentsRef: PrefabRef<Component[]>): GameObjectBuilder;
    /**
     * get all components of componentCtor: ComponentConstructor<T> in GameObject or any of its children as call by reference
     * @param componentsRef
     * @param componentCtor
     * @returns
     */
    getComponentsInChildren<T extends Component>(componentsRef: PrefabRef<T[]>, componentCtor: ComponentConstructor<T>): GameObjectBuilder;
    /**
     * add component of componentCtor: ComponentConstructor<T> to GameObject
     * @param componentCtor
     * @returns
     */
    withComponent<T extends Component>(componentCtor: ComponentConstructor<T>): GameObjectBuilder;
    /**
     * add component of componentCtor: ComponentConstructor<T> to GameObject with initialize function
     * @param componentCtor
     * @param componentInitializeFunc
     * @returns
     */
    withComponent<T extends Component>(componentCtor: ComponentConstructor<T>, componentInitializeFunc?: (component: InitializeComponent<T>) => void): GameObjectBuilder;
    /**
     * with child GameObject
     * @param child
     * @returns
     */
    withChild(child: GameObjectBuilder): GameObjectBuilder;
    private checkComponentRequirements;
    private registerTransform;
    private chackComponentRequirementsRecursive;
    private componentInitialize;
}
