@reicek/neataptic-ts 0.1.21 → 0.1.23
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/.github/agents/boundary-mapper.agent.md +31 -0
- package/.github/agents/docs-scout.agent.md +29 -0
- package/.github/agents/plan-scout.agent.md +31 -0
- package/.github/agents/solid-split.agent.md +143 -0
- package/.github/copilot-instructions.md +119 -0
- package/.github/skills/solid-split-playbook/SKILL.md +220 -0
- package/.github/skills/solid-split-playbook/assets/docs-checklist.md +34 -0
- package/.github/skills/solid-split-playbook/assets/split-plan-template.md +48 -0
- package/.github/skills/solid-split-playbook/assets/split-workflow-checklist.md +51 -0
- package/.github/skills/trace-analyzer-extension/SKILL.md +63 -0
- package/.github/skills/trace-analyzer-extension/assets/extension-checklist.md +24 -0
- package/.github/skills/trace-analyzer-extension/references/analyzer-extension-workflow.md +101 -0
- package/.github/skills/trace-audit-reporting/SKILL.md +96 -0
- package/.github/skills/trace-audit-reporting/assets/performance-report-template.md +123 -0
- package/.github/skills/trace-audit-reporting/references/trace-analysis-workflow.md +132 -0
- package/package.json +7 -3
- package/plans/ES2023 migration +13 -8
- package/plans/Evolution_Training_Interoperability_Contracts.md +1 -1
- package/plans/Flappy_Bird_Folder_Documentation_Pass.md +53 -0
- package/plans/Flappy_Evolution_Worker_Documentation_Pass.md +58 -0
- package/plans/Interactive_Examples_and_Learning_Path.md +10 -2
- package/plans/Memory_Optimization.md +3 -3
- package/plans/README.md +63 -0
- package/plans/Roadmap.md +15 -3
- package/plans/asciiMaze_SOLID_split.done.md +130 -0
- package/plans/flappy_bird_SOLID_split.done.md +67 -0
- package/scripts/analyze-trace.ts +590 -0
- package/scripts/assets/theme.css +221 -34
- package/scripts/copy-examples.mjs +9 -5
- package/scripts/export-onnx.mjs +3 -3
- package/scripts/generate-bench-tables.mjs +10 -10
- package/scripts/generate-bench-tables.ts +10 -10
- package/scripts/generate-docs.ts +1415 -449
- package/scripts/render-docs-html.ts +15 -8
- package/src/README.md +127 -222
- package/src/architecture/README.md +117 -184
- package/src/architecture/architect.ts +6 -0
- package/src/architecture/layer/README.md +38 -38
- package/src/architecture/network/README.md +49 -31
- package/src/architecture/network/activate/README.md +77 -77
- package/src/architecture/network/connect/README.md +15 -13
- package/src/architecture/network/deterministic/README.md +7 -7
- package/src/architecture/network/evolve/README.md +44 -44
- package/src/architecture/network/gating/README.md +20 -20
- package/src/architecture/network/genetic/README.md +51 -51
- package/src/architecture/network/mutate/README.md +97 -97
- package/src/architecture/network/network.types.ts +39 -0
- package/src/architecture/network/onnx/README.md +264 -264
- package/src/architecture/network/prune/README.md +39 -39
- package/src/architecture/network/remove/README.md +26 -26
- package/src/architecture/network/serialize/README.md +56 -56
- package/src/architecture/network/serialize/network.serialize.json.utils.ts +1 -0
- package/src/architecture/network/serialize/network.serialize.utils.ts +6 -1
- package/src/architecture/network/serialize/network.serialize.utils.types.ts +1 -1
- package/src/architecture/network/slab/README.md +61 -61
- package/src/architecture/network/standalone/README.md +24 -24
- package/src/architecture/network/stats/README.md +9 -9
- package/src/architecture/network/topology/README.md +46 -46
- package/src/architecture/network/training/README.md +21 -21
- package/src/architecture/network.ts +114 -10
- package/src/methods/README.md +9 -87
- package/src/multithreading/README.md +8 -77
- package/src/multithreading/workers/README.md +2 -2
- package/src/multithreading/workers/browser/README.md +0 -6
- package/src/multithreading/workers/node/README.md +0 -3
- package/src/neat/README.md +623 -568
- package/src/neat/neat.evolve.population.utils.ts +29 -5
- package/src/neat/neat.helpers.ts +16 -0
- package/src/neat/neat.topology-intent.utils.ts +160 -0
- package/src/utils/README.md +18 -18
- package/test/examples/asciiMaze/README.md +59 -59
- package/test/examples/asciiMaze/asciiMaze.e2e.test.ts +14 -9
- package/test/examples/asciiMaze/browser-entry/README.md +196 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.abort.services.ts +95 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.constants.ts +23 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.curriculum.services.ts +115 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.globals.services.ts +106 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.host.services.ts +157 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.services.ts +14 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.ts +129 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.types.ts +120 -0
- package/test/examples/asciiMaze/browser-entry/browser-entry.utils.ts +98 -0
- package/test/examples/asciiMaze/browser-entry.ts +10 -576
- package/test/examples/asciiMaze/dashboardManager/README.md +276 -0
- package/test/examples/asciiMaze/dashboardManager/archive/README.md +16 -0
- package/test/examples/asciiMaze/dashboardManager/archive/dashboardManager.archive.services.ts +267 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.constants.ts +35 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.services.ts +103 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.ts +181 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.types.ts +267 -0
- package/test/examples/asciiMaze/dashboardManager/dashboardManager.utils.ts +254 -0
- package/test/examples/asciiMaze/dashboardManager/live/README.md +14 -0
- package/test/examples/asciiMaze/dashboardManager/live/dashboardManager.live.services.ts +264 -0
- package/test/examples/asciiMaze/dashboardManager/telemetry/README.md +47 -0
- package/test/examples/asciiMaze/dashboardManager/telemetry/dashboardManager.telemetry.services.ts +513 -0
- package/test/examples/asciiMaze/dashboardManager.ts +13 -2335
- package/test/examples/asciiMaze/evolutionEngine/README.md +1058 -0
- package/test/examples/asciiMaze/evolutionEngine/curriculumPhase.ts +90 -0
- package/test/examples/asciiMaze/evolutionEngine/engineState.constants.ts +36 -0
- package/test/examples/asciiMaze/evolutionEngine/engineState.ts +58 -513
- package/test/examples/asciiMaze/evolutionEngine/engineState.types.ts +212 -0
- package/test/examples/asciiMaze/evolutionEngine/engineState.utils.ts +301 -0
- package/test/examples/asciiMaze/evolutionEngine/evolutionEngine.types.ts +445 -0
- package/test/examples/asciiMaze/evolutionEngine/evolutionLoop.ts +81 -50
- package/test/examples/asciiMaze/evolutionEngine/optionsAndSetup.ts +2 -4
- package/test/examples/asciiMaze/evolutionEngine/populationDynamics.ts +17 -33
- package/test/examples/asciiMaze/evolutionEngine/populationPruning.ts +1 -1
- package/test/examples/asciiMaze/evolutionEngine/rngAndTiming.ts +1 -2
- package/test/examples/asciiMaze/evolutionEngine/sampling.ts +1 -1
- package/test/examples/asciiMaze/evolutionEngine/scratchPools.ts +2 -5
- package/test/examples/asciiMaze/evolutionEngine/setupHelpers.ts +30 -37
- package/test/examples/asciiMaze/evolutionEngine/telemetryMetrics.ts +16 -58
- package/test/examples/asciiMaze/evolutionEngine/trainingWarmStart.ts +2 -2
- package/test/examples/asciiMaze/evolutionEngine.ts +55 -55
- package/test/examples/asciiMaze/fitness.ts +2 -2
- package/test/examples/asciiMaze/fitness.types.ts +65 -0
- package/test/examples/asciiMaze/interfaces.ts +64 -1352
- package/test/examples/asciiMaze/mazeMovement/README.md +356 -0
- package/test/examples/asciiMaze/mazeMovement/finalization/README.md +49 -0
- package/test/examples/asciiMaze/mazeMovement/finalization/mazeMovement.finalization.ts +138 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.constants.ts +101 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.services.ts +230 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.ts +299 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.types.ts +185 -0
- package/test/examples/asciiMaze/mazeMovement/mazeMovement.utils.ts +153 -0
- package/test/examples/asciiMaze/mazeMovement/policy/README.md +91 -0
- package/test/examples/asciiMaze/mazeMovement/policy/mazeMovement.policy.ts +467 -0
- package/test/examples/asciiMaze/mazeMovement/runtime/README.md +95 -0
- package/test/examples/asciiMaze/mazeMovement/runtime/mazeMovement.runtime.ts +354 -0
- package/test/examples/asciiMaze/mazeMovement/shaping/README.md +124 -0
- package/test/examples/asciiMaze/mazeMovement/shaping/mazeMovement.shaping.ts +459 -0
- package/test/examples/asciiMaze/mazeMovement.ts +12 -2978
- package/test/examples/flappy_bird/README.md +193 -88
- package/test/examples/flappy_bird/browser-entry/README.md +1441 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.host.utils.ts +4 -324
- package/test/examples/flappy_bird/browser-entry/browser-entry.network-view.utils.ts +9 -396
- package/test/examples/flappy_bird/browser-entry/browser-entry.playback.utils.ts +6 -714
- package/test/examples/flappy_bird/browser-entry/browser-entry.render.types.ts +26 -3
- package/test/examples/flappy_bird/browser-entry/browser-entry.runtime.types.ts +16 -1
- package/test/examples/flappy_bird/browser-entry/browser-entry.simulation.types.ts +39 -5
- package/test/examples/flappy_bird/browser-entry/browser-entry.spawn.utils.ts +11 -31
- package/test/examples/flappy_bird/browser-entry/browser-entry.stats.types.ts +32 -4
- package/test/examples/flappy_bird/browser-entry/browser-entry.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.types.ts +8 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.types.ts +50 -7
- package/test/examples/flappy_bird/browser-entry/browser-entry.visualization.utils.ts +21 -893
- package/test/examples/flappy_bird/browser-entry/browser-entry.worker.types.ts +91 -10
- package/test/examples/flappy_bird/browser-entry/host/README.md +318 -0
- package/test/examples/flappy_bird/browser-entry/host/host.canvas.service.ts +16 -0
- package/test/examples/flappy_bird/browser-entry/host/host.constants.ts +20 -0
- package/test/examples/flappy_bird/browser-entry/host/host.dom.service.ts +10 -0
- package/test/examples/flappy_bird/browser-entry/host/host.resize.service.ts +1 -295
- package/test/examples/flappy_bird/browser-entry/host/host.stats.service.ts +14 -0
- package/test/examples/flappy_bird/browser-entry/host/host.ts +592 -6
- package/test/examples/flappy_bird/browser-entry/host/host.types.ts +13 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/README.md +309 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.constants.ts +47 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.services.ts +392 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.ts +132 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.types.ts +92 -0
- package/test/examples/flappy_bird/browser-entry/host/resize/host.resize.service.utils.ts +272 -0
- package/test/examples/flappy_bird/browser-entry/network-view/README.md +389 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.draw.service.ts +13 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.labels.utils.ts +12 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.layout.utils.ts +14 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.topology.utils.ts +267 -0
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.ts +823 -7
- package/test/examples/flappy_bird/browser-entry/network-view/network-view.types.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/playback/README.md +845 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/README.md +355 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/README.md +1068 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.batch.services.ts +64 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.cache.services.ts +207 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.constants.ts +197 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.batch.utils.ts +114 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.layout.utils.test.ts +96 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.layout.utils.ts +204 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.services.ts +49 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.geometry.utils.ts +313 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.layer.services.ts +81 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.test.ts +33 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.math.utils.ts +201 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.selection.utils.ts +171 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.timing.utils.ts +124 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.test.ts +279 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.pulse.utils.ts +132 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.scene.services.ts +26 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.services.ts +65 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.ts +48 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.types.ts +342 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/ground-grid/playback.background.ground-grid.utils.ts +10 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.cache.services.ts +96 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.constants.ts +127 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.draw.services.ts +184 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.scene.services.ts +64 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.services.ts +6 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.ts +53 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.types.ts +105 -0
- package/test/examples/flappy_bird/browser-entry/playback/background/playback.background.utils.ts +100 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/README.md +541 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.bird.utils.ts +180 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.canvas.services.ts +77 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.entity.services.ts +167 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.scene.services.ts +57 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.test.ts +176 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.service.ts +113 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.services.ts +35 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.trail.utils.ts +248 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.types.ts +103 -0
- package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.utils.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.constants.ts +1 -1
- package/test/examples/flappy_bird/browser-entry/playback/playback.frame-render.service.ts +10 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.iteration.services.ts +192 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.loop.service.ts +12 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.orchestration.types.ts +78 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.render.pipe-outline.service.ts +128 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.render.service.ts +1 -116
- package/test/examples/flappy_bird/browser-entry/playback/playback.session.services.ts +184 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.test.ts +121 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.snapshot.utils.ts +8 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.layer.services.ts +36 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.service.ts +11 -128
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.services.ts +268 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.types.ts +91 -0
- package/test/examples/flappy_bird/browser-entry/playback/playback.starfield.utils.ts +11 -4
- package/test/examples/flappy_bird/browser-entry/playback/playback.trail.utils.ts +9 -86
- package/test/examples/flappy_bird/browser-entry/playback/playback.ts +75 -7
- package/test/examples/flappy_bird/browser-entry/playback/playback.types.ts +12 -9
- package/test/examples/flappy_bird/browser-entry/playback/playback.worker-channel.utils.ts +11 -123
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/README.md +55 -0
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.services.ts +103 -0
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.summary.utils.test.ts +45 -0
- package/test/examples/flappy_bird/browser-entry/playback/snapshot/playback.snapshot.summary.utils.ts +28 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/README.md +95 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.history.services.test.ts +35 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.history.services.ts +64 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.opacity.utils.test.ts +37 -0
- package/test/examples/flappy_bird/browser-entry/playback/trail/playback.trail.opacity.utils.ts +74 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/README.md +71 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.request.services.ts +45 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.summary.services.ts +74 -0
- package/test/examples/flappy_bird/browser-entry/playback/worker-channel/playback.worker-channel.types.ts +53 -0
- package/test/examples/flappy_bird/browser-entry/runtime/README.md +304 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.browser-globals.service.ts +15 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.errors.ts +17 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-launch.service.ts +56 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.evolution-loop.service.ts +19 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.lifecycle.service.ts +96 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.startup.service.ts +92 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.telemetry.service.ts +24 -0
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.ts +31 -121
- package/test/examples/flappy_bird/browser-entry/runtime/runtime.types.ts +65 -0
- package/test/examples/flappy_bird/browser-entry/visualization/README.md +568 -0
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.colors.utils.ts +26 -0
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.constants.ts +110 -0
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.draw.service.ts +979 -19
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.legend.utils.ts +157 -3
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.topology.utils.ts +13 -27
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.ts +7 -20
- package/test/examples/flappy_bird/browser-entry/visualization/visualization.types.ts +14 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/README.md +238 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.errors.ts +11 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.generation.service.ts +12 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.test.ts +143 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.playback.service.ts +140 -14
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.request.service.ts +27 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.ts +8 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.types.ts +23 -0
- package/test/examples/flappy_bird/browser-entry/worker-channel/worker-channel.url.service.ts +5 -0
- package/test/examples/flappy_bird/constants/README.md +1163 -0
- package/test/examples/flappy_bird/constants/constants.birds.ts +16 -38
- package/test/examples/flappy_bird/constants/constants.difficulty.ts +21 -0
- package/test/examples/flappy_bird/constants/constants.network-view.ts +24 -0
- package/test/examples/flappy_bird/constants/constants.network.ts +1 -1
- package/test/examples/flappy_bird/constants/constants.observation.ts +7 -0
- package/test/examples/flappy_bird/constants/constants.palette.ts +9 -2
- package/test/examples/flappy_bird/constants/constants.physics.ts +9 -0
- package/test/examples/flappy_bird/constants/constants.pipe-render.ts +3 -0
- package/test/examples/flappy_bird/constants/constants.pipes.ts +22 -3
- package/test/examples/flappy_bird/constants/constants.runtime.ts +28 -4
- package/test/examples/flappy_bird/constants/constants.starfield.ts +78 -3
- package/test/examples/flappy_bird/constants/constants.ts +6 -0
- package/test/examples/flappy_bird/environment/README.md +182 -0
- package/test/examples/flappy_bird/environment/environment.collision.utils.ts +7 -0
- package/test/examples/flappy_bird/environment/environment.constants.ts +16 -3
- package/test/examples/flappy_bird/environment/environment.observation.utils.ts +12 -19
- package/test/examples/flappy_bird/environment/environment.state.service.ts +10 -0
- package/test/examples/flappy_bird/environment/environment.step.service.ts +15 -66
- package/test/examples/flappy_bird/environment/environment.types.ts +14 -0
- package/test/examples/flappy_bird/evaluation/README.md +155 -0
- package/test/examples/flappy_bird/evaluation/evaluation.constants.ts +23 -4
- package/test/examples/flappy_bird/evaluation/evaluation.fitness.utils.ts +16 -1
- package/test/examples/flappy_bird/evaluation/evaluation.rollout.service.ts +7 -374
- package/test/examples/flappy_bird/evaluation/evaluation.seed.utils.ts +4 -0
- package/test/examples/flappy_bird/evaluation/evaluation.types.ts +18 -2
- package/test/examples/flappy_bird/evaluation/rollout/README.md +355 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.constants.ts +38 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.service.ts +71 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.services.ts +338 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.types.ts +69 -0
- package/test/examples/flappy_bird/evaluation/rollout/evaluation.rollout.utils.ts +399 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/README.md +845 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.constants.ts +49 -7
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.errors.ts +34 -3
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.evolution.service.ts +22 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.playback.service.ts +62 -26
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.protocol.service.ts +27 -1
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.runtime.service.ts +23 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.frame.service.ts +378 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.types.ts +22 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.simulation.utils.ts +20 -203
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.snapshot.utils.test.ts +94 -0
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.snapshot.utils.ts +78 -13
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.ts +235 -344
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.types.ts +170 -22
- package/test/examples/flappy_bird/flappy-evolution-worker/flappy-evolution-worker.warm-start.service.ts +314 -0
- package/test/examples/flappy_bird/flappy.simulation.shared.utils.ts +17 -0
- package/test/examples/flappy_bird/flappyEnvironment.ts +21 -0
- package/test/examples/flappy_bird/flappyEvaluation.ts +12 -0
- package/test/examples/flappy_bird/flappyEvolution.worker.ts +7 -0
- package/test/examples/flappy_bird/index.ts +8 -2
- package/test/examples/flappy_bird/rng.ts +10 -0
- package/test/examples/flappy_bird/simulation-shared/README.md +518 -0
- package/test/examples/flappy_bird/simulation-shared/observation/README.md +255 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.features.utils.ts +339 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.ts +19 -0
- package/test/examples/flappy_bird/simulation-shared/observation/observation.vector.utils.ts +81 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.constants.ts +3 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.control.utils.ts +6 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.difficulty.utils.ts +9 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.errors.ts +10 -1
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.memory.utils.ts +18 -0
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.observation.utils.ts +7 -402
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.spawn.utils.ts +36 -6
- package/test/examples/flappy_bird/{evaluation/evaluation.statistics.utils.ts → simulation-shared/simulation-shared.statistics.utils.ts} +30 -9
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.types.ts +38 -5
- package/test/examples/flappy_bird/trainFlappyBird.ts +13 -0
- package/test/examples/flappy_bird/trainer/README.md +676 -0
- package/test/examples/flappy_bird/trainer/evaluation/README.md +253 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.constants.ts +15 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.services.ts +86 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.ts +187 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.types.ts +32 -0
- package/test/examples/flappy_bird/trainer/evaluation/trainer.evaluation.service.utils.ts +182 -0
- package/test/examples/flappy_bird/trainer/trainer.evaluation.service.ts +13 -0
- package/test/examples/flappy_bird/trainer/trainer.fitness.service.ts +23 -1
- package/test/examples/flappy_bird/trainer/trainer.loop.service.ts +17 -1
- package/test/examples/flappy_bird/trainer/trainer.report.service.services.ts +181 -0
- package/test/examples/flappy_bird/trainer/trainer.report.service.ts +136 -0
- package/test/examples/flappy_bird/trainer/trainer.selection.utils.ts +89 -0
- package/test/examples/flappy_bird/trainer/trainer.setup.service.ts +22 -0
- package/test/examples/flappy_bird/trainer/trainer.signals.service.ts +8 -0
- package/test/examples/flappy_bird/trainer/trainer.ts +38 -553
- package/test/examples/flappy_bird/trainer/trainer.types.ts +44 -7
- package/test/neat/neat.topology-intent.test.ts +129 -0
- package/test/network/network.topology-intent.test.ts +44 -0
- package/test/examples/flappy_bird/browser-entry/browser-entry.utils.ts +0 -12
- package/test/examples/flappy_bird/environment/environment.ts +0 -7
- package/test/examples/flappy_bird/evaluation/evaluation.ts +0 -7
- package/test/examples/flappy_bird/simulation-shared/simulation-shared.ts +0 -15
- package/test/examples/flappy_bird/trainer/trainer.statistics.utils.ts +0 -78
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FLAPPY_BIRD_RADIUS_PX,
|
|
3
|
+
FLAPPY_BIRD_X_PX,
|
|
4
|
+
} from '../../../constants/constants';
|
|
5
|
+
import type {
|
|
6
|
+
PopulationRenderState,
|
|
7
|
+
TrailState,
|
|
8
|
+
} from '../../browser-entry.types';
|
|
9
|
+
import { resolveChampionBirdIndex } from '../playback.render.utils';
|
|
10
|
+
import { pushChampionTrailPoint } from '../playback.trail.utils';
|
|
11
|
+
import {
|
|
12
|
+
beginPlaybackFrameViewportTransform,
|
|
13
|
+
finalizePlaybackFrameCanvas,
|
|
14
|
+
preparePlaybackFrameCanvas,
|
|
15
|
+
renderPlaybackFrameBackground,
|
|
16
|
+
renderPlaybackFrameBirds,
|
|
17
|
+
renderPlaybackFramePipes,
|
|
18
|
+
renderPlaybackFrameTrails,
|
|
19
|
+
resolvePlaybackFrameSceneContext,
|
|
20
|
+
} from './playback.frame-render.services';
|
|
21
|
+
import {
|
|
22
|
+
drawTrail,
|
|
23
|
+
renderPlaybackBird,
|
|
24
|
+
resolvePlaybackTrailStyle,
|
|
25
|
+
} from './playback.frame-render.utils';
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* High-level frame-render orchestration for playback.
|
|
29
|
+
*
|
|
30
|
+
* This boundary coordinates one visual frame of the playback experience. It
|
|
31
|
+
* resolves the scene, prepares the canvas, paints the background and entities,
|
|
32
|
+
* and maintains the short champion trail used for motion emphasis.
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Draws one simulation frame for the current population state.
|
|
37
|
+
*
|
|
38
|
+
* The render order matters: background first, then pipes, then birds, then
|
|
39
|
+
* trails and overlays that should visually sit on top.
|
|
40
|
+
*
|
|
41
|
+
* @param context - Canvas 2D drawing context.
|
|
42
|
+
* @param renderState - Mutable simulation state snapshot.
|
|
43
|
+
* @param trailState - Leader trail render cache.
|
|
44
|
+
* @returns Nothing.
|
|
45
|
+
*/
|
|
46
|
+
export function renderPopulationFrame(
|
|
47
|
+
context: CanvasRenderingContext2D,
|
|
48
|
+
renderState: PopulationRenderState,
|
|
49
|
+
trailState: TrailState,
|
|
50
|
+
): void {
|
|
51
|
+
// Step 1: Resolve scene geometry and champion render state.
|
|
52
|
+
const sceneContext = resolvePlaybackFrameSceneContext(context, renderState);
|
|
53
|
+
|
|
54
|
+
// Step 2: Reset canvas state and enter the viewport transform.
|
|
55
|
+
preparePlaybackFrameCanvas(context);
|
|
56
|
+
beginPlaybackFrameViewportTransform(context, sceneContext);
|
|
57
|
+
|
|
58
|
+
// Step 3: Draw the split background, pipes, birds, and trails in order.
|
|
59
|
+
renderPlaybackFrameBackground(context, renderState, sceneContext);
|
|
60
|
+
renderPlaybackFramePipes(context, renderState, sceneContext);
|
|
61
|
+
renderPlaybackFrameBirds(
|
|
62
|
+
context,
|
|
63
|
+
renderState,
|
|
64
|
+
sceneContext,
|
|
65
|
+
renderPlaybackBird,
|
|
66
|
+
);
|
|
67
|
+
renderPlaybackFrameTrails(
|
|
68
|
+
context,
|
|
69
|
+
renderState,
|
|
70
|
+
trailState,
|
|
71
|
+
sceneContext,
|
|
72
|
+
resolvePlaybackTrailStyle,
|
|
73
|
+
drawTrail,
|
|
74
|
+
);
|
|
75
|
+
|
|
76
|
+
// Step 4: Restore the caller canvas state after viewport-space drawing.
|
|
77
|
+
finalizePlaybackFrameCanvas(context);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Updates the trail cache from the latest frame snapshot.
|
|
82
|
+
*
|
|
83
|
+
* The renderer intentionally keeps only a short champion trail instead of full
|
|
84
|
+
* history for every bird, which keeps the visual emphasis clear and the per-frame
|
|
85
|
+
* work small.
|
|
86
|
+
*
|
|
87
|
+
* @param trailState - Mutable trail state.
|
|
88
|
+
* @param renderState - Current render state.
|
|
89
|
+
* @returns Nothing.
|
|
90
|
+
*/
|
|
91
|
+
export function updateTrailState(
|
|
92
|
+
trailState: TrailState,
|
|
93
|
+
renderState: PopulationRenderState,
|
|
94
|
+
): void {
|
|
95
|
+
// Step 1: Resolve the current champion so only one short trail is retained.
|
|
96
|
+
const championBirdIndex = resolveChampionBirdIndex(renderState);
|
|
97
|
+
|
|
98
|
+
// Step 2: Reset all non-champion trails to avoid per-frame trail work.
|
|
99
|
+
renderState.birds.forEach((bird, birdIndex) => {
|
|
100
|
+
if (!trailState.birdTrailsY[birdIndex]) {
|
|
101
|
+
trailState.birdTrailsY[birdIndex] = [];
|
|
102
|
+
}
|
|
103
|
+
const birdTrail = trailState.birdTrailsY[birdIndex];
|
|
104
|
+
|
|
105
|
+
if (bird.done || birdIndex !== championBirdIndex) {
|
|
106
|
+
birdTrail.length = 0;
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// Step 3: Keep a short trail only for the current champion bird.
|
|
111
|
+
pushChampionTrailPoint(birdTrail, renderState.frameIndex, bird.yPx);
|
|
112
|
+
});
|
|
113
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type {
|
|
2
|
+
PopulationRenderState,
|
|
3
|
+
TrailState,
|
|
4
|
+
} from '../../browser-entry.types';
|
|
5
|
+
import {
|
|
6
|
+
beginPlaybackFrameViewportTransform,
|
|
7
|
+
finalizePlaybackFrameCanvas,
|
|
8
|
+
preparePlaybackFrameCanvas,
|
|
9
|
+
} from './playback.frame-render.canvas.services';
|
|
10
|
+
import {
|
|
11
|
+
renderPlaybackFrameBackground,
|
|
12
|
+
renderPlaybackFrameBirds,
|
|
13
|
+
renderPlaybackFramePipes,
|
|
14
|
+
renderPlaybackFrameTrails,
|
|
15
|
+
} from './playback.frame-render.entity.services';
|
|
16
|
+
import { resolvePlaybackFrameSceneContext } from './playback.frame-render.scene.services';
|
|
17
|
+
import type {
|
|
18
|
+
PlaybackBirdRenderer,
|
|
19
|
+
PlaybackFrameSceneContext,
|
|
20
|
+
PlaybackTrailRenderer,
|
|
21
|
+
PlaybackTrailRenderStyle,
|
|
22
|
+
PlaybackTrailStyleResolver,
|
|
23
|
+
} from './playback.frame-render.types';
|
|
24
|
+
export {
|
|
25
|
+
beginPlaybackFrameViewportTransform,
|
|
26
|
+
finalizePlaybackFrameCanvas,
|
|
27
|
+
preparePlaybackFrameCanvas,
|
|
28
|
+
} from './playback.frame-render.canvas.services';
|
|
29
|
+
export {
|
|
30
|
+
renderPlaybackFrameBackground,
|
|
31
|
+
renderPlaybackFrameBirds,
|
|
32
|
+
renderPlaybackFramePipes,
|
|
33
|
+
renderPlaybackFrameTrails,
|
|
34
|
+
} from './playback.frame-render.entity.services';
|
|
35
|
+
export { resolvePlaybackFrameSceneContext } from './playback.frame-render.scene.services';
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
import {
|
|
2
|
+
FLAPPY_NEON_PALETTE,
|
|
3
|
+
FLAPPY_NON_CHAMPION_OPACITY,
|
|
4
|
+
FLAPPY_PIPE_SPEED_PX_PER_FRAME,
|
|
5
|
+
FLAPPY_TRAIL_LINE_WIDTH_PX,
|
|
6
|
+
FLAPPY_TRAIL_MIN_HORIZONTAL_SEGMENT_PX,
|
|
7
|
+
FLAPPY_TRAIL_MIN_VERTICAL_SEGMENT_PX,
|
|
8
|
+
FLAPPY_TRAIL_OPACITY_FACTOR,
|
|
9
|
+
} from '../../../constants/constants';
|
|
10
|
+
import type { TrailPoint } from '../../browser-entry.types';
|
|
11
|
+
import {
|
|
12
|
+
resolveEdgeOpacityFactor,
|
|
13
|
+
resolveTrailLifetimeOpacityFactor,
|
|
14
|
+
} from '../playback.trail.utils';
|
|
15
|
+
import type { PlaybackEdgeBounds } from '../playback.types';
|
|
16
|
+
import type { PlaybackTrailRenderStyle } from './playback.frame-render.types';
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Detailed trail-painting helpers for playback frames.
|
|
20
|
+
*
|
|
21
|
+
* Trails are rendered as stepped segments with both lifetime fading and edge
|
|
22
|
+
* fading so motion remains legible without overwhelming the scene.
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Resolves the trail style used for one bird's stepped trail.
|
|
27
|
+
*
|
|
28
|
+
* Champion trails are emphasized while non-champion trails, when present, are
|
|
29
|
+
* intentionally subdued.
|
|
30
|
+
*
|
|
31
|
+
* @param birdIndex - Index of the bird being rendered.
|
|
32
|
+
* @param championBirdIndex - Champion index for the current frame.
|
|
33
|
+
* @returns Base opacity and color for the bird trail.
|
|
34
|
+
*/
|
|
35
|
+
export function resolvePlaybackTrailStyle(
|
|
36
|
+
birdIndex: number,
|
|
37
|
+
championBirdIndex: number,
|
|
38
|
+
): PlaybackTrailRenderStyle {
|
|
39
|
+
const isChampionBird = birdIndex === championBirdIndex;
|
|
40
|
+
return {
|
|
41
|
+
baseOpacity:
|
|
42
|
+
(isChampionBird ? 1 : FLAPPY_NON_CHAMPION_OPACITY) *
|
|
43
|
+
FLAPPY_TRAIL_OPACITY_FACTOR,
|
|
44
|
+
trailColor: isChampionBird
|
|
45
|
+
? FLAPPY_NEON_PALETTE.trail
|
|
46
|
+
: FLAPPY_NEON_PALETTE.nonChampionBird,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Draws the stepped trail history for one active bird.
|
|
52
|
+
*
|
|
53
|
+
* The stepped shape makes the trajectory feel more schematic and readable than a
|
|
54
|
+
* perfectly smooth spline, which fits the overall instrument-panel aesthetic.
|
|
55
|
+
*
|
|
56
|
+
* @param context - Canvas 2D drawing context.
|
|
57
|
+
* @param trailPoints - Cached per-frame trail points for one bird.
|
|
58
|
+
* @param color - Stroke color for the trail.
|
|
59
|
+
* @param anchorX - Bird anchor x-position in world space.
|
|
60
|
+
* @param baseOpacity - Base opacity before edge and lifetime fading.
|
|
61
|
+
* @param edgeBounds - Visible world bounds used for edge fading.
|
|
62
|
+
* @returns Nothing.
|
|
63
|
+
*/
|
|
64
|
+
export function drawTrail(
|
|
65
|
+
context: CanvasRenderingContext2D,
|
|
66
|
+
trailPoints: TrailPoint[],
|
|
67
|
+
color: string,
|
|
68
|
+
anchorX: number,
|
|
69
|
+
baseOpacity: number,
|
|
70
|
+
edgeBounds: PlaybackEdgeBounds,
|
|
71
|
+
): void {
|
|
72
|
+
if (trailPoints.length === 0) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const latestTrailFrameIndex = trailPoints.at(-1)?.frameIndex ?? 0;
|
|
77
|
+
const firstTrailPoint = trailPoints[0];
|
|
78
|
+
const firstTrailFrameOffset = Math.max(
|
|
79
|
+
0,
|
|
80
|
+
latestTrailFrameIndex - firstTrailPoint.frameIndex,
|
|
81
|
+
);
|
|
82
|
+
let previousXPosition =
|
|
83
|
+
anchorX - firstTrailFrameOffset * FLAPPY_PIPE_SPEED_PX_PER_FRAME;
|
|
84
|
+
let previousYPosition = firstTrailPoint.yPx;
|
|
85
|
+
let previousFrameOffset = firstTrailFrameOffset;
|
|
86
|
+
const maximumTrailFrameOffset = Math.max(1, firstTrailFrameOffset);
|
|
87
|
+
|
|
88
|
+
const previousGlobalAlpha = context.globalAlpha;
|
|
89
|
+
context.strokeStyle = color;
|
|
90
|
+
context.lineWidth = FLAPPY_TRAIL_LINE_WIDTH_PX;
|
|
91
|
+
|
|
92
|
+
trailPoints.slice(1).forEach((trailPoint) => {
|
|
93
|
+
const frameOffset = Math.max(
|
|
94
|
+
0,
|
|
95
|
+
latestTrailFrameIndex - trailPoint.frameIndex,
|
|
96
|
+
);
|
|
97
|
+
const nextXPosition =
|
|
98
|
+
anchorX - frameOffset * FLAPPY_PIPE_SPEED_PX_PER_FRAME;
|
|
99
|
+
const nextYPosition = trailPoint.yPx;
|
|
100
|
+
|
|
101
|
+
const horizontalDeltaPx = nextXPosition - previousXPosition;
|
|
102
|
+
const horizontalDirection = Math.sign(horizontalDeltaPx) || 1;
|
|
103
|
+
const steppedHorizontalLengthPx = Math.max(
|
|
104
|
+
Math.abs(horizontalDeltaPx),
|
|
105
|
+
FLAPPY_TRAIL_MIN_HORIZONTAL_SEGMENT_PX,
|
|
106
|
+
);
|
|
107
|
+
const steppedHorizontalXPosition =
|
|
108
|
+
previousXPosition + horizontalDirection * steppedHorizontalLengthPx;
|
|
109
|
+
drawTrailSegmentWithEdgeFade(
|
|
110
|
+
context,
|
|
111
|
+
previousXPosition,
|
|
112
|
+
previousYPosition,
|
|
113
|
+
steppedHorizontalXPosition,
|
|
114
|
+
previousYPosition,
|
|
115
|
+
baseOpacity,
|
|
116
|
+
edgeBounds,
|
|
117
|
+
previousFrameOffset,
|
|
118
|
+
frameOffset,
|
|
119
|
+
maximumTrailFrameOffset,
|
|
120
|
+
);
|
|
121
|
+
previousXPosition = steppedHorizontalXPosition;
|
|
122
|
+
|
|
123
|
+
const verticalDeltaPx = nextYPosition - previousYPosition;
|
|
124
|
+
if (verticalDeltaPx !== 0) {
|
|
125
|
+
const verticalDirection = Math.sign(verticalDeltaPx);
|
|
126
|
+
const steppedVerticalLengthPx = Math.max(
|
|
127
|
+
Math.abs(verticalDeltaPx),
|
|
128
|
+
FLAPPY_TRAIL_MIN_VERTICAL_SEGMENT_PX,
|
|
129
|
+
);
|
|
130
|
+
const steppedVerticalYPosition =
|
|
131
|
+
previousYPosition + verticalDirection * steppedVerticalLengthPx;
|
|
132
|
+
drawTrailSegmentWithEdgeFade(
|
|
133
|
+
context,
|
|
134
|
+
previousXPosition,
|
|
135
|
+
previousYPosition,
|
|
136
|
+
steppedHorizontalXPosition,
|
|
137
|
+
steppedVerticalYPosition,
|
|
138
|
+
baseOpacity,
|
|
139
|
+
edgeBounds,
|
|
140
|
+
previousFrameOffset,
|
|
141
|
+
frameOffset,
|
|
142
|
+
maximumTrailFrameOffset,
|
|
143
|
+
);
|
|
144
|
+
previousYPosition = steppedVerticalYPosition;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
drawTrailSegmentWithEdgeFade(
|
|
148
|
+
context,
|
|
149
|
+
previousXPosition,
|
|
150
|
+
previousYPosition,
|
|
151
|
+
steppedHorizontalXPosition,
|
|
152
|
+
nextYPosition,
|
|
153
|
+
baseOpacity,
|
|
154
|
+
edgeBounds,
|
|
155
|
+
previousFrameOffset,
|
|
156
|
+
frameOffset,
|
|
157
|
+
maximumTrailFrameOffset,
|
|
158
|
+
);
|
|
159
|
+
previousYPosition = nextYPosition;
|
|
160
|
+
|
|
161
|
+
drawTrailSegmentWithEdgeFade(
|
|
162
|
+
context,
|
|
163
|
+
previousXPosition,
|
|
164
|
+
previousYPosition,
|
|
165
|
+
nextXPosition,
|
|
166
|
+
nextYPosition,
|
|
167
|
+
baseOpacity,
|
|
168
|
+
edgeBounds,
|
|
169
|
+
previousFrameOffset,
|
|
170
|
+
frameOffset,
|
|
171
|
+
maximumTrailFrameOffset,
|
|
172
|
+
);
|
|
173
|
+
previousXPosition = nextXPosition;
|
|
174
|
+
previousYPosition = nextYPosition;
|
|
175
|
+
previousFrameOffset = frameOffset;
|
|
176
|
+
});
|
|
177
|
+
|
|
178
|
+
context.globalAlpha = previousGlobalAlpha;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Draws one trail segment with combined edge and lifetime fading.
|
|
183
|
+
*
|
|
184
|
+
* Two independent fade signals are combined here: old segments dim over time,
|
|
185
|
+
* and segments near the viewport edge fade to avoid harsh clipping.
|
|
186
|
+
*
|
|
187
|
+
* @param context - Canvas 2D drawing context.
|
|
188
|
+
* @param startXPx - Segment start x-position.
|
|
189
|
+
* @param startYPx - Segment start y-position.
|
|
190
|
+
* @param endXPx - Segment end x-position.
|
|
191
|
+
* @param endYPx - Segment end y-position.
|
|
192
|
+
* @param baseOpacity - Base opacity before fade factors.
|
|
193
|
+
* @param edgeBounds - Visible world bounds used for edge fading.
|
|
194
|
+
* @param startFrameOffset - Relative age of the segment start.
|
|
195
|
+
* @param endFrameOffset - Relative age of the segment end.
|
|
196
|
+
* @param maximumTrailFrameOffset - Oldest visible trail age.
|
|
197
|
+
* @returns Nothing.
|
|
198
|
+
*/
|
|
199
|
+
function drawTrailSegmentWithEdgeFade(
|
|
200
|
+
context: CanvasRenderingContext2D,
|
|
201
|
+
startXPx: number,
|
|
202
|
+
startYPx: number,
|
|
203
|
+
endXPx: number,
|
|
204
|
+
endYPx: number,
|
|
205
|
+
baseOpacity: number,
|
|
206
|
+
edgeBounds: PlaybackEdgeBounds,
|
|
207
|
+
startFrameOffset: number,
|
|
208
|
+
endFrameOffset: number,
|
|
209
|
+
maximumTrailFrameOffset: number,
|
|
210
|
+
): void {
|
|
211
|
+
const segmentLengthPx = Math.hypot(endXPx - startXPx, endYPx - startYPx);
|
|
212
|
+
if (segmentLengthPx === 0 || baseOpacity <= 0) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const startOpacityFactor = resolveEdgeOpacityFactor(
|
|
217
|
+
startXPx,
|
|
218
|
+
startYPx,
|
|
219
|
+
edgeBounds,
|
|
220
|
+
);
|
|
221
|
+
const endOpacityFactor = resolveEdgeOpacityFactor(endXPx, endYPx, edgeBounds);
|
|
222
|
+
const edgeOpacityFactor = Math.min(startOpacityFactor, endOpacityFactor);
|
|
223
|
+
|
|
224
|
+
const startLifetimeOpacityFactor = resolveTrailLifetimeOpacityFactor(
|
|
225
|
+
startFrameOffset,
|
|
226
|
+
maximumTrailFrameOffset,
|
|
227
|
+
);
|
|
228
|
+
const endLifetimeOpacityFactor = resolveTrailLifetimeOpacityFactor(
|
|
229
|
+
endFrameOffset,
|
|
230
|
+
maximumTrailFrameOffset,
|
|
231
|
+
);
|
|
232
|
+
const lifetimeOpacityFactor = Math.min(
|
|
233
|
+
startLifetimeOpacityFactor,
|
|
234
|
+
endLifetimeOpacityFactor,
|
|
235
|
+
);
|
|
236
|
+
|
|
237
|
+
const segmentOpacity =
|
|
238
|
+
baseOpacity * edgeOpacityFactor * lifetimeOpacityFactor;
|
|
239
|
+
if (segmentOpacity <= 0) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
context.globalAlpha = segmentOpacity;
|
|
244
|
+
context.beginPath();
|
|
245
|
+
context.moveTo(startXPx, startYPx);
|
|
246
|
+
context.lineTo(endXPx, endYPx);
|
|
247
|
+
context.stroke();
|
|
248
|
+
}
|
package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.types.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { resolveWorldViewport } from '../../browser-entry.viewport.utils';
|
|
2
|
+
import type { TrailPoint } from '../../browser-entry.types';
|
|
3
|
+
import type { PlaybackEdgeBounds } from '../playback.types';
|
|
4
|
+
import type { PlaybackBirdRenderStyle } from '../playback.render.utils';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Local type contracts for playback frame rendering.
|
|
8
|
+
*
|
|
9
|
+
* These types are extracted from the broader frame renderer so scene state,
|
|
10
|
+
* bird geometry, and trail styling can evolve behind a dedicated module
|
|
11
|
+
* boundary.
|
|
12
|
+
*
|
|
13
|
+
* Together they describe the inputs and intermediate state needed to paint one
|
|
14
|
+
* world-space frame on the browser canvas.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Shared scene contract used by one playback frame render pass.
|
|
19
|
+
*
|
|
20
|
+
* This collects the camera, viewport, and champion metadata that multiple frame
|
|
21
|
+
* render helpers need during the same paint pass.
|
|
22
|
+
*/
|
|
23
|
+
export type PlaybackFrameSceneContext = {
|
|
24
|
+
viewport: ReturnType<typeof resolveWorldViewport>;
|
|
25
|
+
visibleWorldWidthPx: number;
|
|
26
|
+
visibleWorldHeightPx: number;
|
|
27
|
+
cameraLeftPx: number;
|
|
28
|
+
championBirdIndex: number;
|
|
29
|
+
edgeBounds: PlaybackEdgeBounds;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Pixel-aligned square geometry used by bird paint helpers.
|
|
34
|
+
*
|
|
35
|
+
* Bird geometry is resolved once so the detailed bird renderer can reuse a
|
|
36
|
+
* stable square body box across glow and fill passes.
|
|
37
|
+
*/
|
|
38
|
+
export type PlaybackBirdGeometry = {
|
|
39
|
+
birdSideLengthPx: number;
|
|
40
|
+
birdLeftPx: number;
|
|
41
|
+
birdTopPx: number;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Resolved opacity and color for one bird trail render pass.
|
|
46
|
+
*
|
|
47
|
+
* Trails use a lighter-weight style record than birds because they only need a
|
|
48
|
+
* base opacity plus stroke color.
|
|
49
|
+
*/
|
|
50
|
+
export type PlaybackTrailRenderStyle = {
|
|
51
|
+
baseOpacity: number;
|
|
52
|
+
trailColor: string;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Bird body renderer contract used by frame-render orchestration helpers.
|
|
57
|
+
*
|
|
58
|
+
* Keeping the renderer as an injected function makes the high-level frame pass
|
|
59
|
+
* independent from the detailed bird-paint implementation.
|
|
60
|
+
*/
|
|
61
|
+
export type PlaybackBirdRenderer = (
|
|
62
|
+
context: CanvasRenderingContext2D,
|
|
63
|
+
birdYPx: number,
|
|
64
|
+
birdIndex: number,
|
|
65
|
+
championBirdIndex: number,
|
|
66
|
+
) => void;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Trail style resolver used by frame-render orchestration helpers.
|
|
70
|
+
*
|
|
71
|
+
* This lets orchestration ask for champion-vs-non-champion trail styling
|
|
72
|
+
* without embedding color policy directly in the frame pass.
|
|
73
|
+
*/
|
|
74
|
+
export type PlaybackTrailStyleResolver = (
|
|
75
|
+
birdIndex: number,
|
|
76
|
+
championBirdIndex: number,
|
|
77
|
+
) => PlaybackTrailRenderStyle;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Trail segment renderer used by frame-render orchestration helpers.
|
|
81
|
+
*
|
|
82
|
+
* The detailed trail painter owns edge fading and stepped segments; the frame
|
|
83
|
+
* orchestration only decides when to call it.
|
|
84
|
+
*/
|
|
85
|
+
export type PlaybackTrailRenderer = (
|
|
86
|
+
context: CanvasRenderingContext2D,
|
|
87
|
+
trailPoints: TrailPoint[],
|
|
88
|
+
color: string,
|
|
89
|
+
anchorX: number,
|
|
90
|
+
baseOpacity: number,
|
|
91
|
+
edgeBounds: PlaybackEdgeBounds,
|
|
92
|
+
) => void;
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* Bird-paint input shared by the bird render helper module.
|
|
96
|
+
*
|
|
97
|
+
* This combines geometry and style into one small input object for lower-level
|
|
98
|
+
* drawing helpers.
|
|
99
|
+
*/
|
|
100
|
+
export type PlaybackBirdPaintInput = {
|
|
101
|
+
birdGeometry: PlaybackBirdGeometry;
|
|
102
|
+
birdRenderStyle: PlaybackBirdRenderStyle;
|
|
103
|
+
};
|
package/test/examples/flappy_bird/browser-entry/playback/frame-render/playback.frame-render.utils.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export {
|
|
2
|
+
drawChampionPlaybackBirdGlow,
|
|
3
|
+
drawPlaybackBirdBody,
|
|
4
|
+
renderPlaybackBird,
|
|
5
|
+
resolvePlaybackBirdBodyGlowBlur,
|
|
6
|
+
resolvePlaybackBirdGeometry,
|
|
7
|
+
} from './playback.frame-render.bird.utils';
|
|
8
|
+
export {
|
|
9
|
+
drawTrail,
|
|
10
|
+
resolvePlaybackTrailStyle,
|
|
11
|
+
} from './playback.frame-render.trail.utils';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compatibility facade for playback frame rendering.
|
|
3
|
+
*
|
|
4
|
+
* Older imports still reach the frame renderer through this file while the
|
|
5
|
+
* implementation now lives in the dedicated frame-render folder.
|
|
6
|
+
*/
|
|
7
|
+
export {
|
|
8
|
+
renderPopulationFrame,
|
|
9
|
+
updateTrailState,
|
|
10
|
+
} from './frame-render/playback.frame-render.service';
|