feat: integrate label generation into main flow and enhance label data handling

This commit is contained in:
StempunkDev 2026-02-11 22:01:57 +01:00
parent c467f87df5
commit 94b638f3cb
4 changed files with 219 additions and 104 deletions

View file

@ -7,11 +7,7 @@ export interface StateLabelData {
type: "state";
stateId: number;
text: string;
pathPoints: [number, number][];
startOffset: number;
fontSize: number;
letterSpacing: number;
transform: string;
fontSize?: number;
}
export interface BurgLabelData {
@ -32,10 +28,10 @@ export interface CustomLabelData {
group: string;
text: string;
pathPoints: [number, number][];
startOffset: number;
fontSize: number;
letterSpacing: number;
transform: string;
startOffset?: number;
fontSize?: number;
letterSpacing?: number;
transform?: string;
}
export type LabelData = StateLabelData | BurgLabelData | CustomLabelData;
@ -52,6 +48,12 @@ class LabelsModule {
return existingIds[existingIds.length - 1] + 1;
}
generate() : void {
this.clear();
generateStateLabels();
generateBurgLabels();
}
getAll(): LabelData[] {
return pack.labels;
}
@ -145,4 +147,78 @@ class LabelsModule {
}
}
/**
* Generate state labels data entries for each state.
* Only stores essential label data; raycast path calculation happens during rendering.
* @param list - Optional array of stateIds to regenerate only those
*/
export function generateStateLabels(list?: number[]): void {
if (!TIME) console.time("generateStateLabels");
else TIME && console.time("generateStateLabels");
const { states } = pack;
const labelsModule = window.Labels;
// Remove existing state labels that need regeneration
if (list) {
list.forEach((stateId) => labelsModule.removeStateLabel(stateId));
} else {
labelsModule.removeByType("state");
}
// Generate new label entries
for (const state of states) {
if (!state.i || state.removed || state.lock) continue;
if (list && !list.includes(state.i)) continue;
labelsModule.addStateLabel({
stateId: state.i,
text: state.name!,
fontSize: 100,
});
}
if (!TIME) console.timeEnd("generateStateLabels");
else TIME && console.timeEnd("generateStateLabels");
}
/**
* Generate burg labels data from burgs.
* Populates pack.labels with BurgLabelData for each burg.
*/
export function generateBurgLabels(): void {
if (!TIME) console.time("generateBurgLabels");
else TIME && console.time("generateBurgLabels");
const labelsModule = window.Labels;
// Remove existing burg labels
labelsModule.removeByType("burg");
// Generate new labels for all active burgs
for (const burg of pack.burgs) {
if (!burg.i || burg.removed) continue;
const group = burg.group || "unmarked";
// Get label group offset attributes if they exist (will be set during rendering)
// For now, use defaults - these will be updated during rendering phase
const dx = 0;
const dy = 0;
labelsModule.addBurgLabel({
burgId: burg.i,
group,
text: burg.name!,
x: burg.x,
y: burg.y,
dx,
dy,
});
}
if (!TIME) console.timeEnd("generateBurgLabels");
else TIME && console.timeEnd("generateBurgLabels");
}
window.Labels = new LabelsModule();