import { content } from "@deadhead/content"; import { deliveryXp, loanerModel } from "@deadhead/sim"; import { useQuery } from "@tanstack/react-query"; import { useApi } from "../api/context"; import { useClock } from "../clock/clock"; import { formatCredits, formatDuration, locationName, cargoName } from "../format"; import { distanceAt, tripRealMs } from "../game"; import { errorMessage, useGameAction, useLoadedPlayer } from "../state/actions"; export const TUTORIAL_BOARD_KEY = ["board", "tutorial"] as const; /** The company board during the tutorial (Step 9.3). */ export function TutorialBoard() { const api = useApi(); const state = useLoadedPlayer(); const now = useClock((s) => s.now); const board = useQuery({ queryKey: TUTORIAL_BOARD_KEY, queryFn: () => api.call("getTutorialBoard", {}), }); const fly = useGameAction("createDispatch"); const runInFlight = state.tutorial?.runInFlight ?? false; const loaner = loanerModel(content); const firstRun = (state.tutorial?.runsCompleted ?? 0) === 0; if (board.isPending) return
Loading contracts…
; if (board.isError) { return (Halvorsen Lunar Freight needs a pilot.
Their ship, your hands. Get the crates to the Moon.
Company runs in the loaner {loaner.name}. You keep a share of each payout.
{runInFlight && (Your run is in flight. Wait for it to land.
)} {fly.isError && ({errorMessage(fly.error)}
)} {board.data.contracts.length === 0 && (No company runs left this period. Check back soon.
)}{locationName(contract.originId)} → {locationName(contract.destinationId)} · double pay, no questions asked
)}