export interface Position {
    x: number;
    y: number;
}
export interface Velocity {
    x: number;
    y: number;
}
export interface PhysicsState {
    position: Position;
    velocity: Velocity;
    target: Position;
}
export interface FollowTarget {
    x: number;
    y: number;
}
export interface PhysicsOptions {
    velocity?: number;
    accel?: number;
    braking?: {
        stopDistance?: number;
        distance?: number;
        strength?: number;
        minVelocity?: number;
    };
}
export interface PhysicsConfig {
    maxAccel: number;
    maxVelocity: number;
    stopWithin: number;
    brakingStartDistance: number;
    brakingStrength: number;
    minStopVelocity: number;
}
export interface SpriteConfig {
    spriteUrl: string;
    spriteWidth: number;
    spriteHeight: number;
    spriteFrames?: number;
    transparentColor?: string;
    animationInterval: number;
    animations: AnimationsConfig;
}
export interface AnimationConfig {
    start: [number, number];
    numFrames: number;
    repeat: boolean;
    interval?: number;
}
export interface AnimationsConfig {
    [key: string]: AnimationConfig;
}
export interface SpriteOptions {
    url?: string;
    frames?: number;
    width?: number;
    height?: number;
    transparentColor?: string;
    animation?: {
        interval?: number;
    };
    animations?: AnimationsConfig;
}
export interface FollowerOptions {
    target?: FollowTarget;
    bindTo?: HTMLElement;
    physics?: PhysicsOptions;
    sprite?: SpriteOptions;
}
export interface FollowerStopEvent extends CustomEvent {
    type: "stop";
    detail: {
        follower: Follower;
    };
}
export interface FollowerStartEvent extends CustomEvent {
    type: "start";
    detail: {
        follower: Follower;
    };
}
export interface Follower extends Position {
    start(): Promise<void>;
    stop(): void;
    setTarget(target: FollowTarget): void;
    destroy(): void;
    playAnimation(name: string): void;
    pauseAnimation(): void;
    addEventListener(type: "stop", listener: (event: FollowerStopEvent) => void): void;
    addEventListener(type: "start", listener: (event: FollowerStartEvent) => void): void;
    addEventListener(type: string, listener: EventListener): void;
    removeEventListener(type: "stop", listener: (event: FollowerStopEvent) => void): void;
    removeEventListener(type: "start", listener: (event: FollowerStartEvent) => void): void;
    removeEventListener(type: string, listener: EventListener): void;
}
export declare class MouseTarget implements FollowTarget {
    x: number;
    y: number;
    private isTracking;
    constructor();
    private setupMouseTracking;
}
export declare class OffsetTarget implements FollowTarget {
    private target;
    private offsetX;
    private offsetY;
    constructor(target: FollowTarget, offsetX?: number, offsetY?: number);
    get x(): number;
    get y(): number;
}
export declare const DEFAULT_ANIMATIONS: AnimationsConfig;
export declare function stackChanPreset(): SpriteOptions;
export declare const SPRITE_PRESET_STACK_CHAN: SpriteOptions;
export interface IPhysics {
    update(deltaTime: number): void;
    setTarget(target: Position): void;
    getPosition(): Position;
    getVelocity(): Velocity;
    isMoving(threshold?: number): boolean;
}
export interface ISprite {
    initialize(): Promise<void>;
    render(position: Position, direction?: SpriteDirection): void;
    playAnimation(name: string): void;
    pauseAnimation(): void;
    destroy(): void;
    isAnimating(): boolean;
}
export type SpriteDirection = "left" | "right";
export declare const DEFAULTS: {
    physics: {
        velocity: number;
        accel: number;
        braking: {
            stopDistance: number;
            distance: number;
            strength: number;
            minVelocity: number;
        };
    };
    sprite: SpriteOptions;
};
//# sourceMappingURL=types.d.ts.map