diff --git a/src/modules/military-generator.ts b/src/modules/military-generator.ts index 644b3787..929adc47 100644 --- a/src/modules/military-generator.ts +++ b/src/modules/military-generator.ts @@ -15,7 +15,7 @@ declare global { var Military: MilitaryModule; } -interface MilitaryRegiment { +export interface MilitaryRegiment { i: number; t: number; // total troops name: string; @@ -32,6 +32,7 @@ interface MilitaryRegiment { icon?: string; children?: MilitaryRegiment[]; // merged regiments state: number; + angle?: number; } interface Platoon { @@ -487,7 +488,7 @@ class MilitaryModule { for (let i = notes.length - 1; i >= 0; i--) { if (notes[i].id.startsWith("regiment")) notes.splice(i, 1); } - + // get regiments for each state valid.forEach((s) => { s.military = createRegiments(s.temp.platoons, s); @@ -601,12 +602,12 @@ class MilitaryModule { const conflict = campaign ? ` during the ${campaign.name}` : ""; const legend = `Regiment was formed in ${year} ${options.era}${conflict}. ${station}${troops}`; const id = `regiment${s.i}-${r.i}`; - const existing = notes.find(n => n.id === id); + const existing = notes.find((n) => n.id === id); if (existing) { existing.name = r.name; existing.legend = legend; } else { - notes.push({id, name: r.name, legend}); + notes.push({ id, name: r.name, legend }); } } diff --git a/src/renderers/draw-military.ts b/src/renderers/draw-military.ts index dc5f1da2..69c294e6 100644 --- a/src/renderers/draw-military.ts +++ b/src/renderers/draw-military.ts @@ -1,24 +1,13 @@ import { color, easeSinInOut, transition } from "d3"; +import type { MilitaryRegiment } from "../modules/military-generator"; import { rn } from "../utils"; -interface Regiment { - i: number; - name: string; - x: number; - y: number; - n?: number; - angle?: number; - icon: string; - state: number; -} - declare global { var drawMilitary: () => void; - var drawRegiments: (regiments: Regiment[], stateId: number) => void; - var drawRegiment: (reg: Regiment, stateId: number) => void; - var moveRegiment: (reg: Regiment, x: number, y: number) => void; + var drawRegiments: (regiments: MilitaryRegiment[], stateId: number) => void; + var drawRegiment: (reg: MilitaryRegiment, stateId: number) => void; + var moveRegiment: (reg: MilitaryRegiment, x: number, y: number) => void; var armies: import("d3").Selection; - var Military: { getTotal: (reg: Regiment) => number }; } const militaryRenderer = (): void => { @@ -34,12 +23,15 @@ const militaryRenderer = (): void => { TIME && console.timeEnd("drawMilitary"); }; -const drawRegimentsRenderer = (regiments: Regiment[], s: number): void => { +const drawRegimentsRenderer = ( + regiments: MilitaryRegiment[], + s: number, +): void => { const size = +armies.attr("box-size"); - const w = (d: Regiment) => (d.n ? size * 4 : size * 6); + const w = (d: MilitaryRegiment) => (d.n ? size * 4 : size * 6); const h = size * 2; - const x = (d: Regiment) => rn(d.x - w(d) / 2, 2); - const y = (d: Regiment) => rn(d.y - size, 2); + const x = (d: MilitaryRegiment) => rn(d.x - w(d) / 2, 2); + const y = (d: MilitaryRegiment) => rn(d.y - size, 2); const stateColor = pack.states[s]?.color; const baseColor = stateColor && stateColor[0] === "#" ? stateColor : "#999"; @@ -83,9 +75,9 @@ const drawRegimentsRenderer = (regiments: Regiment[], s: number): void => { .attr("x", (d) => x(d) - size) .attr("y", (d) => d.y) .text((d) => - d.icon.startsWith("http") || d.icon.startsWith("data:image") + d.icon!.startsWith("http") || d.icon!.startsWith("data:image") ? "" - : d.icon, + : d.icon!, ); g.append("image") .attr("class", "regimentImage") @@ -94,13 +86,13 @@ const drawRegimentsRenderer = (regiments: Regiment[], s: number): void => { .attr("height", h) .attr("width", h) .attr("href", (d) => - d.icon.startsWith("http") || d.icon.startsWith("data:image") - ? d.icon + d.icon!.startsWith("http") || d.icon!.startsWith("data:image") + ? d.icon! : "", ); }; -const drawRegimentRenderer = (reg: Regiment, stateId: number): void => { +const drawRegimentRenderer = (reg: MilitaryRegiment, stateId: number): void => { const size = +armies.attr("box-size"); const w = reg.n ? size * 4 : size * 6; const h = size * 2; @@ -149,9 +141,9 @@ const drawRegimentRenderer = (reg: Regiment, stateId: number): void => { .attr("x", x1 - size) .attr("y", reg.y) .text( - reg.icon.startsWith("http") || reg.icon.startsWith("data:image") + reg.icon!.startsWith("http") || reg.icon!.startsWith("data:image") ? "" - : reg.icon, + : reg.icon!, ); g.append("image") .attr("class", "regimentImage") @@ -161,14 +153,18 @@ const drawRegimentRenderer = (reg: Regiment, stateId: number): void => { .attr("width", h) .attr( "href", - reg.icon.startsWith("http") || reg.icon.startsWith("data:image") - ? reg.icon + reg.icon!.startsWith("http") || reg.icon!.startsWith("data:image") + ? reg.icon! : "", ); }; // move one regiment to another -const moveRegimentRenderer = (reg: Regiment, x: number, y: number): void => { +const moveRegimentRenderer = ( + reg: MilitaryRegiment, + x: number, + y: number, +): void => { const el = armies .select(`g#army${reg.state}`) .select(`g#regiment${reg.state}-${reg.i}`);