fluid-pointer-react
Version:
A dependency-free fluid simulation component with WebGL-based physics - supports both vanilla web components and React
113 lines • 2.93 kB
TypeScript
export interface FluidConfig {
SIM_RESOLUTION: number;
DYE_RESOLUTION: number;
DENSITY_DISSIPATION: number;
VELOCITY_DISSIPATION: number;
PRESSURE: number;
PRESSURE_ITERATIONS: number;
CURL: number;
SPLAT_RADIUS: number;
SPLAT_FORCE: number;
MOUSE_INTERACTION: boolean;
SHADING: boolean;
COLORFUL: boolean;
COLOR_UPDATE_SPEED: number;
COLOR_TRANSITION_SPEED: number;
COLOR_MODE: ColorMode;
COLOR: string;
PAUSED: boolean;
}
export interface WebGLExtensions {
formatRGBA: {
internalFormat: number;
format: number;
} | null;
formatRG: {
internalFormat: number;
format: number;
} | null;
formatR: {
internalFormat: number;
format: number;
} | null;
halfFloatTexType: number;
supportLinearFiltering: any;
}
export interface Pointer {
id: number;
texcoordX: number;
texcoordY: number;
prevTexcoordX: number;
prevTexcoordY: number;
deltaX: number;
deltaY: number;
down: boolean;
moved: boolean;
color: [number, number, number];
}
export interface FBO {
fbo: WebGLFramebuffer;
texture: WebGLTexture;
width: number;
height: number;
texelSizeX: number;
texelSizeY: number;
attach(id: number): number;
}
export interface DoubleFBO {
read: FBO;
write: FBO;
swap(): void;
}
export interface ShaderProgram {
program: WebGLProgram;
uniforms: Record<string, WebGLUniformLocation>;
bind(): void;
}
export interface Material {
program: WebGLProgram;
uniforms: Record<string, WebGLUniformLocation>;
bind(): void;
setKeywords(keywords: string[]): void;
}
export interface FluidSplatEventDetail {
x: number;
y: number;
velocityX: number;
velocityY: number;
color: [number, number, number];
force: number;
}
export interface FluidReadyEventDetail {
width: number;
height: number;
}
export interface FluidPerformanceEventDetail {
fps: number;
frameTime: number;
}
export interface FluidPointerEventMap {
"fluid-ready": CustomEvent<FluidReadyEventDetail>;
"fluid-splat": CustomEvent<FluidSplatEventDetail>;
"fluid-interaction-start": CustomEvent<{
x: number;
y: number;
}>;
"fluid-interaction-end": CustomEvent<{
x: number;
y: number;
}>;
"fluid-fps-change": CustomEvent<FluidPerformanceEventDetail>;
"fluid-pause": CustomEvent<{}>;
"fluid-resume": CustomEvent<{}>;
}
export type ColorMode = "rainbow" | "monochrome" | "custom";
export type InteractionMode = "movement" | "click" | "both";
export type QualityLevel = "low" | "medium" | "high" | "ultra";
export interface QualityPreset {
simResolution: number;
dyeResolution: number;
pressureIterations: number;
}
export declare const QUALITY_PRESETS: Record<QualityLevel, QualityPreset>;
//# sourceMappingURL=fluid-types.d.ts.map