Files
space-game/apps/viewer/src/viewerHudState.ts

179 lines
3.4 KiB
TypeScript

import { reactive } from "vue";
import type { ViewerSelectionStore } from "./ui/stores/viewerSelection";
import type { Selectable } from "./viewerTypes";
export interface HudPanelState {
collapsed: boolean;
summary: string;
bodyText: string;
}
export interface HudHtmlPanelState {
hidden: boolean;
title: string;
bodyHtml: string;
}
export interface HudErrorState {
hidden: boolean;
message: string;
}
export interface HudProgressBar {
label: string;
valueLabel: string;
progress: number;
}
export interface OpsFactionCardState {
kind: "faction";
id: string;
label: string;
stateLines: string[];
priorities: { label: string; value: string }[];
}
export interface OpsStationCardState {
kind: "station";
id: string;
label: string;
badge: string;
selected: boolean;
lines: string[];
processes: HudProgressBar[];
}
export interface OpsShipCardState {
kind: "ship";
id: string;
label: string;
badge: string;
selected: boolean;
followed: boolean;
locationLines: string[];
lines: string[];
action?: HudProgressBar;
aiLines: string[];
}
export interface OpsStripState {
factions: OpsFactionCardState[];
stations: OpsStationCardState[];
ships: OpsShipCardState[];
}
export interface HistoryWindowState {
id: string;
target: Selectable;
title: string;
bodyHtml: string;
text: string;
copyLabel: string;
x: number;
y: number;
width: number;
height: number;
zIndex: number;
}
export interface HoverLabelState {
hidden: boolean;
text: string;
x: number;
y: number;
connectorHidden: boolean;
x1: number;
y1: number;
x2: number;
y2: number;
}
export interface MarqueeState {
visible: boolean;
x: number;
y: number;
width: number;
height: number;
}
export interface ViewerHudState {
gamePanel: HudPanelState;
networkPanel: HudPanelState;
performancePanel: HudPanelState;
systemPanel: HudHtmlPanelState;
detailPanel: HudHtmlPanelState;
error: HudErrorState;
opsStrip: OpsStripState;
historyWindows: HistoryWindowState[];
hoverLabel: HoverLabelState;
marquee: MarqueeState;
}
export interface ViewerHudBindings {
state: ViewerHudState;
selectionStore: ViewerSelectionStore;
opsStripEl: HTMLDivElement;
historyLayerEl: HTMLDivElement;
marqueeEl: HTMLDivElement;
hoverLabelEl: HTMLDivElement;
hoverConnectorLineEl: SVGLineElement;
}
export function createViewerHudState(): ViewerHudState {
return reactive({
gamePanel: {
collapsed: true,
summary: "Bootstrapping",
bodyText: "Bootstrapping",
},
networkPanel: {
collapsed: true,
summary: "Waiting",
bodyText: "Waiting for snapshot.",
},
performancePanel: {
collapsed: true,
summary: "Waiting",
bodyText: "Waiting for frame samples.",
},
systemPanel: {
hidden: false,
title: "Deep Space",
bodyHtml: "Waiting for the authoritative snapshot.",
},
detailPanel: {
hidden: false,
title: "Nothing selected",
bodyHtml: "Waiting for the authoritative snapshot.",
},
error: {
hidden: true,
message: "",
},
opsStrip: {
factions: [],
stations: [],
ships: [],
},
historyWindows: [],
hoverLabel: {
hidden: true,
text: "",
x: 0,
y: 0,
connectorHidden: true,
x1: 0,
y1: 0,
x2: 0,
y2: 0,
},
marquee: {
visible: false,
x: 0,
y: 0,
width: 0,
height: 0,
},
});
}