-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfast-hud-pages.ts
More file actions
70 lines (64 loc) · 1.96 KB
/
Copy pathfast-hud-pages.ts
File metadata and controls
70 lines (64 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import type { HudPage } from "./canvas-hud";
import type { DataStatus } from "./live-state";
export type FastHudPage = HudPage | "weather" | "ai" | "conversate";
export type FastHudPageDirection = "next" | "previous";
export type FastHudLayout = {
readonly order: readonly FastHudPage[];
readonly enabled: readonly FastHudPage[];
};
const KEYLESS_FAST_HUD_PAGES = [
"overview",
"news",
"todo",
"weather",
"ai",
"conversate",
] as const satisfies readonly FastHudPage[];
const ROUTED_FAST_HUD_PAGES = [
...KEYLESS_FAST_HUD_PAGES,
"navigation",
] as const satisfies readonly FastHudPage[];
export function getFastHudPages(
routeStatus: DataStatus,
layout?: FastHudLayout,
): readonly FastHudPage[] {
if (layout) {
const available = new Set<FastHudPage>(
routeStatus === "disabled"
? KEYLESS_FAST_HUD_PAGES
: ROUTED_FAST_HUD_PAGES,
);
const enabled = new Set(layout.enabled);
const pages = layout.order.filter((page, index) => (
available.has(page)
&& enabled.has(page)
&& layout.order.indexOf(page) === index
));
if (!pages.includes("overview")) pages.unshift("overview");
return pages;
}
return routeStatus === "disabled"
? KEYLESS_FAST_HUD_PAGES
: ROUTED_FAST_HUD_PAGES;
}
export function normalizeFastHudPage(
page: FastHudPage,
routeStatus: DataStatus,
layout?: FastHudLayout,
): FastHudPage {
const pages = getFastHudPages(routeStatus, layout);
if (pages.includes(page)) return page;
return layout ? pages[0] ?? "overview" : "weather";
}
export function getAdjacentFastHudPage(
page: FastHudPage,
direction: FastHudPageDirection,
routeStatus: DataStatus,
layout?: FastHudLayout,
): FastHudPage {
const pages = getFastHudPages(routeStatus, layout);
const current = normalizeFastHudPage(page, routeStatus, layout);
const index = pages.indexOf(current);
const offset = direction === "next" ? 1 : -1;
return pages[(index + offset + pages.length) % pages.length];
}