import {rawUpgrades} from "./rawUpgrades"; export type colorString = string; export type RawLevel = { name: string; size: number; bricks: string; svg: string; color: string; }; export type Level = { name: string; size: number; bricks: colorString[]; svg: string; color: string; threshold?: number; sortKey?: number; }; export type Palette = { [k: string]: string }; export type Upgrade = { threshold: number; giftable: boolean; id: PerkId; name: string; icon: string; max: number; help: (lvl: number) => string; fullHelp: string; requires: PerkId | ""; }; export type PerkId = (typeof rawUpgrades)[number]["id"]; declare global { interface Window { webkitAudioContext?: typeof AudioContext; } interface Document { webkitFullscreenEnabled?: boolean; webkitCancelFullScreen?: () => void; } interface Element { webkitRequestFullscreen: typeof Element.requestFullscreen } interface MediaStream { // https://devdoc.net/web/developer.mozilla.org/en-US/docs/Web/API/CanvasCaptureMediaStream.html // On firefox, the capture stream has the requestFrame option // instead of the track, go figure requestFrame?:()=>void } } export type BallLike = { x: number; y: number; vx?: number; vy?: number; } export type Coin = { points: number; color: colorString; x: number; y: number; previousx: number; previousy: number; vx: number; vy: number; sx: number; sy: number; a: number; sa: number; weight: number; destroyed?: boolean; coloredABrick?: boolean; } export type Ball = { x: number; previousx: number; y: number; previousy: number; vx: number; vy: number; sx: number; sy: number; sparks: number; piercedSinceBounce: number; hitSinceBounce: number; hitItem: { index: number, color: string }[]; bouncesList?: { x: number, y: number }[]; sapperUses: number; destroyed?: boolean; previousvx?: number; previousvy?: number; } export type FlashTypes = "text" | "particle" | 'ball' export type Flash = { type: FlashTypes; text?: string; time: number; color: colorString; x: number; y: number; duration: number; size: number; vx?: number; vy?: number; ethereal?: boolean; destroyed?: boolean; } export type RunStats= { started: number; levelsPlayed: number; runTime: number; coins_spawned: number; score: number; bricks_broken: number; misses: number; balls_lost: number; puck_bounces: number; upgrades_picked: number; max_combo: number; max_level: number; } export type RunHistoryItem =RunStats & { perks?: {[k in PerkId]:number}; appVersion?:string; }