@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.
- package/CHANGELOG.md +45 -0
- package/INSTALL_AND_UPDATE.md +165 -0
- package/README.md +217 -20
- package/docs/architecture.md +84 -15
- package/docs/concepts.md +20 -3
- package/docs/data_contract.md +412 -20
- package/docs/data_model.md +2 -1
- package/docs/index.md +1 -0
- package/docs/learnings.md +1 -1
- package/docs/rules.md +140 -19
- package/docs/system_specs.md +74 -20
- package/docs/training.md +206 -0
- package/examples/train-basic-policy.mjs +276 -0
- package/examples/trainingData.mjs +133 -0
- package/package.json +18 -8
- package/src/api/PaddockSimulatorController.js +39 -4
- package/src/app/BrowserExpertAdapter.js +32 -0
- package/src/app/F1SimulatorApp.js +1251 -146
- package/src/app/domBindings.js +10 -2
- package/src/config/defaultOptions.js +11 -3
- package/src/data/championship.js +13 -0
- package/src/data/normalizeDrivers.js +7 -2
- package/src/environment/actions.js +68 -0
- package/src/environment/episode.js +17 -0
- package/src/environment/evaluation.js +184 -0
- package/src/environment/events.js +17 -0
- package/src/environment/index.d.ts +521 -0
- package/src/environment/index.js +15 -0
- package/src/environment/observationOptions.js +12 -0
- package/src/environment/observations.js +284 -0
- package/src/environment/options.js +157 -0
- package/src/environment/recorder.js +28 -0
- package/src/environment/rewards.js +69 -0
- package/src/environment/runtime.js +175 -0
- package/src/environment/scenarios.js +220 -0
- package/src/environment/sensors.js +367 -0
- package/src/environment/specs.js +163 -0
- package/src/environment/workerProtocol.js +52 -0
- package/src/index.d.ts +405 -6
- package/src/index.js +27 -2
- package/src/rendering/proceduralTrackAsset.js +343 -24
- package/src/simulation/collisionGeometry.js +214 -0
- package/src/simulation/driverController.js +431 -65
- package/src/simulation/raceSimulation.js +2140 -171
- package/src/simulation/rules/collisionSteward.js +69 -0
- package/src/simulation/rules/penaltyLedger.js +153 -0
- package/src/simulation/rules/pitLaneSpeedingSteward.js +71 -0
- package/src/simulation/rules/tireRequirementSteward.js +29 -0
- package/src/simulation/rules/trackLimitsSteward.js +85 -0
- package/src/simulation/rulesConfig.js +352 -0
- package/src/simulation/trackModel.js +1154 -76
- package/src/simulation/units.js +6 -4
- package/src/simulation/vehicleGeometry.js +247 -0
- package/src/simulation/vehiclePhysics.js +82 -50
- package/src/simulation/wheelSurface.js +338 -0
- package/src/styles.css +369 -67
- package/src/ui/bannerTemplates.js +69 -0
- package/src/ui/componentTemplates.js +45 -81
- package/src/ui/raceControlStatusBanner.js +39 -0
- package/src/ui/shellTemplate.js +1 -1
- package/src/ui/templateUtils.js +23 -0
- package/AGENTS.md +0 -86
- 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
|
-
|
|
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
|
+
}
|