export interface Target { x: number; y: number; radius: number; } export interface Stats { startTime: number; misclicks: number; targetsHit: number; times: number[]; zoomInTime: number; // Time spent zooming in during current trial zoomOutTime: number; // Time spent zooming out during current trial lastZoomTime: number; // Last timestamp of zoom event isZooming: boolean; // Whether user is currently zooming zoomDirection: 'in' | 'out' | null; // Current direction of zoom } export interface ViewportOffset { x: number; y: number; } export type ZoomPreset = 'A' | 'B' | 'C' | 'D'; export type AppMode = 'demo' | 'study'; export interface AccelerationSettings { enabled: boolean; accelerationCurve: number[]; preset?: ZoomPreset; } export interface Round { timeSpent: number; misclicks: number; accelerationEnabled: boolean; accelerationCurve?: number[]; preset?: ZoomPreset; zoomInTime: number; // Time spent zooming in during this round zoomOutTime: number; // Time spent zooming out during this round timestamp: number; } export const CONSTANTS = { TARGET_COUNT: 200, TARGET_MIN_RADIUS: 250, TARGET_MAX_RADIUS: 800, VIRTUAL_CANVAS_SIZE: 50000, ZOOM_LEVELS: { min: 0.01, max: 10, default: 0.01, }, MOUSE_WHEEL_SAMPLES: 5, NUM_CURVE_POINTS: 5, STUDY_TARGETS_PER_PRESET: 25, PRESETS: { A: [1, 1, 1, 1, 1], // Control: No zoom acceleration B: [1, 2, 3, 4, 5], // Linear increase C: [1, 1.5, 2.5, 4, 6], // Exponential increase D: [1, 3, 4, 3, 1], // Bell curve } as Record, } as const;