UNPKG

@kayahr/ed-journal

Version:

Typescript library to read/watch the player journal of Frontier's game Elite Dangerous

167 lines (166 loc) 7.09 kB
import { type JournalEvent } from "../../JournalEvent.ts"; import type { BodyType } from "../types/BodyType.ts"; import type { ID } from "../types/ID.ts"; import type { PlanetClass } from "../types/PlanetClass.ts"; import type { StarType } from "../types/StarType.ts"; /** * The scan type. * * - `AutoScan`: Automatic scan of nearby bodies after jumping into a system. * - `Basic`: A basic scan in older game versions, when no Detailed Surface Scanner was installed. * - `Detailed`: Normal scan made with Full Spectrum System Scanner or in older game versions a scan made with the Detailed Surface Scanner installed. * - `NavBeaconDetail`: Data learned by scanning a nav beacon. */ export type ScanType = "AutoScan" | "Basic" | "Detailed" | "NavBeaconDetail"; /** The ring class (Icy, Metallic, Metal Rich or Rocky). */ export type RingClass = "eRingClass_Icy" | "eRingClass_Metalic" | "eRingClass_MetalRich" | "eRingClass_Rocky"; /** A ring of a planet, moon or star. */ export interface Ring { /** The ring name. */ Name: string; /** The ring class. */ RingClass: RingClass; /** The mass in mega tons. */ MassMT: number; /** The inner ring radius in meters. */ InnerRad: number; /** The outer ring radius in meters. */ OuterRad: number; } /** The resource reserve level. */ export type ReserveLevel = "PristineResources" | "LowResources" | "DepletedResources" | "MajorResources" | "CommonResources"; /** General scan data for every type of scanned body. */ export interface ScanBody extends JournalEvent<"Scan"> { /** The scan type. Missing in older journals. Maybe it is safe to assume a missing scan type is an auto scan. */ ScanType?: ScanType; /** Star system name. May not be set in older journals and must be taken from previous events (like {@link FSDJump} which always set a system name. */ StarSystem?: string; /** The system ID. Not set in older journals. */ SystemAddress?: ID; /** The planet name. */ BodyName: string; /** The ID of the planet. Not set in older journals. */ BodyID?: ID; /** The distance of the planet to the arrival star in light seconds. */ DistanceFromArrivalLS: number; /** Set to true if planet has been discovered by someone already. */ WasDiscovered?: boolean; /** Set to true if planet has been mapped by someone already. */ WasMapped?: boolean; /** Set to true if someone already set foot on this body. */ WasFootfalled?: boolean; /** Array of BodyType:BodyID pairs describing the body hierarchy from direct parent to root. */ Parents?: Array<{ [K in BodyType]: Record<K, number> & Partial<Record<Exclude<BodyType, K>, never>>; }[BodyType]>; /** The semi major axis in meters. Not set in basic scans. */ SemiMajorAxis?: number; /** Orbital eccentricity. Not set in older journal versions. */ Eccentricity?: number; /** Orbital inclination in degrees. Not set in older journal versions. */ OrbitalInclination?: number; /** Argument of periapsis in degrees. Not set in older journal versions. */ Periapsis?: number; /** Orbital period in seconds. Not set in older journal versions. */ OrbitalPeriod?: number; /** Ascending node in degrees. Not set in older journal versions. */ AscendingNode?: number; /** Mean anomaly in degrees. Not set in older journal versions. */ MeanAnomaly?: number; /** Axial tilt (in degrees) if rotating. Not set in basic scans. */ AxialTilt?: number; /** The rings around the body. Not set in basic scans or when there are no rings. */ Rings?: Ring[]; } /** Scan of a body which is not a star, planet or moon. */ export interface ScanOther extends ScanBody { PlanetClass?: never; StarType?: never; } /** * Scan of a star. Can be recognized by the existence of a `StarType` property. */ export interface ScanStar extends ScanBody { PlanetClass?: never; /** Stellar classification. */ StarType: StarType; /** Star's heat classification (0-9). Not set in older journal versions. */ Subclass?: number; /** Mass as multiple of Sol's mass. */ StellarMass: number; /** The radius of the star in meters. */ Radius: number; /** The absolute magnitude. */ AbsoluteMagnitude: number; /** Rotation period in seconds. */ RotationPeriod: number; SurfaceTemperature: number; /** The star luminosity. Not set in older journal versions. */ Luminosity?: string; /** Age in millions of years. */ Age_MY: number; } /** * Scan of a planet or moon. Can be recognized by the existence of a `PlanetClass` property. */ export interface ScanPlanet extends ScanBody { StarType?: never; /** The radius in meters. */ Radius: number; /** Rotation period in seconds. */ RotationPeriod: number; /** The surface temperature in Kelvin. Missing in basic scans. */ SurfaceTemperature?: number; /** True if planet/moon is tidally locked. Not set in basic scans. */ TidalLock?: boolean; /** The Terraform state. Not set in basic scans. */ TerraformState?: string; /** The planet class. */ PlanetClass: PlanetClass; /** The atmosphere. Not set in basic scans. Empty if no atmosphere. */ Atmosphere?: string; /** The atmosphere type. Not set in basic scans or no atmosphere is present. */ AtmosphereType?: string; /** The atmosphere composition. Not set in basic scans or no atmosphere is present. */ AtmosphereComposition?: Array<{ /** Element name (Like Hydrogen, Helium, ...) */ Name: string; /** The quantity in percent. */ Percent: number; }>; /** The volcanism like for example 'minor nitrogen magma volcanism'. Empty string if none. Not set in basic scans. */ Volcanism?: string; /** The surface gravity measured in m/s². */ SurfaceGravity: number; /** The surface pressure in kPa. Not set in basic scans. */ SurfacePressure?: number; /** True if ships can land on the planet/moon. Not set in basic scans. */ Landable?: boolean; /** List of raw materials which can be gathered on the planet/moon. Not set if none. */ Materials?: Array<{ /** The material name like "tungsten". */ Name: string; /** The quantity in percent. */ Percent: number; }>; /** The composition of the planet/moon. Not set in basic scans or when planet/moon is not solid. */ Composition?: { /** Quantity of ice in percent. */ Ice: number; /** Quantity of metal in percent. */ Metal: number; /** Quantity of rock in percent. */ Rock: number; }; /** The resource reserve level. */ ReserveLevel?: ReserveLevel; /** Earth masses. */ MassEM: number; } /** * Written on basic or detailed discovery scan of a star, planet, moon or ring. * * This is also generated when scanning a navigation beacon in a populated system, to record info * about all the bodies in the system */ export type Scan = ScanStar | ScanPlanet | ScanOther;