41 lines
1.4 KiB
TypeScript
41 lines
1.4 KiB
TypeScript
import { cargoTypes, skills } from "./data/cargo";
|
|
import { gameConfig } from "./data/config";
|
|
import { dealLoanAmount } from "./deal";
|
|
import { goods } from "./data/goods";
|
|
import { locations } from "./data/locations";
|
|
import { onboardingGoals, scriptedTutorialContracts, veteranPilot } from "./data/onboarding";
|
|
import { shipModels } from "./data/ships";
|
|
import { upgrades } from "./data/upgrades";
|
|
|
|
/** Returns a lookup that gives `undefined` for an unknown id instead of throwing. */
|
|
function byId<T extends { id: string }>(items: readonly T[]): (id: string) => T | undefined {
|
|
const map = new Map(items.map((item) => [item.id, item]));
|
|
return (id) => map.get(id);
|
|
}
|
|
|
|
/** All static game data in one object, with lookups by id. */
|
|
export const content = {
|
|
locations,
|
|
shipModels,
|
|
/** Ship models players can buy (excludes company ships such as the loaner). */
|
|
purchasableShipModels: shipModels.filter((s) => s.purchasable),
|
|
cargoTypes,
|
|
goods,
|
|
skills,
|
|
config: gameConfig,
|
|
scriptedTutorialContracts,
|
|
onboardingGoals,
|
|
veteranPilot,
|
|
upgrades,
|
|
/** The deal's loan: its ships' prices plus the bay lease (decision 0.5.83). */
|
|
dealLoanAmount: dealLoanAmount({ config: gameConfig, shipModels, locations }),
|
|
location: byId(locations),
|
|
shipModel: byId(shipModels),
|
|
cargoType: byId(cargoTypes),
|
|
good: byId(goods),
|
|
skill: byId(skills),
|
|
onboardingGoal: byId(onboardingGoals),
|
|
upgrade: byId(upgrades),
|
|
};
|
|
export type Content = typeof content;
|