@inventure71/paddockjs 0.2.0 → 1.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.
Files changed (63) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/INSTALL_AND_UPDATE.md +165 -0
  3. package/README.md +217 -20
  4. package/docs/architecture.md +84 -15
  5. package/docs/concepts.md +20 -3
  6. package/docs/data_contract.md +412 -20
  7. package/docs/data_model.md +2 -1
  8. package/docs/index.md +1 -0
  9. package/docs/learnings.md +1 -1
  10. package/docs/rules.md +140 -19
  11. package/docs/system_specs.md +74 -20
  12. package/docs/training.md +206 -0
  13. package/examples/train-basic-policy.mjs +276 -0
  14. package/examples/trainingData.mjs +133 -0
  15. package/package.json +18 -8
  16. package/src/api/PaddockSimulatorController.js +39 -4
  17. package/src/app/BrowserExpertAdapter.js +32 -0
  18. package/src/app/F1SimulatorApp.js +1251 -146
  19. package/src/app/domBindings.js +10 -2
  20. package/src/config/defaultOptions.js +11 -3
  21. package/src/data/championship.js +13 -0
  22. package/src/data/normalizeDrivers.js +7 -2
  23. package/src/environment/actions.js +68 -0
  24. package/src/environment/episode.js +17 -0
  25. package/src/environment/evaluation.js +184 -0
  26. package/src/environment/events.js +17 -0
  27. package/src/environment/index.d.ts +521 -0
  28. package/src/environment/index.js +15 -0
  29. package/src/environment/observationOptions.js +12 -0
  30. package/src/environment/observations.js +284 -0
  31. package/src/environment/options.js +157 -0
  32. package/src/environment/recorder.js +28 -0
  33. package/src/environment/rewards.js +69 -0
  34. package/src/environment/runtime.js +175 -0
  35. package/src/environment/scenarios.js +220 -0
  36. package/src/environment/sensors.js +367 -0
  37. package/src/environment/specs.js +163 -0
  38. package/src/environment/workerProtocol.js +52 -0
  39. package/src/index.d.ts +405 -6
  40. package/src/index.js +27 -2
  41. package/src/rendering/proceduralTrackAsset.js +343 -24
  42. package/src/simulation/collisionGeometry.js +214 -0
  43. package/src/simulation/driverController.js +431 -65
  44. package/src/simulation/raceSimulation.js +2140 -171
  45. package/src/simulation/rules/collisionSteward.js +69 -0
  46. package/src/simulation/rules/penaltyLedger.js +153 -0
  47. package/src/simulation/rules/pitLaneSpeedingSteward.js +71 -0
  48. package/src/simulation/rules/tireRequirementSteward.js +29 -0
  49. package/src/simulation/rules/trackLimitsSteward.js +85 -0
  50. package/src/simulation/rulesConfig.js +352 -0
  51. package/src/simulation/trackModel.js +1154 -76
  52. package/src/simulation/units.js +6 -4
  53. package/src/simulation/vehicleGeometry.js +247 -0
  54. package/src/simulation/vehiclePhysics.js +82 -50
  55. package/src/simulation/wheelSurface.js +338 -0
  56. package/src/styles.css +369 -67
  57. package/src/ui/bannerTemplates.js +69 -0
  58. package/src/ui/componentTemplates.js +45 -81
  59. package/src/ui/raceControlStatusBanner.js +39 -0
  60. package/src/ui/shellTemplate.js +1 -1
  61. package/src/ui/templateUtils.js +23 -0
  62. package/AGENTS.md +0 -86
  63. package/src/standalone.js +0 -15
@@ -1,16 +1,18 @@
1
1
  import { F1SimulatorApp } from '../app/F1SimulatorApp.js';
2
+ import {
3
+ createRaceDataPanelMarkup,
4
+ createTelemetrySectorBannerMarkup,
5
+ } from '../ui/bannerTemplates.js';
2
6
  import {
3
7
  createCarDriverOverviewMarkup,
4
8
  createCameraControlsMarkup,
5
9
  createRaceCanvasMarkup,
6
10
  createRaceControlsMarkup,
7
- createRaceDataPanelMarkup,
8
11
  createRaceTelemetryDrawerMarkup,
9
12
  createSafetyCarControlMarkup,
10
13
  createTelemetryCoreMarkup,
11
14
  createTelemetryLapTimesMarkup,
12
15
  createTelemetryPanelMarkup,
13
- createTelemetrySectorBannerMarkup,
14
16
  createTelemetrySectorTimesMarkup,
15
17
  createTelemetrySectorsMarkup,
16
18
  createTimingTowerMarkup,
@@ -187,6 +189,10 @@ export class PaddockSimulatorController {
187
189
  return this;
188
190
  }
189
191
 
192
+ get expert() {
193
+ return this.app?.expert ?? null;
194
+ }
195
+
190
196
  destroy() {
191
197
  this.app?.destroy();
192
198
  this.app = null;
@@ -197,9 +203,10 @@ export class PaddockSimulatorController {
197
203
  }
198
204
 
199
205
  restart(nextOptions = {}) {
200
- this.options = resolveF1SimulatorOptions(mergeResolvedOptions(this.options, nextOptions));
206
+ const nextResolvedOptions = resolveF1SimulatorOptions(mergeResolvedOptions(this.options, nextOptions));
207
+ this.app?.restart(nextResolvedOptions);
208
+ this.options = nextResolvedOptions;
201
209
  this.compositeRoot.applyCssVariables();
202
- this.app?.restart(this.options);
203
210
  }
204
211
 
205
212
  selectDriver(driverId) {
@@ -210,6 +217,14 @@ export class PaddockSimulatorController {
210
217
  this.app?.setSafetyCarDeployed(deployed);
211
218
  }
212
219
 
220
+ setRedFlagDeployed(deployed) {
221
+ this.app?.setRedFlagDeployed?.(deployed);
222
+ }
223
+
224
+ setPitLaneOpen(open) {
225
+ this.app?.setPitLaneOpen?.(open);
226
+ }
227
+
213
228
  callSafetyCar() {
214
229
  this.setSafetyCarDeployed(true);
215
230
  }
@@ -223,6 +238,26 @@ export class PaddockSimulatorController {
223
238
  this.setSafetyCarDeployed(!active);
224
239
  }
225
240
 
241
+ setPitIntent(driverId, intent, targetCompound) {
242
+ return this.app?.setPitIntent(driverId, intent, targetCompound) ?? false;
243
+ }
244
+
245
+ getPitIntent(driverId) {
246
+ return this.app?.getPitIntent(driverId) ?? 0;
247
+ }
248
+
249
+ getPitTargetCompound(driverId) {
250
+ return this.app?.getPitTargetCompound?.(driverId) ?? null;
251
+ }
252
+
253
+ servePenalty(penaltyId) {
254
+ return this.app?.servePenalty(penaltyId) ?? null;
255
+ }
256
+
257
+ cancelPenalty(penaltyId) {
258
+ return this.app?.cancelPenalty(penaltyId) ?? null;
259
+ }
260
+
226
261
  getSnapshot() {
227
262
  return this.app?.getSnapshot() ?? null;
228
263
  }
@@ -0,0 +1,32 @@
1
+ import { createEnvironmentRuntime } from '../environment/runtime.js';
2
+ import { resolveEnvironmentOptions } from '../environment/options.js';
3
+
4
+ export function createBrowserExpertAdapter(app, expertOptions = {}) {
5
+ let resolvedOptions = resolveEnvironmentOptions({
6
+ ...app.options,
7
+ ...expertOptions,
8
+ controlledDrivers: expertOptions.controlledDrivers,
9
+ });
10
+
11
+ return createEnvironmentRuntime({
12
+ getSimulation: () => app.sim,
13
+ setSimulation(nextSim) {
14
+ app.sim = nextSim;
15
+ },
16
+ createSimulation(nextOptions) {
17
+ app.applyExpertOptions(nextOptions);
18
+ return app.createRaceSimulation(nextOptions);
19
+ },
20
+ getOptions: () => resolvedOptions,
21
+ setOptions(nextOptions) {
22
+ resolvedOptions = nextOptions;
23
+ },
24
+ afterReset(result) {
25
+ app.renderTrack();
26
+ app.renderExpertFrame(result.state.snapshot, { observation: result.observation });
27
+ },
28
+ afterStep(result) {
29
+ app.renderExpertFrame(result.state.snapshot, { observation: result.observation });
30
+ },
31
+ });
32
+ }