diff --git a/src/app/features/galaxy-system/galaxy-system-scene.component.ts b/src/app/features/galaxy-system/galaxy-system-scene.component.ts
index d0b58da..7b4d6e7 100644
--- a/src/app/features/galaxy-system/galaxy-system-scene.component.ts
+++ b/src/app/features/galaxy-system/galaxy-system-scene.component.ts
@@ -181,6 +181,10 @@ function galacticOverviewPose(): { position: THREE.Vector3; target: THREE.Vector
template: `
+
+
@@ -709,31 +713,6 @@ export class GalaxySystemSceneComponent implements AfterViewInit, OnDestroy {
leader.setAttribute('visibility', 'visible');
}
- /**
- * Names the bodies of the system the view is inside.
- *
- * Outermost first, because that is the order that survives the separation test usefully: with
- * the whole system in frame the outer planets are the ones far enough apart to label, and the
- * inner four are a single clump around the star. Closing in reverses it on its own — the outer
- * orbits leave the frame and their labels drop out, freeing the space for the inner planets.
- *
- * Moons are left out entirely: they sit within a marker's width of their planet at system
- * framing, so their labels could only ever print on top of it.
- */
- /**
- * Names the stars nearest the one the camera is inside, each on the side of the view its own
- * lies on. It is the one thing a system view cannot otherwise say: which way its neighbours
- * are, and how far. Each is a button that flies there, so a chain of neighbours can be walked
- * without pulling back out to the field between hops.
- *
- * These are bearings, not sky positions, and are drawn as such: a ring of names at a fixed
- * radius from the centre of the frame, which reads as instrument rather than as scene. The
- * true position cannot be drawn — the nearest star to the Sun is 268 000 AU away, thirteen
- * times the far plane — and a true *direction* is worse than useless here: at this field of
- * view, three neighbours in four fall outside the frame entirely, so the view would name
- * whichever happened to be in front and stay silent about the rest. What survives the ring is
- * the half of the direction that a viewer can act on: which way to turn to face it.
- */
/** Resolves the current system's neighbours once, on arrival. Cleared outside a system. */
private resolveNeighbours(): void {
const origin = this.currentStarId === null ? undefined : this.starsById.get(this.currentStarId);
@@ -742,7 +721,13 @@ export class GalaxySystemSceneComponent implements AfterViewInit, OnDestroy {
return;
}
this.neighbours = this.neighbourhood
- .nearest(origin.id, NEIGHBOUR_COUNT)
+ // Asked wide and cut back, because a catalogue holds binary companions as two rows at one
+ // position: a neighbour whose separation rounds to what no separation prints as is not a
+ // place to go, it is the same place. Compared through the formatter rather than against a
+ // hand-picked epsilon, so the rule stays "would print as zero" whatever the formatter does.
+ .nearest(origin.id, NEIGHBOUR_COUNT * 2)
+ .filter((neighbour) => formatParsecs(neighbour.distancePc) !== formatParsecs(0))
+ .slice(0, NEIGHBOUR_COUNT)
.flatMap((neighbour) => {
const star = this.starsById.get(neighbour.id);
return star
@@ -848,6 +833,17 @@ export class GalaxySystemSceneComponent implements AfterViewInit, OnDestroy {
}
}
+ /**
+ * Names the bodies of the system the view is inside.
+ *
+ * Outermost first, because that is the order that survives the separation test usefully: with
+ * the whole system in frame the outer planets are the ones far enough apart to label, and the
+ * inner four are a single clump around the star. Closing in reverses it on its own — the outer
+ * orbits leave the frame and their labels drop out, freeing the space for the inner planets.
+ *
+ * Moons are left out entirely: they sit within a marker's width of their planet at system
+ * framing, so their labels could only ever print on top of it.
+ */
private updateSystemLabels(camera: THREE.PerspectiveCamera): void {
const renderer = this.systemRenderer;
if (!renderer) {
diff --git a/src/app/features/galaxy-system/starmap-hud.component.ts b/src/app/features/galaxy-system/starmap-hud.component.ts
index 9a0f2c7..5334719 100644
--- a/src/app/features/galaxy-system/starmap-hud.component.ts
+++ b/src/app/features/galaxy-system/starmap-hud.component.ts
@@ -38,8 +38,6 @@ const LADDER: readonly { level: ViewLevel; label: string }[] = [
imports: [ReticleIconComponent],
host: { class: 'pointer-events-none absolute inset-0 block select-none' },
template: `
-
-
@if (showReticle()) {