feat: production chain
This commit is contained in:
@@ -7,6 +7,7 @@ import type {
|
||||
ClaimVisual,
|
||||
ConstructionSiteVisual,
|
||||
NodeVisual,
|
||||
PlanetVisual,
|
||||
Selectable,
|
||||
ShipVisual,
|
||||
SpatialNodeVisual,
|
||||
@@ -19,7 +20,7 @@ interface ResolveSelectionPositionParams {
|
||||
selection: Selectable;
|
||||
worldTimeSyncMs: number;
|
||||
nodeVisuals: Map<string, NodeVisual>;
|
||||
planetVisuals: { systemId: string; planet: { label: string }; mesh: THREE.Mesh }[];
|
||||
planetVisuals: PlanetVisual[];
|
||||
computeNodeLocalPosition: (visual: NodeVisual, timeSeconds: number) => THREE.Vector3;
|
||||
resolveBubblePosition: (bubbleId: string) => THREE.Vector3 | undefined;
|
||||
resolvePointPosition: (systemId: string, nodeId?: string | null) => THREE.Vector3;
|
||||
@@ -49,7 +50,7 @@ interface SeedSystemFocusParams {
|
||||
systemFocusLocal: THREE.Vector3;
|
||||
worldTimeSyncMs: number;
|
||||
nodeVisuals: Map<string, NodeVisual>;
|
||||
planetVisuals: { systemId: string; planet: { label: string }; mesh: THREE.Mesh }[];
|
||||
planetVisuals: PlanetVisual[];
|
||||
computeNodeLocalPosition: (visual: NodeVisual, timeSeconds: number) => THREE.Vector3;
|
||||
resolveBubblePosition: (bubbleId: string) => THREE.Vector3 | undefined;
|
||||
resolvePointPosition: (systemId: string, nodeId?: string | null) => THREE.Vector3;
|
||||
@@ -217,9 +218,7 @@ export function resolveSelectionPosition(params: ResolveSelectionPositionParams)
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const visual = planetVisuals.find((candidate) =>
|
||||
candidate.systemId === selection.systemId && candidate.planet === planet);
|
||||
return visual?.mesh.position.clone() ?? computePlanetLocalPosition(planet, currentWorldTimeSeconds(world, worldTimeSyncMs));
|
||||
return computePlanetLocalPosition(planet, currentWorldTimeSeconds(world, worldTimeSyncMs));
|
||||
}
|
||||
|
||||
const system = world.systems.get(selection.id);
|
||||
@@ -240,8 +239,14 @@ export function focusOnSelection(params: FocusOnSelectionParams) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (selection.kind === "system") {
|
||||
galaxyFocus.copy(nextFocus);
|
||||
systemFocusLocal.set(0, 0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
const selectionSystemId = resolveSelectableSystemId(world, selection);
|
||||
if (selectionSystemId && selection.kind !== "system" && world) {
|
||||
if (selectionSystemId && world) {
|
||||
const system = world.systems.get(selectionSystemId);
|
||||
if (system) {
|
||||
galaxyFocus.copy(toThreeVector(system.galaxyPosition));
|
||||
@@ -282,6 +287,11 @@ export function seedSystemFocusLocal(params: SeedSystemFocusParams) {
|
||||
|
||||
const selected = selectedItems[0];
|
||||
if (selected && resolveSelectableSystemId(world, selected) === systemId) {
|
||||
if (selected.kind === "system") {
|
||||
systemFocusLocal.set(0, 0, 0);
|
||||
return;
|
||||
}
|
||||
|
||||
const selectedPosition = resolveSelectionPosition({
|
||||
world,
|
||||
selection: selected,
|
||||
|
||||
Reference in New Issue
Block a user