Check if initials match exactly a body's name

This commit is contained in:
Nazar Misyats
2025-10-18 01:22:24 -07:00
parent a5933b5c25
commit fe634389da
2 changed files with 28 additions and 14 deletions

View File

@@ -23,19 +23,25 @@ export class FlybySequence {
const initials = initialsList[i];
if (initials.length < 2)
throw new Error("Body sequence initials must contain at least 2 characters.");
const bodiesWithInitials = [];
let candidateBodies = [];
for (const body of system.orbiting) {
if (body.name.toLowerCase().startsWith(initials.toLowerCase())) {
bodiesWithInitials.push(body);
const bodyNameLowercase = body.name.toLowerCase();
const initialsLowercase = initials.toLowerCase();
if (bodyNameLowercase == initialsLowercase) {
candidateBodies = [body];
break;
}
if (bodyNameLowercase.startsWith(initialsLowercase)) {
candidateBodies.push(body);
}
}
if (bodiesWithInitials.length >= 2) {
const bodyNames = bodiesWithInitials.map(body => body.name);
if (candidateBodies.length >= 2) {
const bodyNames = candidateBodies.map(body => body.name);
throw new Error(`Ambiguous initials \"${initials}\": ${joinStrings(bodyNames, ", ")}.`);
}
if (bodiesWithInitials.length == 0)
if (candidateBodies.length == 0)
throw new Error(`Invalid custom sequence body initials \"${initials}\".`);
const body = bodiesWithInitials[0];
const body = candidateBodies[0];
if (i == 0) {
attractorId = body.attractor.id;
}

View File

@@ -37,21 +37,29 @@ export class FlybySequence {
if (initials.length < 2)
throw new Error("Body sequence initials must contain at least 2 characters.");
let candidateBodies: OrbitingBody[] = [];
// check for ambiguity and validity
const bodiesWithInitials: OrbitingBody[] = [];
for (const body of system.orbiting) {
if (body.name.toLowerCase().startsWith(initials.toLowerCase())) {
bodiesWithInitials.push(body);
const bodyNameLowercase = body.name.toLowerCase();
const initialsLowercase = initials.toLowerCase();
// if initials match exactly the body's name, choose that body
if (bodyNameLowercase == initialsLowercase) {
candidateBodies = [body];
break;
}
// otherwise keep track of bodies with same initials
if (bodyNameLowercase.startsWith(initialsLowercase)) {
candidateBodies.push(body);
}
}
if (bodiesWithInitials.length >= 2) {
const bodyNames = bodiesWithInitials.map(body => body.name);
if (candidateBodies.length >= 2) {
const bodyNames = candidateBodies.map(body => body.name);
throw new Error(`Ambiguous initials \"${initials}\": ${joinStrings(bodyNames, ", ")}.`);
}
if (bodiesWithInitials.length == 0)
if (candidateBodies.length == 0)
throw new Error(`Invalid custom sequence body initials \"${initials}\".`);
const body = bodiesWithInitials[0];
const body = candidateBodies[0];
// check for same attractor
if (i == 0) {
attractorId = body.attractor.id;