import { vec2 } from "gl-matrix";
import RigidBody from "../rigidbody";
import kdTree from "./kdTree";
export default class Particle extends RigidBody {
    private radius;
    density: number;
    densityNear: number;
    pressure: number;
    pressureNear: number;
    dx: vec2;
    posPrev: vec2;
    neighbours: Particle[];
    /**
     * Creates a {@link Particle}.
     *
     * @param radius The radius of the particle
     * @param mass The mass of the particle
     */
    constructor(radius: number, mass: number);
    /**
     * Finds particles which are closer to this particle than the fluid's smoothing radius.
     *
     * Particles which are closer than this distance are added to this particle's neighbours array.
     *
     * @param kdTree The {@link kdTree} of the fluid
     * @param smoothingRadius The fluid's smoothing radius
     * @param smoothingRadiusSqr The fluid's smoothing radius squared
     */
    findNeighbours(kdTree: kdTree, smoothingRadius: number, smoothingRadiusSqr: number): void;
    /**
     * Computes the density and density near of the particle based on it's neighbours.
     *
     * @param smoothingRadius The smoothing radius of the fluid
     */
    computeDoubleDensityRelaxation(smoothingRadius: number): void;
    /**
     * Calculate the pressure the particle based on it's neighbours.
     *
     * @param restDensity The rest density of the fluid
     */
    computePressure(stiffness: number, stiffnessNear: number, restDensity: number): void;
    /**
     * Advanced the particle's position.
     *
     * @param delta The time since the last update
     * @param smoothingRadius The smoothing radius of the fluid
     */
    advancePosition(delta: number, smoothingRadius: number): void;
    /**
     * Comptues the particle's new velocity and performs the second force solving pass.
     *
     * @param delta The time since the last update
     * @param gravity The physics world's gravity vector
     */
    computeNewVelocity(delta: number, gravity: vec2): void;
    /**
     * Sets the particle's radius.
     *
     * @param radius The particle's new radius
     */
    setRadius(radius: number): void;
    /**
     * Gets the radius of the particle.
     *
     * @returns The particle's radius
     */
    getRadius(): number;
}
