agentjs-core
Version:
A comprehensive agent-based modeling framework with built-in p5.js visualization
183 lines • 4.42 kB
TypeScript
/**
* 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