@inventure71/paddockjs 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +52 -0
- package/INSTALL_AND_UPDATE.md +4 -3
- package/README.md +194 -12
- package/docs/architecture.md +119 -44
- package/docs/concepts.md +4 -2
- package/docs/custom_model_controller.md +329 -0
- package/docs/data_contract.md +299 -17
- package/docs/index.md +1 -0
- package/docs/learnings.md +22 -0
- package/docs/rules.md +37 -10
- package/docs/system_specs.md +23 -10
- package/docs/training.md +272 -30
- package/examples/python/README.md +62 -0
- package/examples/python/base_policy_server.py +191 -0
- package/examples/python/requirements.txt +2 -0
- package/package.json +12 -4
- package/src/api/PaddockSimulatorController.js +4 -0
- package/src/app/BrowserExpertAdapter.js +367 -9
- package/src/app/F1SimulatorApp.js +305 -1603
- package/src/app/banners/bannerFormatters.js +55 -0
- package/src/app/banners/raceDataBannerController.js +141 -0
- package/src/app/banners/stewardMessageController.js +99 -0
- package/src/app/camera/cameraConstants.js +21 -0
- package/src/app/camera/cameraController.js +265 -0
- package/src/app/camera/cameraGeometry.js +176 -0
- package/src/app/domBindings.js +4 -0
- package/src/app/readouts/carOverviewRenderer.js +109 -0
- package/src/app/readouts/controlStateRenderer.js +37 -0
- package/src/app/readouts/raceStatusRenderer.js +133 -0
- package/src/app/readouts/readoutFormatters.js +58 -0
- package/src/app/readouts/telemetryRenderer.js +113 -0
- package/src/app/readouts/timingTowerRenderer.js +177 -0
- package/src/app/rendering/appAssets.js +38 -0
- package/src/app/rendering/carRenderer.js +286 -0
- package/src/app/rendering/displayUtils.js +22 -0
- package/src/app/rendering/drsTrailRenderer.js +90 -0
- package/src/app/rendering/expertSensorRenderer.js +126 -0
- package/src/app/rendering/pitLaneStatusRenderer.js +50 -0
- package/src/app/rendering/replayGhostRenderer.js +124 -0
- package/src/app/rendering/trackRenderer.js +25 -0
- package/src/app/runtime/frameLoop.js +66 -0
- package/src/app/runtime/runtimeTiming.js +34 -0
- package/src/app/runtime/runtimeVisibility.js +45 -0
- package/src/config/defaultOptions.js +20 -0
- package/src/environment/actions.js +13 -5
- package/src/environment/controllerLoop.js +246 -0
- package/src/environment/episode.js +86 -2
- package/src/environment/evaluation.js +54 -32
- package/src/environment/index.d.ts +361 -9
- package/src/environment/index.js +1 -0
- package/src/environment/metrics.js +159 -0
- package/src/environment/observationOptions.js +22 -1
- package/src/environment/observations.js +325 -40
- package/src/environment/options.js +37 -5
- package/src/environment/runtime.js +222 -21
- package/src/environment/scenarios.js +37 -8
- package/src/environment/sensors/bodySenses.js +23 -0
- package/src/environment/sensors/boundarySenses.js +17 -0
- package/src/environment/sensors/carRays.js +75 -0
- package/src/environment/sensors/contactSenses.js +32 -0
- package/src/environment/sensors/index.js +157 -0
- package/src/environment/sensors/indexedRayBands.js +103 -0
- package/src/environment/sensors/nearbyCars.js +52 -0
- package/src/environment/sensors/opponentRadar.js +65 -0
- package/src/environment/sensors/rayConfig.js +110 -0
- package/src/environment/sensors/rayDefaults.js +6 -0
- package/src/environment/sensors/rayGeometry.js +60 -0
- package/src/environment/sensors/rayGuards.js +19 -0
- package/src/environment/sensors/sensorTargets.js +60 -0
- package/src/environment/sensors/surfaceRays.js +296 -0
- package/src/environment/sensors/trackRays.js +261 -0
- package/src/environment/sensors.js +1 -367
- package/src/environment/specs.js +100 -5
- package/src/environment/workerProtocol.js +13 -1
- package/src/index.d.ts +169 -6
- package/src/index.js +5 -0
- package/src/rendering/proceduralTrackAsset.js +20 -823
- package/src/rendering/renderSnapshot.js +38 -12
- package/src/rendering/track/finishLineRenderer.js +34 -0
- package/src/rendering/track/gridRenderer.js +47 -0
- package/src/rendering/track/offsetStrokeSafety.js +136 -0
- package/src/rendering/track/pitLaneRenderer.js +248 -0
- package/src/rendering/track/trackMaterialRenderer.js +326 -0
- package/src/rendering/track/trackRenderConstants.js +38 -0
- package/src/rendering/track/trackRenderGeometry.js +94 -0
- package/src/simulation/collisionGeometry.js +1 -1
- package/src/simulation/driver/driverControlConstants.js +28 -0
- package/src/simulation/driver/driverController.js +47 -0
- package/src/simulation/driver/driverInput.js +28 -0
- package/src/simulation/driver/driverMath.js +6 -0
- package/src/simulation/driver/driverPersonality.js +25 -0
- package/src/simulation/driver/edgeRecovery.js +48 -0
- package/src/simulation/driver/racingControls.js +399 -0
- package/src/simulation/driver/racingLinePlan.js +166 -0
- package/src/simulation/driver/recoveryDynamics.js +38 -0
- package/src/simulation/driver/rejoinControls.js +213 -0
- package/src/simulation/driver/safetyCarControls.js +35 -0
- package/src/simulation/driver/trafficScan.js +51 -0
- package/src/simulation/driverController.js +4 -619
- package/src/simulation/participants/participantInteractions.js +120 -0
- package/src/simulation/pit/pitFlow.js +234 -0
- package/src/simulation/pit/pitIntent.js +92 -0
- package/src/simulation/pit/pitOccupancy.js +47 -0
- package/src/simulation/pit/pitPenaltyService.js +71 -0
- package/src/simulation/pit/pitQueue.js +55 -0
- package/src/simulation/pit/pitRouteMovement.js +160 -0
- package/src/simulation/pit/pitRouting.js +319 -0
- package/src/simulation/pit/pitService.js +41 -0
- package/src/simulation/pit/pitServiceConstants.js +21 -0
- package/src/simulation/pit/pitServiceProfile.js +45 -0
- package/src/simulation/pit/pitSnapshots.js +61 -0
- package/src/simulation/pit/pitState.js +113 -0
- package/src/simulation/pit/pitTireService.js +92 -0
- package/src/simulation/race/classification.js +104 -0
- package/src/simulation/race/gridPenalties.js +37 -0
- package/src/simulation/race/raceControlState.js +38 -0
- package/src/simulation/race/raceDistance.js +32 -0
- package/src/simulation/race/raceFinish.js +65 -0
- package/src/simulation/race/raceLifecycle.js +71 -0
- package/src/simulation/race/raceOrder.js +113 -0
- package/src/simulation/race/raceProgress.js +124 -0
- package/src/simulation/race/raceSetup.js +93 -0
- package/src/simulation/race/raceStep.js +80 -0
- package/src/simulation/race/redFlag.js +15 -0
- package/src/simulation/race/retirements.js +44 -0
- package/src/simulation/race/safetyCar.js +86 -0
- package/src/simulation/race/stalledDnf.js +86 -0
- package/src/simulation/raceSimulation.js +230 -2817
- package/src/simulation/replay/replayGhosts.js +128 -0
- package/src/simulation/rules/moduleConfig.js +72 -0
- package/src/simulation/rules/penaltyConfig.js +99 -0
- package/src/simulation/rules/penaltyEvents.js +18 -0
- package/src/simulation/rules/penaltyStats.js +26 -0
- package/src/simulation/rules/ruleConfigMerge.js +41 -0
- package/src/simulation/rules/ruleDefaults.js +85 -0
- package/src/simulation/rules/rulesReview.js +141 -0
- package/src/simulation/rules/rulesetPresets.js +47 -0
- package/src/simulation/rules/trackLimitsSteward.js +1 -1
- package/src/simulation/rulesConfig.js +5 -323
- package/src/simulation/snapshots/raceSnapshots.js +192 -0
- package/src/simulation/timing/drsTiming.js +87 -0
- package/src/simulation/timing/gapEstimation.js +38 -0
- package/src/simulation/timing/lapTelemetry.js +182 -0
- package/src/simulation/timing/raceTiming.js +15 -0
- package/src/simulation/timing/sectorPerformance.js +60 -0
- package/src/simulation/timing/timingConstants.js +5 -0
- package/src/simulation/timing/timingHistory.js +46 -0
- package/src/simulation/timing/timingLines.js +79 -0
- package/src/simulation/track/centerlineSpline.js +59 -0
- package/src/simulation/track/drsZones.js +67 -0
- package/src/simulation/track/pitLaneAccess.js +103 -0
- package/src/simulation/track/pitLaneLayout.js +395 -0
- package/src/simulation/track/pitLaneState.js +160 -0
- package/src/simulation/track/proceduralCenterline.js +237 -0
- package/src/simulation/track/sampleGeometry.js +49 -0
- package/src/simulation/track/spatialQueries.js +154 -0
- package/src/simulation/track/startStraight.js +141 -0
- package/src/simulation/track/trackConstants.js +109 -0
- package/src/simulation/track/trackGenerationOptions.js +283 -0
- package/src/simulation/track/trackMath.js +241 -0
- package/src/simulation/track/trackModel.js +240 -0
- package/src/simulation/track/trackQueryIndex.js +945 -0
- package/src/simulation/track/trackSectors.js +19 -0
- package/src/simulation/track/trackStatePolicy.js +24 -0
- package/src/simulation/track/trackValidation.js +98 -0
- package/src/simulation/trackModel.js +1 -1706
- package/src/simulation/vehicle/contactResolution.js +116 -0
- package/src/simulation/vehicle/mainTrackWheelSurface.js +82 -0
- package/src/simulation/vehicle/pitWheelSurface.js +69 -0
- package/src/simulation/vehicle/runoffResponse.js +88 -0
- package/src/simulation/vehicle/surfacePriority.js +28 -0
- package/src/simulation/vehicle/vehicleGeometry.js +247 -0
- package/src/simulation/vehicle/vehiclePhysics.js +363 -0
- package/src/simulation/vehicle/vehicleSnapshots.js +316 -0
- package/src/simulation/vehicle/vehicleState.js +186 -0
- package/src/simulation/vehicle/wheelSurface.js +150 -0
- package/src/simulation/vehicleGeometry.js +1 -247
- package/src/simulation/vehiclePhysics.js +1 -136
- package/src/simulation/warmup/runtimeWarmup.js +224 -0
- package/src/simulation/wheelSurface.js +1 -338
- package/src/styles.css +42 -0
- package/src/ui/cameraControlsTemplate.js +20 -0
- package/src/ui/carOverviewTemplate.js +33 -0
- package/src/ui/componentTemplates.js +14 -360
- package/src/ui/raceCanvasTemplate.js +69 -0
- package/src/ui/raceControlsTemplate.js +36 -0
- package/src/ui/shellTemplate.js +5 -4
- package/src/ui/telemetryDrawerTemplate.js +55 -0
- package/src/ui/telemetryTemplates.js +136 -0
- package/src/ui/timingTowerTemplate.js +34 -0
package/src/index.d.ts
CHANGED
|
@@ -1,8 +1,76 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import type {
|
|
2
|
+
PaddockActionSpec,
|
|
3
|
+
PaddockDriverControllerLoop,
|
|
4
|
+
PaddockDriverControllerLoopOptions,
|
|
5
|
+
PaddockObservationSpec,
|
|
6
|
+
PaddockParticipantInteraction as EnvPaddockParticipantInteraction,
|
|
7
|
+
PaddockParticipantInteractionsOptions as EnvPaddockParticipantInteractionsOptions,
|
|
8
|
+
PaddockParticipantInteractionOverride as EnvPaddockParticipantInteractionOverride,
|
|
9
|
+
PaddockParticipantInteractionProfile as EnvPaddockParticipantInteractionProfile,
|
|
10
|
+
PaddockReplayGhostOptions as EnvPaddockReplayGhostOptions,
|
|
11
|
+
PaddockReplayGhostSnapshot as EnvPaddockReplayGhostSnapshot,
|
|
12
|
+
PaddockReplayGhostTrajectorySample as EnvPaddockReplayGhostTrajectorySample,
|
|
13
|
+
} from './environment/index.js';
|
|
14
|
+
|
|
15
|
+
export type {
|
|
16
|
+
PaddockActionSpec,
|
|
17
|
+
PaddockControllerRuntime,
|
|
18
|
+
PaddockDriverController,
|
|
19
|
+
PaddockDriverControllerContext,
|
|
20
|
+
PaddockDriverControllerLoop,
|
|
21
|
+
PaddockDriverControllerLoopOptions,
|
|
22
|
+
PaddockObservationSpec,
|
|
23
|
+
} from './environment/index.js';
|
|
4
24
|
|
|
5
25
|
export type TireCompound = 'S' | 'M' | 'H';
|
|
26
|
+
export type PaddockPhysicsMode = 'arcade' | 'simulator';
|
|
27
|
+
export type PaddockWarmupPolicy = 'config-change' | 'always' | 'never';
|
|
28
|
+
export type PaddockProceduralTrackProfile = 'race' | 'training-short' | 'training-medium' | 'training-technical';
|
|
29
|
+
|
|
30
|
+
export interface PaddockWarmupOptions {
|
|
31
|
+
enabled?: boolean;
|
|
32
|
+
policy?: PaddockWarmupPolicy;
|
|
33
|
+
steps?: number;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export interface PaddockProceduralTrackOptions {
|
|
37
|
+
profile?: PaddockProceduralTrackProfile;
|
|
38
|
+
minLengthMeters?: number;
|
|
39
|
+
maxLengthMeters?: number;
|
|
40
|
+
startStraightMeters?: number;
|
|
41
|
+
includePitLane?: boolean;
|
|
42
|
+
length?: {
|
|
43
|
+
minMeters?: number;
|
|
44
|
+
maxMeters?: number;
|
|
45
|
+
};
|
|
46
|
+
startStraight?: {
|
|
47
|
+
gridMeters?: number;
|
|
48
|
+
exitMeters?: number;
|
|
49
|
+
blendMeters?: number;
|
|
50
|
+
lockExtraMeters?: number;
|
|
51
|
+
};
|
|
52
|
+
pitLane?: {
|
|
53
|
+
enabled?: boolean;
|
|
54
|
+
};
|
|
55
|
+
shape?: {
|
|
56
|
+
scale?: number;
|
|
57
|
+
cornerDensity?: number;
|
|
58
|
+
variation?: number;
|
|
59
|
+
};
|
|
60
|
+
validation?: {
|
|
61
|
+
minClearanceMultiplier?: number;
|
|
62
|
+
minShapeVariation?: number;
|
|
63
|
+
minNonAdjacentArcMeters?: number;
|
|
64
|
+
maxLocalTurnRadians?: number;
|
|
65
|
+
maxSampleHeadingDeltaRadians?: number;
|
|
66
|
+
};
|
|
67
|
+
attempts?: {
|
|
68
|
+
primary?: number;
|
|
69
|
+
fallback?: number;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export type PaddockStabilityState = 'stable' | 'understeer' | 'oversteer' | 'spin-risk' | 'destroyed';
|
|
6
74
|
export type PaddockPitIntent = 0 | 1 | 2;
|
|
7
75
|
export type PaddockPitIntentRequest = PaddockPitIntent | {
|
|
8
76
|
intent?: PaddockPitIntent;
|
|
@@ -23,6 +91,13 @@ export type CameraControlsMode = 'embedded' | 'external' | false;
|
|
|
23
91
|
export type PaddockPresetName = 'dashboard' | 'timing-overlay' | 'compact-race' | 'full-dashboard';
|
|
24
92
|
export type TelemetryModuleName = 'core' | 'sectors' | 'lapTimes' | 'sectorTimes';
|
|
25
93
|
export type SectorPerformanceStatus = 'overall-best' | 'personal-best' | 'slower';
|
|
94
|
+
export type PaddockParticipantInteractionProfile = EnvPaddockParticipantInteractionProfile;
|
|
95
|
+
export type PaddockParticipantInteraction = EnvPaddockParticipantInteraction;
|
|
96
|
+
export type PaddockParticipantInteractionOverride = EnvPaddockParticipantInteractionOverride;
|
|
97
|
+
export type PaddockParticipantInteractionsOptions = EnvPaddockParticipantInteractionsOptions;
|
|
98
|
+
export type PaddockReplayGhostTrajectorySample = EnvPaddockReplayGhostTrajectorySample;
|
|
99
|
+
export type PaddockReplayGhostOptions = EnvPaddockReplayGhostOptions;
|
|
100
|
+
export type PaddockReplayGhostSnapshot = EnvPaddockReplayGhostSnapshot;
|
|
26
101
|
|
|
27
102
|
export interface CustomField {
|
|
28
103
|
label: string;
|
|
@@ -208,6 +283,10 @@ export interface F1SimulatorUiOptions {
|
|
|
208
283
|
timingTowerVerticalFit?: TimingTowerVerticalFit;
|
|
209
284
|
}
|
|
210
285
|
|
|
286
|
+
export interface F1SimulatorDebugOptions {
|
|
287
|
+
physicsModeIndicator?: boolean;
|
|
288
|
+
}
|
|
289
|
+
|
|
211
290
|
export interface TrackTextureAssets {
|
|
212
291
|
asphalt?: string;
|
|
213
292
|
}
|
|
@@ -437,6 +516,16 @@ export interface PaddockTireStrategyRules {
|
|
|
437
516
|
mandatoryDistinctDryCompounds?: number | null;
|
|
438
517
|
}
|
|
439
518
|
|
|
519
|
+
export interface PaddockTireDegradationRules {
|
|
520
|
+
enabled?: boolean;
|
|
521
|
+
}
|
|
522
|
+
|
|
523
|
+
export interface PaddockStalledDnfRules {
|
|
524
|
+
enabled?: boolean;
|
|
525
|
+
maxStoppedSeconds?: number;
|
|
526
|
+
speedThresholdKph?: number;
|
|
527
|
+
}
|
|
528
|
+
|
|
440
529
|
export interface PaddockPenaltySubsectionRules {
|
|
441
530
|
strictness?: number;
|
|
442
531
|
timePenaltySeconds?: number;
|
|
@@ -484,6 +573,8 @@ export interface PaddockPenaltyRules {
|
|
|
484
573
|
export interface PaddockRaceModules {
|
|
485
574
|
pitStops?: PaddockPitStopRules;
|
|
486
575
|
tireStrategy?: PaddockTireStrategyRules;
|
|
576
|
+
tireDegradation?: PaddockTireDegradationRules;
|
|
577
|
+
stalledDnf?: PaddockStalledDnfRules;
|
|
487
578
|
penalties?: PaddockPenaltyRules;
|
|
488
579
|
weather?: { enabled?: boolean };
|
|
489
580
|
reliability?: { enabled?: boolean };
|
|
@@ -549,19 +640,28 @@ export interface WheelSurfaceSnapshot {
|
|
|
549
640
|
|
|
550
641
|
export interface CarSnapshot {
|
|
551
642
|
id: string;
|
|
552
|
-
rank: number;
|
|
643
|
+
rank: number | null;
|
|
553
644
|
code: string;
|
|
554
645
|
timingCode: string;
|
|
555
646
|
name: string;
|
|
556
647
|
color: string;
|
|
557
648
|
tire: TireCompound;
|
|
649
|
+
interaction?: PaddockParticipantInteraction;
|
|
558
650
|
lap: number;
|
|
559
651
|
speedKph: number;
|
|
560
652
|
finishRank?: number | null;
|
|
561
|
-
status?: 'racing' | 'waved-flag' | string;
|
|
562
|
-
raceStatus?: 'racing' | 'waved-flag' | string;
|
|
653
|
+
status?: 'racing' | 'waved-flag' | 'destroyed' | string;
|
|
654
|
+
raceStatus?: 'racing' | 'waved-flag' | 'destroyed' | string;
|
|
563
655
|
wavedFlag?: boolean;
|
|
564
656
|
finished?: boolean;
|
|
657
|
+
destroyed?: boolean;
|
|
658
|
+
destroyReason?: string | null;
|
|
659
|
+
destroyedAt?: number | null;
|
|
660
|
+
dnf?: boolean;
|
|
661
|
+
dnfReason?: string | null;
|
|
662
|
+
dnfAt?: number | null;
|
|
663
|
+
dnfOrder?: number | null;
|
|
664
|
+
outOfRace?: boolean;
|
|
565
665
|
finishTime?: number | null;
|
|
566
666
|
penaltySeconds?: number;
|
|
567
667
|
adjustedFinishTime?: number | null;
|
|
@@ -573,6 +673,12 @@ export interface CarSnapshot {
|
|
|
573
673
|
leaderGapLaps?: number;
|
|
574
674
|
lapTelemetry?: LapTelemetrySnapshot;
|
|
575
675
|
surface?: string;
|
|
676
|
+
lateralG?: number;
|
|
677
|
+
longitudinalG?: number;
|
|
678
|
+
gripUsage?: number;
|
|
679
|
+
slipAngleRadians?: number;
|
|
680
|
+
tractionLimited?: boolean;
|
|
681
|
+
stabilityState?: PaddockStabilityState;
|
|
576
682
|
signedOffset?: number;
|
|
577
683
|
crossTrackError?: number;
|
|
578
684
|
inPitLane?: boolean;
|
|
@@ -593,6 +699,10 @@ export interface RaceClassificationEntry {
|
|
|
593
699
|
lap: number;
|
|
594
700
|
finished: boolean;
|
|
595
701
|
finishTime?: number | null;
|
|
702
|
+
dnf?: boolean;
|
|
703
|
+
dnfReason?: string | null;
|
|
704
|
+
dnfAt?: number | null;
|
|
705
|
+
dnfOrder?: number | null;
|
|
596
706
|
penaltySeconds?: number;
|
|
597
707
|
adjustedFinishTime?: number | null;
|
|
598
708
|
gapLaps?: number;
|
|
@@ -604,6 +714,7 @@ export interface RaceClassificationEntry {
|
|
|
604
714
|
|
|
605
715
|
export interface RaceSnapshot {
|
|
606
716
|
time: number;
|
|
717
|
+
physicsMode: PaddockPhysicsMode;
|
|
607
718
|
world: {
|
|
608
719
|
width: number;
|
|
609
720
|
height: number;
|
|
@@ -646,6 +757,7 @@ export interface RaceSnapshot {
|
|
|
646
757
|
events: RaceEvent[];
|
|
647
758
|
penalties: PaddockPenaltyEntry[];
|
|
648
759
|
cars: CarSnapshot[];
|
|
760
|
+
replayGhosts: PaddockReplayGhostSnapshot[];
|
|
649
761
|
}
|
|
650
762
|
|
|
651
763
|
export interface LifecycleErrorContext {
|
|
@@ -679,6 +791,8 @@ export interface F1SimulatorExpertOptions {
|
|
|
679
791
|
frameSkip?: number;
|
|
680
792
|
visualizeSensors?: boolean | {
|
|
681
793
|
rays?: boolean;
|
|
794
|
+
drivers?: 'selected' | 'all' | string[];
|
|
795
|
+
selectedDriverId?: string;
|
|
682
796
|
};
|
|
683
797
|
}
|
|
684
798
|
|
|
@@ -691,13 +805,51 @@ export interface F1SimulatorExpertAction {
|
|
|
691
805
|
pitTargetCompound?: TireCompound | string;
|
|
692
806
|
}
|
|
693
807
|
|
|
808
|
+
export interface PaddockExternalRenderFrame {
|
|
809
|
+
snapshot: RaceSnapshot;
|
|
810
|
+
observation: Record<string, unknown>;
|
|
811
|
+
meta?: Record<string, unknown> | null;
|
|
812
|
+
}
|
|
813
|
+
|
|
814
|
+
export interface PaddockExternalRendererSource {
|
|
815
|
+
subscribe(onFrame: (frame: PaddockExternalRenderFrame) => void): () => void;
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
export interface PaddockExternalRendererState {
|
|
819
|
+
attached: boolean;
|
|
820
|
+
lastMeta: Record<string, unknown> | null;
|
|
821
|
+
lastFrameAt: number | null;
|
|
822
|
+
lastError: string | null;
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
export interface PaddockScenarioPlacement {
|
|
826
|
+
distanceMeters?: number;
|
|
827
|
+
startDistanceMeters?: number;
|
|
828
|
+
offsetMeters?: number;
|
|
829
|
+
speedKph?: number;
|
|
830
|
+
headingErrorRadians?: number;
|
|
831
|
+
}
|
|
832
|
+
|
|
833
|
+
export interface PaddockEnvironmentResultOptions {
|
|
834
|
+
stateOutput?: 'full' | 'minimal' | 'none';
|
|
835
|
+
observationScope?: 'all' | 'reset';
|
|
836
|
+
resetDriversObservationScope?: 'all' | 'reset';
|
|
837
|
+
}
|
|
838
|
+
|
|
694
839
|
export interface F1SimulatorExpertApi {
|
|
695
840
|
reset(options?: unknown): unknown;
|
|
696
841
|
step(actions: Record<string, F1SimulatorExpertAction>): unknown;
|
|
842
|
+
resetDrivers?(
|
|
843
|
+
placements: Record<string, PaddockScenarioPlacement>,
|
|
844
|
+
resultOptions?: PaddockEnvironmentResultOptions
|
|
845
|
+
): unknown;
|
|
697
846
|
getObservation(): unknown;
|
|
698
847
|
getState(): unknown;
|
|
699
848
|
getActionSpec(): PaddockActionSpec;
|
|
700
849
|
getObservationSpec(): PaddockObservationSpec;
|
|
850
|
+
attachExternalRenderer(source: PaddockExternalRendererSource): void;
|
|
851
|
+
detachExternalRenderer(): void;
|
|
852
|
+
getExternalRendererState(): PaddockExternalRendererState;
|
|
701
853
|
destroy(): void;
|
|
702
854
|
}
|
|
703
855
|
|
|
@@ -707,8 +859,14 @@ export interface F1SimulatorOptions extends F1SimulatorCallbacks {
|
|
|
707
859
|
entries?: ChampionshipEntryBlueprint[];
|
|
708
860
|
seed?: number;
|
|
709
861
|
trackSeed?: number;
|
|
862
|
+
trackGeneration?: PaddockProceduralTrackOptions;
|
|
863
|
+
trackQueryIndex?: boolean;
|
|
864
|
+
warmup?: PaddockWarmupOptions | boolean;
|
|
710
865
|
totalLaps?: number;
|
|
866
|
+
physicsMode?: PaddockPhysicsMode;
|
|
711
867
|
rules?: PaddockRaceRules;
|
|
868
|
+
participantInteractions?: PaddockParticipantInteractionsOptions;
|
|
869
|
+
replayGhosts?: PaddockReplayGhostOptions[];
|
|
712
870
|
initialCameraMode?: CameraMode;
|
|
713
871
|
theme?: F1SimulatorTheme;
|
|
714
872
|
title?: string;
|
|
@@ -717,6 +875,7 @@ export interface F1SimulatorOptions extends F1SimulatorCallbacks {
|
|
|
717
875
|
backLinkLabel?: string;
|
|
718
876
|
showBackLink?: boolean;
|
|
719
877
|
ui?: F1SimulatorUiOptions;
|
|
878
|
+
debug?: F1SimulatorDebugOptions;
|
|
720
879
|
assets?: F1SimulatorAssets;
|
|
721
880
|
expert?: F1SimulatorExpertOptions;
|
|
722
881
|
}
|
|
@@ -754,6 +913,7 @@ export interface F1MountedSimulator {
|
|
|
754
913
|
setPitIntent(driverId: string, intent: PaddockPitIntentRequest, targetCompound?: TireCompound | string): boolean;
|
|
755
914
|
getPitIntent(driverId: string): PaddockPitIntent;
|
|
756
915
|
getPitTargetCompound(driverId: string): TireCompound | string | null;
|
|
916
|
+
getSimulationSpeed(): number;
|
|
757
917
|
servePenalty(penaltyId: string): PaddockPenaltyEntry | null;
|
|
758
918
|
cancelPenalty(penaltyId: string): PaddockPenaltyEntry | null;
|
|
759
919
|
getSnapshot(): RaceSnapshot | null;
|
|
@@ -790,6 +950,7 @@ export interface PaddockSimulatorController {
|
|
|
790
950
|
setPitIntent(driverId: string, intent: PaddockPitIntentRequest, targetCompound?: TireCompound | string): boolean;
|
|
791
951
|
getPitIntent(driverId: string): PaddockPitIntent;
|
|
792
952
|
getPitTargetCompound(driverId: string): TireCompound | string | null;
|
|
953
|
+
getSimulationSpeed(): number;
|
|
793
954
|
servePenalty(penaltyId: string): PaddockPenaltyEntry | null;
|
|
794
955
|
cancelPenalty(penaltyId: string): PaddockPenaltyEntry | null;
|
|
795
956
|
getSnapshot(): RaceSnapshot | null;
|
|
@@ -826,6 +987,8 @@ export function simSpeedToMetersPerSecond(simSpeed: number): number;
|
|
|
826
987
|
|
|
827
988
|
export function createPaddockSimulator(options: F1SimulatorOptions): PaddockSimulatorController;
|
|
828
989
|
export function mountF1Simulator(root: Element, options: F1SimulatorOptions): Promise<F1MountedSimulator>;
|
|
990
|
+
export function createProceduralTrack(seed?: number | string, options?: PaddockProceduralTrackOptions): unknown;
|
|
991
|
+
export function createPaddockDriverControllerLoop(options: PaddockDriverControllerLoopOptions): PaddockDriverControllerLoop;
|
|
829
992
|
|
|
830
993
|
export function mountRaceControls<T extends Element>(root: T, simulator: PaddockSimulatorController): T;
|
|
831
994
|
export function mountCameraControls<T extends Element>(root: T, simulator: PaddockSimulatorController): T;
|
package/src/index.js
CHANGED
|
@@ -30,7 +30,9 @@ export {
|
|
|
30
30
|
export { DEMO_PROJECT_DRIVERS } from './data/demoDrivers.js';
|
|
31
31
|
export { DEFAULT_F1_SIMULATOR_ASSETS } from './config/defaultAssets.js';
|
|
32
32
|
export { PADDOCK_SIMULATOR_PRESETS } from './config/defaultOptions.js';
|
|
33
|
+
export { createPaddockDriverControllerLoop } from './environment/controllerLoop.js';
|
|
33
34
|
export { normalizeSimulatorDrivers } from './data/normalizeDrivers.js';
|
|
35
|
+
export { createProceduralTrack } from './simulation/track/trackModel.js';
|
|
34
36
|
export {
|
|
35
37
|
REAL_F1_CAR_LENGTH_METERS,
|
|
36
38
|
SIM_UNITS_PER_METER,
|
|
@@ -134,6 +136,9 @@ export async function mountF1Simulator(root, options = {}) {
|
|
|
134
136
|
getPitTargetCompound(driverId) {
|
|
135
137
|
return app.getPitTargetCompound(driverId);
|
|
136
138
|
},
|
|
139
|
+
getSimulationSpeed() {
|
|
140
|
+
return app.simulationSpeed;
|
|
141
|
+
},
|
|
137
142
|
servePenalty(penaltyId) {
|
|
138
143
|
return app.servePenalty(penaltyId);
|
|
139
144
|
},
|