import { getOrbit, getOrbitFromEccentricity, type Orbit } from "../calculations/orbit-calculations"; export interface OrbitalParameters { periapsis: number; eccentricChoice: "apoapsis" | "eccentricity"; apoapsis: number; eccentricity: number; inclination: number; longitudeOfAscendingNode: number; argumentOfPeriapsis: number; } export const DefaultOrbitalParameters: OrbitalParameters = { periapsis: 100000, eccentricChoice: "apoapsis", apoapsis: 100000, eccentricity: 0, inclination: 0, longitudeOfAscendingNode: 0, argumentOfPeriapsis: 0 } export function encodeOrbitalParameters(orbitalParameters: OrbitalParameters): string { return JSON.stringify(orbitalParameters); } export function decodeOrbitalParameters(jsonString: string): OrbitalParameters { let parsedObject = JSON.parse(jsonString); var orbitalParameters: OrbitalParameters; if (parsedObject as OrbitalParameters === undefined) { orbitalParameters = DefaultOrbitalParameters; } else { orbitalParameters = parsedObject; } return orbitalParameters; } export function createLabel(forId: string, labelText: string): HTMLLabelElement { let label = document.createElement("label"); label.setAttribute("for", forId); label.appendChild(document.createTextNode(labelText)); return label; } export function createNumberInput(id: string, minimum: number, maximum?: number, size?: number): HTMLInputElement { let numberInput = document.createElement("input"); numberInput.setAttribute("id", id); numberInput.setAttribute("type", "number"); numberInput.setAttribute("min", minimum.toFixed(0)); if (maximum !== undefined) { numberInput.setAttribute("max", maximum.toFixed(0)); } if (size !== undefined) { numberInput.setAttribute("size", size.toFixed(0)); } return numberInput; } export function createDisabledInput(id: string) { let input = document.createElement("input"); input.setAttribute("id", id); input.setAttribute("disabled", ""); return input; } export function getOrbitFromParameters(orbitalParameters: OrbitalParameters, planetRadius: number): Orbit { if (orbitalParameters.eccentricChoice == "apoapsis") { return getOrbit( orbitalParameters.periapsis + planetRadius, orbitalParameters.apoapsis + planetRadius, orbitalParameters.inclination, orbitalParameters.longitudeOfAscendingNode, orbitalParameters.argumentOfPeriapsis ) } else { return getOrbitFromEccentricity( orbitalParameters.periapsis + planetRadius, orbitalParameters.eccentricity, orbitalParameters.inclination, orbitalParameters.longitudeOfAscendingNode, orbitalParameters.argumentOfPeriapsis ); } }