26 lines
972 B
TypeScript
26 lines
972 B
TypeScript
import type { Contract } from "./contract";
|
|
|
|
export const LONG_HAUL_SKILL_ID = "long-haul";
|
|
|
|
/** A pilot's skill levels by skill id; a missing skill is level 0. */
|
|
export type SkillLevels = Readonly<Record<string, number>>;
|
|
|
|
export type PilotCheck =
|
|
{ ok: true } | { ok: false; reason: "cargo-skill-too-low" | "long-haul-too-low" };
|
|
|
|
export function skillLevel(skills: SkillLevels, skillId: string): number {
|
|
return skills[skillId] ?? 0;
|
|
}
|
|
|
|
/** Whether a pilot's skills meet a contract's cargo-skill and Long Haul requirements. */
|
|
export function checkPilotEligibility(skills: SkillLevels, contract: Contract): PilotCheck {
|
|
const required = contract.requiredSkill;
|
|
if (required && skillLevel(skills, required.skillId) < required.level) {
|
|
return { ok: false, reason: "cargo-skill-too-low" };
|
|
}
|
|
if (skillLevel(skills, LONG_HAUL_SKILL_ID) < contract.requiredLongHaulLevel) {
|
|
return { ok: false, reason: "long-haul-too-low" };
|
|
}
|
|
return { ok: true };
|
|
}
|