UNPKG

agentjs-core

Version:

A comprehensive agent-based modeling framework with built-in p5.js visualization

183 lines 4.42 kB
/** * Camera - Interactive camera system for visualization */ import type { Position } from '../types/core'; /** Camera configuration */ export interface CameraConfig { readonly bounds?: { minX: number; maxX: number; minY: number; maxY: number; } | undefined; readonly zoom: { min: number; max: number; sensitivity: number; }; readonly pan: { enabled: boolean; sensitivity: number; smoothing: number; }; readonly viewport: { width: number; height: number; }; } /** Camera transformation state */ export interface CameraTransform { x: number; y: number; zoom: number; targetX: number; targetY: number; targetZoom: number; } /** * Camera - Advanced camera system with smooth controls * * Features: * - Smooth pan and zoom with easing * - Viewport bounds constraining * - Screen-to-world coordinate conversion * - Performance-optimized viewport culling * - Touch gesture support preparation * * Educational Context: Provides intuitive navigation * of large agent simulations with smooth interactions. */ export declare class Camera { /** Camera configuration */ private config; /** Current camera state */ private transform; /** Previous mouse position for dragging */ private previousMouse; /** Whether camera is currently being dragged */ private isDragging; /** Animation frame ID for smooth transitions */ private animationId; constructor(config?: Partial<CameraConfig>); /** * Start smooth animation loop */ private startAnimation; /** * Update smooth camera transitions */ private updateSmoothing; /** * Pan camera by delta amount */ pan(deltaX: number, deltaY: number): void; /** * Zoom camera at specific screen point */ zoomAt(screenX: number, screenY: number, factor: number): void; /** * Zoom by factor at viewport center */ zoom(factor: number): void; /** * Convert screen coordinates to world coordinates */ screenToWorld(screenX: number, screenY: number): Position; /** * Convert world coordinates to screen coordinates */ worldToScreen(worldX: number, worldY: number): { x: number; y: number; }; /** * Check if a world position is visible in the viewport */ isVisible(worldPos: Position, margin?: number): boolean; /** * Get visible world bounds for viewport culling */ getVisibleBounds(margin?: number): { minX: number; maxX: number; minY: number; maxY: number; }; /** * Center camera on world position */ centerOn(worldX: number, worldY: number): void; /** * Fit world bounds in viewport */ fitBounds(bounds: { minX: number; maxX: number; minY: number; maxY: number; }, padding?: number): void; /** * Handle mouse press for dragging */ handleMousePress(mouseX: number, mouseY: number): void; /** * Handle mouse drag */ handleMouseDrag(mouseX: number, mouseY: number): void; /** * Handle mouse release */ handleMouseRelease(): void; /** * Handle mouse wheel for zooming */ handleMouseWheel(mouseX: number, mouseY: number, delta: number): void; /** * Constrain camera to bounds if set */ private constrainToBounds; /** * Update viewport size */ updateViewport(width: number, height: number): void; /** * Get current camera position */ getPosition(): { x: number; y: number; }; /** * Get current zoom level */ getZoom(): number; /** * Get complete transform state */ getTransform(): CameraTransform; /** * Set camera bounds */ setBounds(bounds: CameraConfig['bounds']): void; /** * Update camera configuration */ updateConfig(newConfig: Partial<CameraConfig>): void; /** * Reset camera to default state */ reset(): void; /** * Clean up resources */ destroy(): void; /** * Get viewport width */ getViewportWidth(): number; /** * Get viewport height */ getViewportHeight(): number; } //# sourceMappingURL=Camera.d.ts.map