-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfactory.ts
More file actions
82 lines (77 loc) · 2.55 KB
/
Copy pathfactory.ts
File metadata and controls
82 lines (77 loc) · 2.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
import type {
CanonicalAircraftDefinition,
CanonicalElectricalSystemConfig,
CanonicalFuelSystemConfig,
CanonicalPropulsionSystemConfig,
CanonicalSurfaceSystemConfig,
} from './aircraft'
import { AutopilotSubsystem } from './autopilot'
import { AvionicsSubsystem } from './avionics'
import { ControlStateKeys, ControlsSubsystem } from './controls'
import { ElectricalSubsystem } from './electrical'
import { EnvironmentSubsystem } from './environment'
import { FuelSubsystem, type FuelSubsystemDefinition } from './fuel'
import { LightingElectricalSubsystem } from './lightingElectrical'
import { PropulsionSubsystem } from './propulsion'
import { SimulatorEngine } from './SimulatorEngine'
import { SurfaceAnimationSubsystem } from './surfaces'
const DEFAULT_SURFACE_SYSTEM: CanonicalSurfaceSystemConfig = {
surfaces: [
{
id: 'flaps',
controlStateKey: ControlStateKeys.flapsHandleRatio(),
extensionRatePerSecond: 0.85,
retractionRatePerSecond: 0.85,
},
{
id: 'spoilers',
controlStateKey: ControlStateKeys.spoilersHandleRatio(),
extensionRatePerSecond: 2.5,
retractionRatePerSecond: 2.5,
},
],
}
export function createSimulatorEngineForAircraft(
aircraft: CanonicalAircraftDefinition
): SimulatorEngine {
const engine = new SimulatorEngine(aircraft)
engine.registerSubsystem(
new ElectricalSubsystem(
findSystemConfig<CanonicalElectricalSystemConfig>(aircraft, 'electrical') ?? {}
)
)
engine.registerSubsystem(
new FuelSubsystem(
findSystemConfig<CanonicalFuelSystemConfig & FuelSubsystemDefinition>(
aircraft,
'fuel'
) ?? {}
)
)
engine.registerSubsystem(
new PropulsionSubsystem(
findSystemConfig<CanonicalPropulsionSystemConfig>(aircraft, 'propulsion') ?? {}
)
)
engine.registerSubsystem(new ControlsSubsystem())
engine.registerSubsystem(
new SurfaceAnimationSubsystem(
findSystemConfig<CanonicalSurfaceSystemConfig>(aircraft, 'surfaces') ??
findSystemConfig<CanonicalSurfaceSystemConfig>(aircraft, 'surface-animation') ??
DEFAULT_SURFACE_SYSTEM
)
)
engine.registerSubsystem(new EnvironmentSubsystem())
engine.registerSubsystem(new LightingElectricalSubsystem())
engine.registerSubsystem(new AvionicsSubsystem())
engine.registerSubsystem(new AutopilotSubsystem())
return engine
}
function findSystemConfig<T>(
aircraft: CanonicalAircraftDefinition,
kind: string
): T | undefined {
return aircraft.systems?.find(system => system.kind === kind)?.config as unknown as
| T
| undefined
}