/**
 * ECS component holding effectors that contribute to fluid fields each simulation step.
 *
 * Effectors here are decoupled from any specific {@link FluidField} — {@link FluidSystem}
 * gathers all effectors across all entities and applies them to every fluid field each
 * step. Effectors that don't overlap a given field self-cull via their radius / position
 * checks, so attachment is implicit rather than configured.
 *
 * Pair this component with a `Transform` on the same entity to let position-bearing
 * effectors ({@link WakeFluidEffector}, {@link ImpulseFluidEffector}, ...) follow the
 * entity. The system calls each effector's {@link AbstractFluidEffector.syncFromTransform}
 * with the entity's Transform before stepping the simulator.
 */
export class FluidEffectorsComponent {
    /**
     * Effectors applied each simulation step.
     * @type {AbstractFluidEffector[]}
     */
    effectors: AbstractFluidEffector[];
    /**
     * Append an effector. The same instance may only be added once; pushing duplicates
     * causes the effector to fire twice per step.
     * @param {AbstractFluidEffector} effector
     */
    addEffector(effector: AbstractFluidEffector): void;
    /**
     * Remove an effector by reference. No-op if not present.
     * @param {AbstractFluidEffector} effector
     */
    removeEffector(effector: AbstractFluidEffector): void;
    /**
     * Position-dependent equality: same number of effectors, each pair at the same
     * index `.equals` each other. Re-ordering counts as a change.
     * @param {FluidEffectorsComponent} other
     * @return {boolean}
     */
    equals(other: FluidEffectorsComponent): boolean;
    /**
     * Order-dependent hash, FNV-like fold over child effector hashes.
     * @return {number}
     */
    hash(): number;
    isFluidEffectorsComponent: boolean;
}
//# sourceMappingURL=FluidEffectorsComponent.d.ts.map