@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
TypeScript
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