import { ballBearing } from './ballBearing'; import { centrifugalPump } from './centrifugalPump'; import { differentialGear } from './differentialGear'; import { discBrakeCaliper } from './discBrakeCaliper'; import { fourStrokePetrolEngine } from './fourStrokePetrolEngine'; import { genevaDrive } from './genevaDrive'; import { planetaryGearbox } from './planetaryGearbox'; import { wankelRotaryEngine } from './wankelRotaryEngine'; import type { ProceduralMachineId, ProceduralMachineModule, } from './types'; export const proceduralDemoMachines: ProceduralMachineModule[] = [ fourStrokePetrolEngine, planetaryGearbox, differentialGear, centrifugalPump, genevaDrive, ballBearing, discBrakeCaliper, wankelRotaryEngine, ]; export const proceduralDemoMachineById: Record = proceduralDemoMachines.reduce( (accumulator, machine) => { accumulator[machine.definition.id] = machine; return accumulator; }, {} as Record, ); export function getProceduralDemoMachine( id: string | null | undefined, ): ProceduralMachineModule { if (id && id in proceduralDemoMachineById) { return proceduralDemoMachineById[id as ProceduralMachineId]; } return fourStrokePetrolEngine; } export function getRelatedProceduralMachines( machineId: ProceduralMachineId, ): ProceduralMachineModule[] { const machine = proceduralDemoMachineById[machineId]; return machine.definition.relatedMachineIds .map((relatedId) => proceduralDemoMachineById[relatedId]) .filter(Boolean); }