deadhead-space-freight-tycoon/packages/sim/src/pilot.ts

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 };
}