type Vec3 = [number, number, number]; /** * ProjectileSystem.ts * * Projectile management: spawning, travel, lifetime, * homing behavior, piercing, and impact callbacks. * * @module combat */ export interface ProjectileConfig { speed: number; lifetime: number; damage: number; homing: boolean; homingStrength: number; piercing: number; gravity: number; } export interface Projectile { id: string; x: number; y: number; z: number; vx: number; vy: number; vz: number; position: Vec3; velocity: Vec3; config: ProjectileConfig; age: number; hitCount: number; alive: boolean; ownerId: string; } export type ImpactCallback = (projectile: Projectile, targetId: string) => void; export interface ProjectileTarget { id: string; position?: Vec3; x?: number; y?: number; z?: number; radius: number; } export declare class ProjectileSystem { private projectiles; private nextId; private onImpact; spawn(ownerId: string, x: number, y: number, z: number, dx: number, dy: number, dz: number, config: ProjectileConfig): string; setImpactCallback(cb: ImpactCallback): void; update(dt: number, targets?: ProjectileTarget[]): void; private findNearest; getProjectile(id: string): Projectile | undefined; getAliveCount(): number; cleanup(): void; } export {}; //# sourceMappingURL=ProjectileSystem.d.ts.map