breakout71/src/types.d.ts

157 lines
2.8 KiB
TypeScript
Raw Normal View History

2025-03-07 20:18:18 +01:00
import { rawUpgrades } from "./rawUpgrades";
export type colorString = string;
2025-03-06 14:06:02 +01:00
export type RawLevel = {
2025-03-07 20:18:18 +01:00
name: string;
size: number;
bricks: string;
svg: string;
color: string;
2025-03-06 14:06:02 +01:00
};
export type Level = {
2025-03-07 20:18:18 +01:00
name: string;
size: number;
bricks: colorString[];
svg: string;
color: string;
threshold: number;
sortKey: number;
2025-03-06 14:06:02 +01:00
};
export type Palette = { [k: string]: string };
2025-03-06 14:06:02 +01:00
export type Upgrade = {
2025-03-07 20:18:18 +01:00
threshold: number;
giftable: boolean;
id: PerkId;
name: string;
icon: string;
max: number;
help: (lvl: number) => string;
fullHelp: string;
requires: PerkId | "";
};
2025-03-06 14:06:02 +01:00
export type PerkId = (typeof rawUpgrades)[number]["id"];
2025-03-06 14:06:02 +01:00
declare global {
2025-03-07 20:18:18 +01:00
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;
}
2025-03-07 11:34:11 +01:00
}
export type BallLike = {
2025-03-07 20:18:18 +01:00
x: number;
y: number;
vx?: number;
vy?: number;
};
2025-03-07 11:34:11 +01:00
export type Coin = {
2025-03-07 20:18:18 +01:00
points: number;
color: colorString;
x: number;
y: number;
previousX: number;
previousY: number;
2025-03-07 20:18:18 +01:00
vx: number;
vy: number;
sx: number;
sy: number;
a: number;
sa: number;
weight: number;
destroyed?: boolean;
coloredABrick?: boolean;
};
export type Ball = {
2025-03-07 20:18:18 +01:00
x: number;
previousX: number;
2025-03-07 20:18:18 +01:00
y: number;
previousY: number;
2025-03-07 20:18:18 +01:00
vx: number;
vy: number;
previousVX: number;
previousVY: number;
2025-03-07 20:18:18 +01:00
sx: number;
sy: number;
sparks: number;
piercedSinceBounce: number;
hitSinceBounce: number;
hitItem: { index: number; color: string }[];
bouncesList: { x: number; y: number }[];
2025-03-07 20:18:18 +01:00
sapperUses: number;
destroyed?: boolean;
};
interface BaseFlash {
time: number;
2025-03-07 20:18:18 +01:00
color: colorString;
duration: number;
size: number;
destroyed?: boolean;
x: number;
y: number;
}
interface ParticleFlash extends BaseFlash{
type: 'particle';
vx: number;
vy: number;
ethereal: boolean;
}
interface TextFlash extends BaseFlash{
type:'text';
text: string;
}
interface BallFlash extends BaseFlash{
type:'ball';
}
export type Flash = ParticleFlash|TextFlash|BallFlash
2025-03-07 20:18:18 +01:00
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 PerksMap = {
2025-03-07 20:53:39 +01:00
[k in PerkId]: number;
};
2025-03-07 20:53:39 +01:00
2025-03-07 20:18:18 +01:00
export type RunHistoryItem = RunStats & {
2025-03-07 20:53:39 +01:00
perks?: PerksMap;
2025-03-07 20:18:18 +01:00
appVersion?: string;
};