117 lines
5.6 KiB
TypeScript
117 lines
5.6 KiB
TypeScript
import { createDisabledInput, createLabel } from "./common";
|
|
import type { ProgressMessage } from "./worker";
|
|
|
|
export class ManoeuvresGui {
|
|
parentDiv: HTMLElement;
|
|
displayProgress: (progressMessage: ProgressMessage) => void;
|
|
|
|
|
|
constructor(displayProgress?: boolean) {
|
|
if (displayProgress === undefined) {
|
|
displayProgress = true;
|
|
}
|
|
|
|
this.parentDiv = document.createElement("div");
|
|
let explanationParagraph = document.createElement("p");
|
|
this.parentDiv.appendChild(explanationParagraph);
|
|
|
|
let manoeuvresContainer = document.createElement("div");
|
|
manoeuvresContainer.classList.add("flexContainer");
|
|
this.parentDiv.appendChild(manoeuvresContainer);
|
|
|
|
let manoeuvreOneContainer = document.createElement("div");
|
|
let manoeuvreTwoContainer = document.createElement("div");
|
|
manoeuvreOneContainer.classList.add("orbitalParameter");
|
|
manoeuvreTwoContainer.classList.add("orbitalParameter");
|
|
manoeuvresContainer.appendChild(manoeuvreOneContainer);
|
|
manoeuvresContainer.appendChild(manoeuvreTwoContainer);
|
|
|
|
let manoeuvreOneHeader = document.createElement("h4");
|
|
manoeuvreOneHeader.appendChild(document.createTextNode("First manoeuvre:"));
|
|
manoeuvreOneContainer.appendChild(manoeuvreOneHeader);
|
|
|
|
const addTo = (container: HTMLElement, children: HTMLElement[]) => {
|
|
children.forEach(child => {
|
|
container.appendChild(child);
|
|
})
|
|
container.appendChild(document.createElement("br"));
|
|
};
|
|
|
|
let firstTimeId = crypto.randomUUID();
|
|
let firstTimeLabel = createLabel(firstTimeId, "Time:");
|
|
let firstManoeuvreTime = createDisabledInput(firstTimeId);
|
|
addTo(manoeuvreOneContainer, [firstTimeLabel, firstManoeuvreTime]);
|
|
|
|
let firstProgradeId = crypto.randomUUID();
|
|
let firstProgradeLabel = createLabel(firstProgradeId, "Prograde delta-v:");
|
|
let firstManoeuvrePrograde = createDisabledInput(firstProgradeId);
|
|
addTo(manoeuvreOneContainer, [firstProgradeLabel, firstManoeuvrePrograde]);
|
|
|
|
let firstNormalId = crypto.randomUUID();
|
|
let firstNormalLabel = createLabel(firstNormalId, "Normal delta-v:");
|
|
let firstManoeuvreNormal = createDisabledInput(firstNormalId);
|
|
addTo(manoeuvreOneContainer, [firstNormalLabel, firstManoeuvreNormal]);
|
|
|
|
let firstRadialId = crypto.randomUUID();
|
|
let firstRadialLabel = createLabel(firstRadialId, "Radial delta-v:");
|
|
let firstManoeuvreRadial = createDisabledInput(firstRadialId);
|
|
addTo(manoeuvreOneContainer, [firstRadialLabel, firstManoeuvreRadial]);
|
|
|
|
let firstTotalId = crypto.randomUUID();
|
|
let firstTotalLabel = createLabel(firstTotalId, "Total delta-v:");
|
|
let firstManoeuvreTotal = createDisabledInput(firstTotalId);
|
|
addTo(manoeuvreOneContainer, [firstTotalLabel, firstManoeuvreTotal]);
|
|
|
|
let manoeuvreTwoHeader = document.createElement("h4");
|
|
manoeuvreTwoHeader.appendChild(document.createTextNode("Second manoeuvre"));
|
|
manoeuvreTwoContainer.appendChild(manoeuvreTwoHeader);
|
|
|
|
let secondTimeId = crypto.randomUUID();
|
|
let secondTimeLabel = createLabel(secondTimeId, "Time:");
|
|
let secondManoeuvreTime = createDisabledInput(secondTimeId);
|
|
addTo(manoeuvreTwoContainer, [secondTimeLabel, secondManoeuvreTime]);
|
|
|
|
let secondProgradeId = crypto.randomUUID();
|
|
let secondProgradeLabel = createLabel(secondProgradeId, "Prograde delta-v:");
|
|
let secondManoeuvrePrograde = createDisabledInput(secondProgradeId);
|
|
addTo(manoeuvreTwoContainer, [secondProgradeLabel, secondManoeuvrePrograde]);
|
|
|
|
let secondNormalId = crypto.randomUUID();
|
|
let secondNormalLabel = createLabel(secondNormalId, "Normal delta-v:");
|
|
let secondManoeuvreNormal = createDisabledInput(secondNormalId);
|
|
addTo(manoeuvreTwoContainer, [secondNormalLabel, secondManoeuvreNormal]);
|
|
|
|
let secondRadialId = crypto.randomUUID();
|
|
let secondRadialLabel = createLabel(secondRadialId, "Radial delta-v:");
|
|
let secondManoeuvreRadial = createDisabledInput(secondRadialId);
|
|
addTo(manoeuvreTwoContainer, [secondRadialLabel, secondManoeuvreRadial]);
|
|
|
|
let secondTotalId = crypto.randomUUID();
|
|
let secondTotalLabel = createLabel(secondTotalId, "Total delta-v:");
|
|
let secondManoeuvreTotal = createDisabledInput(secondTotalId);
|
|
addTo(manoeuvreTwoContainer, [secondTotalLabel, secondManoeuvreTotal]);
|
|
|
|
this.displayProgress = (progressMessage) => {
|
|
explanationParagraph.innerHTML = "";
|
|
if (displayProgress) {
|
|
explanationParagraph.appendChild(document.createTextNode(`The search is ${progressMessage.percentDone.toFixed(2)}% complete.`));
|
|
if (progressMessage.bestDeltaV) {
|
|
explanationParagraph.appendChild(document.createElement("br"));
|
|
explanationParagraph.appendChild(document.createTextNode(`The best transfer costs ${progressMessage.bestDeltaV.toFixed(3)} m/s`));
|
|
}
|
|
}
|
|
|
|
firstManoeuvreTime.value = progressMessage.bestTransfer?.firstManoeuvre.time.toFixed(0) ?? "";
|
|
firstManoeuvrePrograde.value = progressMessage.bestTransfer?.firstManoeuvre.progradeDeltaV.toFixed(3) ?? "";
|
|
firstManoeuvreNormal.value = progressMessage.bestTransfer?.firstManoeuvre.normalDeltaV.toFixed(3) ?? "";
|
|
firstManoeuvreRadial.value = progressMessage.bestTransfer?.firstManoeuvre.radialDeltaV.toFixed(3) ?? "";
|
|
firstManoeuvreTotal.value = progressMessage.bestTransfer?.firstManoeuvre.totalDeltaV.toFixed(3) ?? "";
|
|
|
|
secondManoeuvreTime.value = progressMessage.bestTransfer?.secondManoeuvre.time.toFixed(0) ?? "";
|
|
secondManoeuvrePrograde.value = progressMessage.bestTransfer?.secondManoeuvre.progradeDeltaV.toFixed(3) ?? "";
|
|
secondManoeuvreNormal.value = progressMessage.bestTransfer?.secondManoeuvre.normalDeltaV.toFixed(3) ?? "";
|
|
secondManoeuvreRadial.value = progressMessage.bestTransfer?.secondManoeuvre.radialDeltaV.toFixed(3) ?? "";
|
|
secondManoeuvreTotal.value = progressMessage.bestTransfer?.secondManoeuvre.totalDeltaV.toFixed(3) ?? "";
|
|
};
|
|
}
|
|
} |