UNPKG

@meganetaaan/mouse-follower

Version:

TypeScript library for creating animated sprites that smoothly follow mouse cursor or other targets using physics-based movement

144 lines 3.91 kB
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