diff options
author | Julien Dessaux | 2024-04-06 21:36:42 +0200 |
---|---|---|
committer | Julien Dessaux | 2024-04-07 23:01:52 +0200 |
commit | 3e80bc8a4d3127d17dbc3f52301d33a79e53a980 (patch) | |
tree | 41caed2075ed39f8eec5f3465aded203ae377c58 /nodejs/lib/utils.ts | |
parent | [node] waypoints usage refactoring (diff) | |
download | spacetraders-3e80bc8a4d3127d17dbc3f52301d33a79e53a980.tar.gz spacetraders-3e80bc8a4d3127d17dbc3f52301d33a79e53a980.tar.bz2 spacetraders-3e80bc8a4d3127d17dbc3f52301d33a79e53a980.zip |
[node] multiple contracting fixes and some more refactoring
Diffstat (limited to '')
-rw-r--r-- | nodejs/lib/utils.ts | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/nodejs/lib/utils.ts b/nodejs/lib/utils.ts index 39378e9..480e7a4 100644 --- a/nodejs/lib/utils.ts +++ b/nodejs/lib/utils.ts @@ -5,6 +5,11 @@ export type CategorizedCargo = { goods: CargoManifest; }; +type Point = { + x: number; + y: number; +}; + // cargo is a ship.cargo object, want is an optional symbol export function categorizeCargo(cargo: Cargo, want?: string): CategorizedCargo { const wanted = cargo.inventory.filter(i => i.symbol === want || i.symbol === 'ANTIMATTER'); @@ -20,6 +25,26 @@ export function categorizeCargo(cargo: Cargo, want?: string): CategorizedCargo { return {wanted: wobj, goods: gobj}; } +export function distance(a: Point, b: Point) { + return Math.sqrt((a.x-b.x)**2 + (a.y-b.y)**2); +} + +export function sortByDistanceFrom<T extends Point>(a: Point, points: Array<T>): Array<{data: T, distance: number}>{ + let result = points.map(function (m) { return { + data: m, + distance: distance(a, m), + }}); + result.sort(function(a, b) { + if (a.distance < b.distance) { + return -1; + } else if (a.distance > b.distance) { + return 1; + } + return 0; + }); + return result; +} + export function systemFromWaypoint(waypoint: string): string { return waypoint.split('-').slice(0,2).join('-'); } |