import { Vector3 } from '@galacean/effects-math/es/core/vector3'; import * as spec from '@galacean/effects-specification'; import type { Component } from './components'; import { Composition } from './composition'; import { EffectsObject } from './effects-object'; import type { Engine } from './engine'; import type { EventEmitterListener, EventEmitterOptions, ItemEvent } from './events'; import type { BoundingBoxData, HitTestBoxParams, HitTestCustomParams, HitTestSphereParams, HitTestTriangleParams } from './plugins'; import { Transform } from './transform'; import type { Constructor, Disposable } from './utils'; /** * VFX 元素,包含元素的变换、组件、子元素等信息。 */ export declare class VFXItem extends EffectsObject implements Disposable { /** * 元素绑定的父元素 */ parent?: VFXItem; /** * 元素的子元素列表 */ children: VFXItem[]; /** * 元素的变换包含位置、旋转、缩放。 */ transform: Transform; /** * 元素动画的当前时间 */ time: number; /** * 元素动画的持续时间 */ duration: number; /** * 父元素的 id */ parentId?: string; /** * 元素动画结束时行为(如何处理元素) */ endBehavior: spec.EndBehavior; /** * 元素名称 */ name: string; /** * 元素 id 唯一 * @deprecated 2.7.0 Please use `getInstanceId` instead */ id: string; type: spec.ItemType; props: spec.VFXItemData; components: Component[]; isDuringPlay: boolean; /** * 元素是否激活 */ private active; /** * 元素组件是否显示,用于批量开关元素组件 */ private visible; private listIndex; private isEnabled; private eventProcessor; /** * 合成属性 */ private _composition; /** * * @param item * @returns */ static isComposition(item: VFXItem): boolean; /** * * @param item * @returns */ static isSprite(item: VFXItem): boolean; /** * * @param item * @returns */ static isParticle(item: VFXItem): boolean; /** * * @param item * @returns */ static isNull(item: VFXItem): boolean; /** * * @param item * @returns */ static isTree(item: VFXItem): boolean; /** * * @param item * @returns */ static isCamera(item: VFXItem): boolean; /** * * @param ancestorCandidate * @param descendantCandidate * @returns */ static isAncestor(ancestorCandidate: VFXItem, descendantCandidate: VFXItem): boolean; /** * * @param engine * @param props */ constructor(engine: Engine, props?: spec.Item); /** * 获取元素的合成 */ get composition(): Composition | null; /** * 设置元素的合成 */ set composition(value: Composition); /** * 播放完成后是否需要再使用,是的话生命周期结束后不会 dispose */ get compositionReusable(): boolean; /** * 元素在合成中的索引 */ get renderOrder(): number; set renderOrder(value: number); /** * 元素监听事件 * @param eventName - 事件名称 * @param listener - 事件监听器 * @param options - 事件监听器选项 * @returns */ on(eventName: E, listener: EventEmitterListener, options?: EventEmitterOptions): void; /** * 移除事件监听器 * @param eventName - 事件名称 * @param listener - 事件监听器 * @returns */ off(eventName: E, listener: EventEmitterListener): void; /** * 一次性监听事件 * @param eventName - 事件名称 * @param listener - 事件监听器 */ once(eventName: E, listener: EventEmitterListener): void; /** * 触发事件 * @param eventName - 事件名称 * @param args - 事件参数 */ emit(eventName: E, ...args: ItemEvent[E]): void; /** * 获取事件名称对应的所有监听器 * @param eventName - 事件名称 * @returns - 返回事件名称对应的所有监听器 */ getListeners(eventName: E): EventEmitterListener[]; /** * 添加组件 * @param classConstructor - 要添加的组件 */ addComponent(classConstructor: Constructor): T; /** * 获取某一类型的组件。如果当前元素绑定了多个同类型的组件只返回第一个 * @param classConstructor - 要获取的组件类型 * @returns 查询结果中符合类型的第一个组件 */ getComponent(classConstructor: Constructor): T; /** * 获取某一类型的所有组件 * @param classConstructor - 要获取的组件 * @returns 一个组件列表,包含所有符合类型的组件 */ getComponents(classConstructor: Constructor): T[]; getDescendants(directDescendantsOnly?: boolean, predicate?: (node: VFXItem) => boolean): VFXItem[]; setParent(vfxItem: VFXItem): void; /** * 激活或停用 VFXItem */ setActive(value: boolean): void; /** * 当前 VFXItem 是否激活 */ get isActive(): boolean; /** * @since 2.6.0 */ set isActive(value: boolean); /** * 设置元素的显隐,该设置会批量开关元素组件 */ setVisible(visible: boolean): void; /** * 元素组件显隐状态 */ get isVisible(): boolean; /** * 元素组件显隐状态 * @deprecated use isVisible instead */ getVisible(): boolean; /** * 获取元素变换包括位置、旋转、缩放 * @param transform 将元素变换拷贝到该对象,并将其作为返回值 * @returns 元素变换的拷贝 */ getWorldTransform(transform?: Transform): Transform; /** * 设置元素在 3D 坐标轴上相对移动 */ translate(x: number, y: number, z: number): void; /** * 设置元素在 3D 坐标轴上相对旋转(角度) */ rotate(x: number, y: number, z: number): void; /** * 设置元素在 3D 坐标轴上相对缩放 */ scale(x: number, y: number, z: number): void; /** * 设置本地坐标位置 */ setPosition(x: number, y: number, z: number): void; /** * 设置本地坐标欧拉旋转 */ setRotation(x: number, y: number, z: number): void; /** * 设置本地坐标缩放 */ setScale(x: number, y: number, z: number): void; /** * 设置世界坐标位置 * @param x - 世界坐标 x * @param y - 世界坐标 y * @param z - 世界坐标 z */ setWorldPosition(x: number, y: number, z: number): void; /** * 设置元素在画布上的像素位置 * Tips: * - 坐标原点在 canvas 左上角,x 正方向水平向右, y 正方向垂直向下 * - 设置后会覆盖原有的位置信息 * @param x - x 坐标 * @param y - y 坐标 */ setPositionByPixel(x: number, y: number): void; translateByPixel(x: number, y: number): void; /** * 获取元素包围盒 * @override */ getBoundingBox(): void | BoundingBoxData; /** * 获取元素用于计算光线投射的面片类型和参数 * @override * @param force - 元素没有开启交互也返回参数 */ getHitTestParams(force?: boolean): void | HitTestBoxParams | HitTestTriangleParams | HitTestSphereParams | HitTestCustomParams; /** * 获取元素当前世界坐标 */ getCurrentPosition(): Vector3; find(name: string): VFXItem | undefined; /** * 复制 VFXItem,返回一个新的 VFXItem * @since 2.4.0 * @returns 复制的新 VFXItem */ duplicate(): VFXItem; fromData(data: spec.VFXItemData): void; toData(): void; /** * 销毁元素 */ dispose(): void; private resetChildrenParent; private instantiatePreComposition; private resetGUID; private gatherPreviousObjectID; private getDescendantsInternal; } export declare namespace Item { function is(item: spec.Item, type: spec.ItemType): item is T; function isComposition(item: spec.Item): item is spec.CompositionItem; function isParticle(item: spec.Item): item is spec.ParticleItem; function isNull(item: spec.Item): item is spec.NullItem; }