/** * Base Controller - all camera behaviors inherit from this * Why a base class: provides common lifecycle methods and state management */ export class CameraController { constructor(name?: string); name: string; enabled: boolean; priority: number; camera: any; weight: number; attach(camera: any): void; detach(): void; onAttach(): void; onDetach(): void; onUpdate(delta: any): boolean; preUpdate(delta: any): void; postUpdate(delta: any): void; } /** * FollowController - smoothly follows a target * Key features: * - Lag/smoothing with lerp * - Deadzone (camera only moves when target leaves center area) * - Look-ahead (predictive movement) * - Boundaries (clamp to level limits) */ /** * Optimized FollowController with smooth lerping * * Key improvements: * - Smooth lerp towards target center (no harsh deadzone snapping) * - Optional soft deadzone for reduced movement near center * - Simplified calculations, fewer conversions * - Better performance with early exits */ export class FollowController extends CameraController { constructor(target: any, options?: {}); target: any; smoothing: any; softDeadzoneRadius: any; softDeadzoneFalloff: any; offset: any; bounds: any; smoothingX: any; smoothingY: any; minMovement: any; } /** * ShakeController - screen shake for impacts, explosions, etc. * Key features: * - Perlin-like noise for natural shaking * - Decay over time * - Configurable intensity and frequency * - Can shake position, rotation, or both */ export class ShakeController extends CameraController { constructor(options?: {}); intensity: any; decay: any; frequency: any; shakePosition: boolean; shakeRotation: any; maxRotation: any; time: number; seed: number; currentIntensity: number; offset: { x: number; y: number; }; rotationOffset: number; octaves: any; persistence: any; shake(intensity?: any): void; _perlinNoise(seed: any, t: any): number; } /** * ZoomController - smooth zoom interpolation * Key features: * - Animated zoom to target level * - Zoom to fit specific bounds * - Zoom with pivot point (mouse position) */ export class ZoomController extends CameraController { constructor(options?: {}); targetZoom: any; smoothing: any; minZoom: any; maxZoom: any; zoomToFitPadding: any; isZooming: boolean; zoomStart: number; zoomTime: number; zoomDuration: number; easingFunc: (t: any) => any; pivot: any; zoomTo(zoomLevel: any, duration?: number, easing?: string, pivot?: any): void; zoomToFit(bounds: any, duration?: number, easing?: string): void; zoomBy(factor: any, duration?: number, easing?: string, pivot?: any): void; _getEasingFunction(name: any): (t: any) => any; } /** * PathController - follow a Bézier path for cinematic sequences * Key features: * - Follow sequence of control points * - Configurable speed and easing * - Loop or one-shot playback * - Callbacks at waypoints */ export class PathController extends CameraController { constructor(path?: any[], options?: {}); path: any[]; speed: any; easing: any; loop: any; autoStart: any; isPlaying: boolean; currentTime: number; totalDistance: number; segmentDistances: any[]; currentSegment: number; t: number; onComplete: any; onWaypoint: any; play(): void; pause(): void; stop(): void; _calculatePathDistances(): void; onUpdate(delta: any): any; _applyEasing(t: any, easing: any): any; } /** * ControllerManager - manages multiple controllers on a camera * Why needed: handles controller priority, blending, and update order */ export class ControllerManager { constructor(camera: any); camera: any; controllers: Map; updateOrder: any[]; _originalUpdate: any; add(controller: any): any; remove(name: any): void; get(name: any): any; _update(delta: any): void; } /** * Integrated Camera2D with controller support * Extends the base Camera2D to include controller management */ export class ControlledCamera extends Camera2D { controllerManager: ControllerManager; _controllers: ControllerManager; addController(controller: any): any; removeController(name: any): void; getController(name: any): any; follow(target: any, options: any): FollowController; shake(options: any): ShakeController; zoom(options: any): ZoomController; path(path: any, options: any): PathController; } /** * CameraRig - parent node for camera with additional control points * Useful for: camera shake that doesn't affect child objects, complex camera setups */ export class CameraRig extends Node { camera: ControlledCamera; pivot: Node; cameraOffset: { x: number; y: number; }; shakeCamera(intensity?: number): ShakeController; moveRig(x: any, y: any): void; setCameraOffset(x: any, y: any): void; } import { Camera2D } from "./cam.js"; import { Node } from "./core.js";