UNPKG

@dominicstop/utils

Version:

Yet another event emitter written in typescript.

42 lines (34 loc) 1.12 kB
import { AnyParticle } from "./AnyParticle"; import { SomeParticleForce } from "./SomeParticleForce"; /** * Applies a damping force to reduce velocity over time. * This force is used for simulating friction or air resistance. */ export class DampingForce implements SomeParticleForce { /** * Proportional constant for damping (e.g., gamma). * * The factor by which velocity is reduced (e.g., 0.05). * Higher values mean stronger damping */ dampingFactor: number; isActive: boolean; constructor(dampingFactor: number, isActive: boolean = true) { this.dampingFactor = dampingFactor; this.isActive = isActive; }; /** * Applies a force: * `F = -dampingFactor * particle.velocity`. * * This simulates friction or air resistance to stabilize * the system or slow particles down. * * @param particle The particle to apply the force to. */ apply(particle: AnyParticle): void { if (!this.isActive || particle.isStatic) return; const dampingForce = particle.velocity.multipliedByScalar(-this.dampingFactor); particle.applyForce(dampingForce); }; };