import { Base } from '../base/Base';
import { App } from '../core/App';
import { TransformNode, BoundingInfo, Ray, Material, Mesh } from '../runtime';
import { ViewInfo } from './ViewInfo';
import { Point3D } from '../misc/Point3D';
import { Point4D } from '../misc/Point4D';
import { EntityType } from './EntityType';
import { Component } from './component/Component';
import { Point2D } from '../misc';
import { EffectData } from '../effect/EffectData';
export interface Entity {
    linkDecorator?(): void;
}
/**
 * 实体
 */
export declare class Entity extends Base {
    protected _viewInfo: ViewInfo | null;
    protected _cursor: string;
    _boundingInfoNode: TransformNode;
    protected _boxContainer: TransformNode;
    /**
     * 最大观察距离（包围球半径倍数）
     */
    maxRadiusScale: number;
    /**
     * 包围盒
     */
    boundingInfo: BoundingInfo;
    /**
     * 节点
     */
    node: TransformNode;
    /**
     * 偏移节点
     */
    offsetNode: TransformNode;
    /**
     * 子元素
     */
    readonly children: Entity[];
    /**
     * 组件列表
     */
    readonly _components: Component[];
    /**
     * 是否已创建
     */
    built: boolean;
    /**
     * 父元素
     */
    parent: Entity | null;
    /**
     * 获取子节点列表
     */
    readonly subNodes: TransformNode[];
    /**
     * 标签
     */
    readonly tags: Set<string>;
    /**
     * 用户数据
     */
    readonly userData: any;
    /**
     * 效果数据
     */
    effectData: EffectData;
    /**
     * 获取或设置路径动画移动速度
     */
    moveSpeed: number;
    /**
     * 实体注册的应用事件ID列表，当实体销毁时自动移除集合中的事件
     */
    appEventIds: string[];
    protected _enablePointerMoveEvents: boolean;
    protected _pickable: boolean;
    private _castShadow;
    /**
     * 是否投射阴影
     */
    get castShadow(): boolean;
    set castShadow(value: boolean);
    /**
     * 获取或设置提示信息
     */
    tip: string;
    /**
     * 实例化一个实体对象
     * @param app 应用
     */
    constructor(app: App);
    /**
     * 获取或设置编号
     */
    get id(): string;
    set id(value: string);
    /**
     * 获取实体类型
     */
    get type(): EntityType;
    /**
     * 获取或设置名称
     */
    get name(): string;
    set name(value: string);
    /**
     * 获取或设置可见性
     */
    get visable(): boolean;
    set visable(value: boolean);
    /**
     * 获取或设置观察视角
     */
    get viewInfo(): ViewInfo | null;
    set viewInfo(value: ViewInfo | null);
    /**
     * 获取子网格列表
     */
    get subMeshes(): Mesh[];
    /**
     * 获取材质列表
     */
    get materials(): Material[];
    /**
     * 获取或设置位置
     */
    get position(): Point3D;
    set position(value: Point3D);
    /**
     * 获取或设置偏移量
     */
    get offset(): Point3D;
    set offset(value: Point3D);
    /**
     * 获取或设置允许指针移动事件
     */
    get enablePointerMoveEvents(): boolean;
    set enablePointerMoveEvents(value: boolean);
    /**
     * 获取或设置是否可被拾取
     */
    get pickable(): boolean;
    set pickable(value: boolean);
    /**
     * 获取或设置指针样式，与CSS保持一致
     */
    get cursor(): string;
    set cursor(value: string);
    /**
     * 获取或设置旋转（四元数）
     */
    get rotation(): Point4D;
    set rotation(value: Point4D);
    /**
     * 获取或设置欧拉角（弧度）
     */
    get euler(): Point3D;
    set euler(value: Point3D);
    /**
     * 获取或设置角度
     */
    get angles(): Point3D;
    set angles(value: Point3D);
    /**
     * 获取或设置缩放
     */
    get scale(): Point3D;
    set scale(value: Point3D);
    /**
     * 获取包围盒中心点坐标（世界坐标）
     */
    get center(): Point3D;
    /**
     * 获取包围盒半径
     */
    get radius(): number;
    /**
     * 获取包围盒大小
     */
    get size(): Point3D;
    /**
     * 获取该对象下的所有层级数量（包含自身）
     */
    get levelCount(): number;
    private _boundingColor;
    /**
     * 获取或设置包围盒颜色
     */
    get boundingColor(): string;
    set boundingColor(value: string);
    /**
     * 获取或设置是否显示包围盒
     */
    get showBoundingBox(): boolean;
    set showBoundingBox(value: boolean);
    /**
     * 获取实例类型
     */
    get instanceClass(): any;
    /**
     * 获取是否允许被冻结世界矩阵
     */
    get canFreezeWorldMatrix(): boolean;
    /**
     * 获取是否允许被冻结材质
     */
    get canFreezeMaterial(): boolean;
    /**
     * 是否是当前层级
     */
    get isCurrentLevel(): boolean;
    /**
     * 冻结世界矩阵
     * @param recursive 是否递归调用冻结子元素的世界矩阵，默认true
     */
    freezeWorldMatrix(recursive?: boolean): void;
    /**
     * 解除冻结世界矩阵
     * @param recursive 是否递归调用解除冻结子元素的世界矩阵，默认true
     */
    unfreezeWorldMatrix(recursive?: boolean): void;
    /**
     * 计算世界矩阵
     * @param recursive 是否递归调用计算子元素的世界矩阵，默认true
     */
    computeWorldMatrix(recursive?: boolean): void;
    /**
     * 设置总是激活，用于性能优化，切换场景后失效
     * @param recursive 是否递归调用设置子元素总是激活，默认true
     */
    setAlwaysActive(recursive?: boolean): void;
    /**
     * 设置包围盒同步机制
     * @param value 值，默认true
     * @param recursive 是否递归调用设置子元素的包围盒同步机制，默认true
     */
    setDoNotSyncBoundingInfo(value?: boolean, recursive?: boolean): void;
    /**
     * 冻结材质
     * @param recursive 是否递归调用冻结子元素的材质，默认true
     */
    freezeMaterial(recursive?: boolean): void;
    /**
     * 解除冻结材质
     * @param recursive 是否递归调用解除冻结子元素的材质，默认true
     */
    unfreezeMaterial(recursive?: boolean): void;
    /**
     * 获取所有子网格（递归获取子元素的网格）
     */
    getAllSubMeshes(): Mesh[];
    /**
     * 获取所有子网格（递归获取子元素的网格），含实例网格
     */
    _getAllSubMeshes2(): Mesh[];
    /**
     * 计算包围盒
     */
    computeBoundingInfo(): void;
    /**
     * 世界坐标转局部坐标
     * @param world 世界坐标
     * @returns 局部坐标
     */
    worldToLocal(world: Point3D): Point3D;
    /**
     * 局部坐标转世界坐标
     * @param local 局部坐标
     * @returns 世界坐标
     */
    localToWorld(local: Point3D): Point3D;
    /**
     * 世界坐标转屏幕坐标
     * @param world 世界坐标
     * @returns 屏幕坐标
     */
    worldToScreen(world: Point3D): Point2D;
    /**
     * 局部坐标转屏幕坐标
     * @param local 局部坐标
     * @returns 屏幕坐标
     */
    localToScreen(local: Point3D): Point2D;
    /**
     * 获取指针与当前实体平面的交点（局部坐标，可能为空）
     * @param ray 射线
     */
    getLocalPointerInThisPlane(ray?: Ray): Point3D | null;
    /**
     * 获取指针与当前实体平面的交点（世界坐标，可能为空）
     * @param ray 射线
     */
    getWorldPointerInThisPlane(ray?: Ray): Point3D | null;
    /**
     * 获取指针世界坐标（当前实体平面+相机裁剪面，不为空）
     * @param ray 射线
     */
    getPointer3D(ray?: Ray): Point3D;
    /**
     * 添加子元素
     * @param item 子元素
     * @param index 索引
     */
    add(item: Entity, index?: number): void;
    /**
     * 移除子元素
     * @param item 子元素
     */
    remove(item: Entity): void;
    /**
     * 从父元素中移除自身
     */
    removeSelf(): void;
    /**
     * 是否是当前层级的子孙
     */
    descendantOfCurrentLevel(): boolean;
    /**
     * 添加指定组件（不可重复添加）
     * @param type 组件类型
     */
    addComponent<T extends Component>(type: new (entity: Entity) => T): T;
    /**
     * 获取指定类型的组件
     * @param type 组件类型
     */
    getComponent<T extends Component>(type: new (entity: Entity) => T): T | null;
    /**
     * 获取所属房间
     */
    get ownerRoom(): any;
    /**
     * 获取或设置是否显示为盒子模式
     */
    get showBox(): boolean;
    set showBox(value: boolean);
    /**
     * 释放盒子
     */
    disposeBox(): void;
    /**
     * 标记节点
     * @param id 唯一ID
     * @param recursive 是否递归调用标记子元素的节点
     */
    markNode(id?: string, recursive?: boolean): void;
    /**
     * 序列化成JSON对象
     */
    toJson(): any;
    /**
     * 从JSON对象反序列化（仅生成层级树）
     * @param json JSON对象
     */
    fromJson(json: any): void;
    /**
     * 对象创建完成后执行的操作
     */
    afterBuild(): void;
    /**
     * 创建（仅当前层级可见对象）
     * @param force 是否强制
     */
    build(force?: boolean): Promise<void>;
    /**
     * 设置子节点列表
     */
    setSubNodes(): void;
    /**
     * 拆毁（销毁网格，仅保留层级树）
     */
    unbuild(): void;
    /**
     * 释放
     */
    dispose(): void;
}
