@johnmorrisdotca/uchusen-rockets 0.2.1 → 0.3.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 +44 -0
- package/LICENSES/ODbL-1.0.txt +540 -0
- package/NOTICE.md +56 -6
- package/README.md +49 -14
- package/dist/assets/apollo-soyuz-apollo-soyuz-apart.painted.svg +1 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz-apart.svg +1 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz-apart.thick.svg +1 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz-csm.glb +0 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz-csm.painted.svg +1 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz-csm.svg +1 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz-csm.thick.svg +1 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz-docking-module.glb +0 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz-docking-module.painted.svg +1 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz-docking-module.svg +1 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz-docking-module.thick.svg +1 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz-soyuz.glb +0 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz-soyuz.painted.svg +1 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz-soyuz.svg +1 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz-soyuz.thick.svg +1 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz.glb +0 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz.painted.svg +1 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz.svg +1 -0
- package/dist/assets/apollo-soyuz-apollo-soyuz.thick.svg +1 -0
- package/dist/assets/dragon-cargo-dragon-2-apart.painted.svg +1 -0
- package/dist/assets/dragon-cargo-dragon-2-apart.svg +1 -0
- package/dist/assets/dragon-cargo-dragon-2-apart.thick.svg +1 -0
- package/dist/assets/dragon-cargo-dragon-2-capsule.glb +0 -0
- package/dist/assets/dragon-cargo-dragon-2-capsule.painted.svg +1 -0
- package/dist/assets/dragon-cargo-dragon-2-capsule.svg +1 -0
- package/dist/assets/dragon-cargo-dragon-2-capsule.thick.svg +1 -0
- package/dist/assets/dragon-cargo-dragon-2-trunk.glb +0 -0
- package/dist/assets/dragon-cargo-dragon-2-trunk.painted.svg +1 -0
- package/dist/assets/dragon-cargo-dragon-2-trunk.svg +1 -0
- package/dist/assets/dragon-cargo-dragon-2-trunk.thick.svg +1 -0
- package/dist/assets/dragon-cargo-dragon-2.glb +0 -0
- package/dist/assets/dragon-cargo-dragon-2.painted.svg +1 -0
- package/dist/assets/dragon-cargo-dragon-2.svg +1 -0
- package/dist/assets/dragon-cargo-dragon-2.thick.svg +1 -0
- package/dist/assets/dragon-crew-dragon-inside.glb +0 -0
- package/dist/assets/dragon-crew-dragon-inside.painted.svg +1 -0
- package/dist/assets/dragon-crew-dragon-inside.svg +1 -0
- package/dist/assets/dragon-crew-dragon-inside.thick.svg +1 -0
- package/dist/assets/dragon-dragon-1-apart.painted.svg +1 -1
- package/dist/assets/dragon-dragon-1-apart.svg +1 -1
- package/dist/assets/dragon-dragon-1-apart.thick.svg +1 -1
- package/dist/assets/dragon-dragon-1-capsule.painted.svg +1 -1
- package/dist/assets/dragon-dragon-1-capsule.svg +1 -1
- package/dist/assets/dragon-dragon-1-capsule.thick.svg +1 -1
- package/dist/assets/dragon-dragon-1-trunk.painted.svg +1 -1
- package/dist/assets/dragon-dragon-1-trunk.svg +1 -1
- package/dist/assets/dragon-dragon-1-trunk.thick.svg +1 -1
- package/dist/assets/dragon-dragon-1.painted.svg +1 -1
- package/dist/assets/dragon-dragon-1.svg +1 -1
- package/dist/assets/dragon-dragon-1.thick.svg +1 -1
- package/dist/assets/dragon-dragon-2-apart.painted.svg +1 -1
- package/dist/assets/dragon-dragon-2-apart.svg +1 -1
- package/dist/assets/dragon-dragon-2-apart.thick.svg +1 -1
- package/dist/assets/dragon-dragon-2-capsule.painted.svg +1 -1
- package/dist/assets/dragon-dragon-2-capsule.svg +1 -1
- package/dist/assets/dragon-dragon-2-capsule.thick.svg +1 -1
- package/dist/assets/dragon-dragon-2-trunk.painted.svg +1 -1
- package/dist/assets/dragon-dragon-2-trunk.svg +1 -1
- package/dist/assets/dragon-dragon-2-trunk.thick.svg +1 -1
- package/dist/assets/dragon-dragon-2.painted.svg +1 -1
- package/dist/assets/dragon-dragon-2.svg +1 -1
- package/dist/assets/dragon-dragon-2.thick.svg +1 -1
- package/dist/assets/droneship-asog-apart.painted.svg +1 -0
- package/dist/assets/droneship-asog-apart.svg +1 -0
- package/dist/assets/droneship-asog-apart.thick.svg +1 -0
- package/dist/assets/droneship-asog-deck.glb +0 -0
- package/dist/assets/droneship-asog-deck.painted.svg +1 -0
- package/dist/assets/droneship-asog-deck.svg +1 -0
- package/dist/assets/droneship-asog-deck.thick.svg +1 -0
- package/dist/assets/droneship-asog-landed.glb +0 -0
- package/dist/assets/droneship-asog-landed.painted.svg +1 -0
- package/dist/assets/droneship-asog-landed.svg +1 -0
- package/dist/assets/droneship-asog-landed.thick.svg +1 -0
- package/dist/assets/droneship-asog.glb +0 -0
- package/dist/assets/droneship-asog.painted.svg +1 -0
- package/dist/assets/droneship-asog.svg +1 -0
- package/dist/assets/droneship-asog.thick.svg +1 -0
- package/dist/assets/droneship-jrti-apart.painted.svg +1 -0
- package/dist/assets/droneship-jrti-apart.svg +1 -0
- package/dist/assets/droneship-jrti-apart.thick.svg +1 -0
- package/dist/assets/droneship-jrti-deck.glb +0 -0
- package/dist/assets/droneship-jrti-deck.painted.svg +1 -0
- package/dist/assets/droneship-jrti-deck.svg +1 -0
- package/dist/assets/droneship-jrti-deck.thick.svg +1 -0
- package/dist/assets/droneship-jrti-landed.glb +0 -0
- package/dist/assets/droneship-jrti-landed.painted.svg +1 -0
- package/dist/assets/droneship-jrti-landed.svg +1 -0
- package/dist/assets/droneship-jrti-landed.thick.svg +1 -0
- package/dist/assets/droneship-jrti.glb +0 -0
- package/dist/assets/droneship-jrti.painted.svg +1 -0
- package/dist/assets/droneship-jrti.svg +1 -0
- package/dist/assets/droneship-jrti.thick.svg +1 -0
- package/dist/assets/droneship-ocisly-apart.painted.svg +1 -0
- package/dist/assets/droneship-ocisly-apart.svg +1 -0
- package/dist/assets/droneship-ocisly-apart.thick.svg +1 -0
- package/dist/assets/droneship-ocisly-deck.glb +0 -0
- package/dist/assets/droneship-ocisly-deck.painted.svg +1 -0
- package/dist/assets/droneship-ocisly-deck.svg +1 -0
- package/dist/assets/droneship-ocisly-deck.thick.svg +1 -0
- package/dist/assets/droneship-ocisly-landed.glb +0 -0
- package/dist/assets/droneship-ocisly-landed.painted.svg +1 -0
- package/dist/assets/droneship-ocisly-landed.svg +1 -0
- package/dist/assets/droneship-ocisly-landed.thick.svg +1 -0
- package/dist/assets/droneship-ocisly.glb +0 -0
- package/dist/assets/droneship-ocisly.painted.svg +1 -0
- package/dist/assets/droneship-ocisly.svg +1 -0
- package/dist/assets/droneship-ocisly.thick.svg +1 -0
- package/dist/assets/electron-electron-adapter.glb +0 -0
- package/dist/assets/electron-electron-adapter.painted.svg +1 -0
- package/dist/assets/electron-electron-adapter.svg +1 -0
- package/dist/assets/electron-electron-adapter.thick.svg +1 -0
- package/dist/assets/electron-electron-apart.painted.svg +1 -0
- package/dist/assets/electron-electron-apart.svg +1 -0
- package/dist/assets/electron-electron-apart.thick.svg +1 -0
- package/dist/assets/electron-electron-fairing.glb +0 -0
- package/dist/assets/electron-electron-fairing.painted.svg +1 -0
- package/dist/assets/electron-electron-fairing.svg +1 -0
- package/dist/assets/electron-electron-fairing.thick.svg +1 -0
- package/dist/assets/electron-electron-first-stage.glb +0 -0
- package/dist/assets/electron-electron-first-stage.painted.svg +1 -0
- package/dist/assets/electron-electron-first-stage.svg +1 -0
- package/dist/assets/electron-electron-first-stage.thick.svg +1 -0
- package/dist/assets/electron-electron-second-stage.glb +0 -0
- package/dist/assets/electron-electron-second-stage.painted.svg +1 -0
- package/dist/assets/electron-electron-second-stage.svg +1 -0
- package/dist/assets/electron-electron-second-stage.thick.svg +1 -0
- package/dist/assets/electron-electron.glb +0 -0
- package/dist/assets/electron-electron.painted.svg +1 -0
- package/dist/assets/electron-electron.svg +1 -0
- package/dist/assets/electron-electron.thick.svg +1 -0
- package/dist/assets/falcon-1-falcon-1-apart.painted.svg +1 -0
- package/dist/assets/falcon-1-falcon-1-apart.svg +1 -0
- package/dist/assets/falcon-1-falcon-1-apart.thick.svg +1 -0
- package/dist/assets/falcon-1-falcon-1-fairing.glb +0 -0
- package/dist/assets/falcon-1-falcon-1-fairing.painted.svg +1 -0
- package/dist/assets/falcon-1-falcon-1-fairing.svg +1 -0
- package/dist/assets/falcon-1-falcon-1-fairing.thick.svg +1 -0
- package/dist/assets/falcon-1-falcon-1-first-stage.glb +0 -0
- package/dist/assets/falcon-1-falcon-1-first-stage.painted.svg +1 -0
- package/dist/assets/falcon-1-falcon-1-first-stage.svg +1 -0
- package/dist/assets/falcon-1-falcon-1-first-stage.thick.svg +1 -0
- package/dist/assets/falcon-1-falcon-1-second-stage.glb +0 -0
- package/dist/assets/falcon-1-falcon-1-second-stage.painted.svg +1 -0
- package/dist/assets/falcon-1-falcon-1-second-stage.svg +1 -0
- package/dist/assets/falcon-1-falcon-1-second-stage.thick.svg +1 -0
- package/dist/assets/falcon-1-falcon-1.glb +0 -0
- package/dist/assets/falcon-1-falcon-1.painted.svg +1 -0
- package/dist/assets/falcon-1-falcon-1.svg +1 -0
- package/dist/assets/falcon-1-falcon-1.thick.svg +1 -0
- package/dist/assets/falcon-1-falcon-1e-apart.painted.svg +1 -0
- package/dist/assets/falcon-1-falcon-1e-apart.svg +1 -0
- package/dist/assets/falcon-1-falcon-1e-apart.thick.svg +1 -0
- package/dist/assets/falcon-1-falcon-1e-fairing.glb +0 -0
- package/dist/assets/falcon-1-falcon-1e-fairing.painted.svg +1 -0
- package/dist/assets/falcon-1-falcon-1e-fairing.svg +1 -0
- package/dist/assets/falcon-1-falcon-1e-fairing.thick.svg +1 -0
- package/dist/assets/falcon-1-falcon-1e-first-stage.glb +0 -0
- package/dist/assets/falcon-1-falcon-1e-first-stage.painted.svg +1 -0
- package/dist/assets/falcon-1-falcon-1e-first-stage.svg +1 -0
- package/dist/assets/falcon-1-falcon-1e-first-stage.thick.svg +1 -0
- package/dist/assets/falcon-1-falcon-1e-second-stage.glb +0 -0
- package/dist/assets/falcon-1-falcon-1e-second-stage.painted.svg +1 -0
- package/dist/assets/falcon-1-falcon-1e-second-stage.svg +1 -0
- package/dist/assets/falcon-1-falcon-1e-second-stage.thick.svg +1 -0
- package/dist/assets/falcon-1-falcon-1e.glb +0 -0
- package/dist/assets/falcon-1-falcon-1e.painted.svg +1 -0
- package/dist/assets/falcon-1-falcon-1e.svg +1 -0
- package/dist/assets/falcon-1-falcon-1e.thick.svg +1 -0
- package/dist/assets/falcon-9-block-5-apart.painted.svg +1 -1
- package/dist/assets/falcon-9-block-5-apart.svg +1 -1
- package/dist/assets/falcon-9-block-5-apart.thick.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2-apart.painted.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2-apart.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2-apart.thick.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2-capsule.painted.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2-capsule.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2-capsule.thick.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2-first-stage.painted.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2-first-stage.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2-first-stage.thick.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2-second-stage.painted.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2-second-stage.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2-second-stage.thick.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2-trunk.painted.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2-trunk.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2-trunk.thick.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2.painted.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2.svg +1 -1
- package/dist/assets/falcon-9-block-5-dragon-2.thick.svg +1 -1
- package/dist/assets/falcon-9-block-5-fairing.painted.svg +1 -1
- package/dist/assets/falcon-9-block-5-fairing.svg +1 -1
- package/dist/assets/falcon-9-block-5-fairing.thick.svg +1 -1
- package/dist/assets/falcon-9-block-5-first-stage.painted.svg +1 -1
- package/dist/assets/falcon-9-block-5-first-stage.svg +1 -1
- package/dist/assets/falcon-9-block-5-first-stage.thick.svg +1 -1
- package/dist/assets/falcon-9-block-5-second-stage.painted.svg +1 -1
- package/dist/assets/falcon-9-block-5-second-stage.svg +1 -1
- package/dist/assets/falcon-9-block-5-second-stage.thick.svg +1 -1
- package/dist/assets/falcon-9-block-5.painted.svg +1 -1
- package/dist/assets/falcon-9-block-5.svg +1 -1
- package/dist/assets/falcon-9-block-5.thick.svg +1 -1
- package/dist/assets/falcon-9-ft-apart.painted.svg +1 -1
- package/dist/assets/falcon-9-ft-apart.svg +1 -1
- package/dist/assets/falcon-9-ft-apart.thick.svg +1 -1
- package/dist/assets/falcon-9-ft-fairing.painted.svg +1 -1
- package/dist/assets/falcon-9-ft-fairing.svg +1 -1
- package/dist/assets/falcon-9-ft-fairing.thick.svg +1 -1
- package/dist/assets/falcon-9-ft-first-stage.painted.svg +1 -1
- package/dist/assets/falcon-9-ft-first-stage.svg +1 -1
- package/dist/assets/falcon-9-ft-first-stage.thick.svg +1 -1
- package/dist/assets/falcon-9-ft-second-stage.painted.svg +1 -1
- package/dist/assets/falcon-9-ft-second-stage.svg +1 -1
- package/dist/assets/falcon-9-ft-second-stage.thick.svg +1 -1
- package/dist/assets/falcon-9-ft.painted.svg +1 -1
- package/dist/assets/falcon-9-ft.svg +1 -1
- package/dist/assets/falcon-9-ft.thick.svg +1 -1
- package/dist/assets/falcon-9-v1.0-apart.painted.svg +1 -1
- package/dist/assets/falcon-9-v1.0-apart.svg +1 -1
- package/dist/assets/falcon-9-v1.0-apart.thick.svg +1 -1
- package/dist/assets/falcon-9-v1.0-fairing.painted.svg +1 -1
- package/dist/assets/falcon-9-v1.0-fairing.svg +1 -1
- package/dist/assets/falcon-9-v1.0-fairing.thick.svg +1 -1
- package/dist/assets/falcon-9-v1.0-first-stage.painted.svg +1 -1
- package/dist/assets/falcon-9-v1.0-first-stage.svg +1 -1
- package/dist/assets/falcon-9-v1.0-first-stage.thick.svg +1 -1
- package/dist/assets/falcon-9-v1.0-second-stage.painted.svg +1 -1
- package/dist/assets/falcon-9-v1.0-second-stage.svg +1 -1
- package/dist/assets/falcon-9-v1.0-second-stage.thick.svg +1 -1
- package/dist/assets/falcon-9-v1.0.painted.svg +1 -1
- package/dist/assets/falcon-9-v1.0.svg +1 -1
- package/dist/assets/falcon-9-v1.0.thick.svg +1 -1
- package/dist/assets/falcon-9-v1.1-apart.painted.svg +1 -1
- package/dist/assets/falcon-9-v1.1-apart.svg +1 -1
- package/dist/assets/falcon-9-v1.1-apart.thick.svg +1 -1
- package/dist/assets/falcon-9-v1.1-fairing.painted.svg +1 -1
- package/dist/assets/falcon-9-v1.1-fairing.svg +1 -1
- package/dist/assets/falcon-9-v1.1-fairing.thick.svg +1 -1
- package/dist/assets/falcon-9-v1.1-first-stage.painted.svg +1 -1
- package/dist/assets/falcon-9-v1.1-first-stage.svg +1 -1
- package/dist/assets/falcon-9-v1.1-first-stage.thick.svg +1 -1
- package/dist/assets/falcon-9-v1.1-second-stage.painted.svg +1 -1
- package/dist/assets/falcon-9-v1.1-second-stage.svg +1 -1
- package/dist/assets/falcon-9-v1.1-second-stage.thick.svg +1 -1
- package/dist/assets/falcon-9-v1.1.painted.svg +1 -1
- package/dist/assets/falcon-9-v1.1.svg +1 -1
- package/dist/assets/falcon-9-v1.1.thick.svg +1 -1
- package/dist/assets/falcon-heavy-falcon-heavy-apart.painted.svg +1 -1
- package/dist/assets/falcon-heavy-falcon-heavy-apart.svg +1 -1
- package/dist/assets/falcon-heavy-falcon-heavy-apart.thick.svg +1 -1
- package/dist/assets/falcon-heavy-falcon-heavy-centre.painted.svg +1 -1
- package/dist/assets/falcon-heavy-falcon-heavy-centre.svg +1 -1
- package/dist/assets/falcon-heavy-falcon-heavy-centre.thick.svg +1 -1
- package/dist/assets/falcon-heavy-falcon-heavy-side-left.painted.svg +1 -1
- package/dist/assets/falcon-heavy-falcon-heavy-side-left.svg +1 -1
- package/dist/assets/falcon-heavy-falcon-heavy-side-left.thick.svg +1 -1
- package/dist/assets/falcon-heavy-falcon-heavy-side-right.painted.svg +1 -1
- package/dist/assets/falcon-heavy-falcon-heavy-side-right.svg +1 -1
- package/dist/assets/falcon-heavy-falcon-heavy-side-right.thick.svg +1 -1
- package/dist/assets/falcon-heavy-falcon-heavy.painted.svg +1 -1
- package/dist/assets/falcon-heavy-falcon-heavy.svg +1 -1
- package/dist/assets/falcon-heavy-falcon-heavy.thick.svg +1 -1
- package/dist/assets/gemini-gemini-adapter.glb +0 -0
- package/dist/assets/gemini-gemini-adapter.painted.svg +1 -0
- package/dist/assets/gemini-gemini-adapter.svg +1 -0
- package/dist/assets/gemini-gemini-adapter.thick.svg +1 -0
- package/dist/assets/gemini-gemini-apart.painted.svg +1 -0
- package/dist/assets/gemini-gemini-apart.svg +1 -0
- package/dist/assets/gemini-gemini-apart.thick.svg +1 -0
- package/dist/assets/gemini-gemini-capsule.glb +0 -0
- package/dist/assets/gemini-gemini-capsule.painted.svg +1 -0
- package/dist/assets/gemini-gemini-capsule.svg +1 -0
- package/dist/assets/gemini-gemini-capsule.thick.svg +1 -0
- package/dist/assets/gemini-gemini.glb +0 -0
- package/dist/assets/gemini-gemini.painted.svg +1 -0
- package/dist/assets/gemini-gemini.svg +1 -0
- package/dist/assets/gemini-gemini.thick.svg +1 -0
- package/dist/assets/grasshopper-grasshopper.painted.svg +1 -1
- package/dist/assets/grasshopper-grasshopper.svg +1 -1
- package/dist/assets/grasshopper-grasshopper.thick.svg +1 -1
- package/dist/assets/hubble-hubble.glb +0 -0
- package/dist/assets/hubble-hubble.painted.svg +1 -0
- package/dist/assets/hubble-hubble.svg +1 -0
- package/dist/assets/hubble-hubble.thick.svg +1 -0
- package/dist/assets/iss-iss.glb +0 -0
- package/dist/assets/iss-iss.painted.svg +1 -0
- package/dist/assets/iss-iss.svg +1 -0
- package/dist/assets/iss-iss.thick.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c.glb +0 -0
- package/dist/assets/jupiter-c-jupiter-c.painted.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c.thick.svg +1 -0
- package/dist/assets/landing-zone-lz-1-apart.painted.svg +1 -0
- package/dist/assets/landing-zone-lz-1-apart.svg +1 -0
- package/dist/assets/landing-zone-lz-1-apart.thick.svg +1 -0
- package/dist/assets/landing-zone-lz-1-landed.glb +0 -0
- package/dist/assets/landing-zone-lz-1-landed.painted.svg +1 -0
- package/dist/assets/landing-zone-lz-1-landed.svg +1 -0
- package/dist/assets/landing-zone-lz-1-landed.thick.svg +1 -0
- package/dist/assets/landing-zone-lz-1-pad.glb +0 -0
- package/dist/assets/landing-zone-lz-1-pad.painted.svg +1 -0
- package/dist/assets/landing-zone-lz-1-pad.svg +1 -0
- package/dist/assets/landing-zone-lz-1-pad.thick.svg +1 -0
- package/dist/assets/landing-zone-lz-1.glb +0 -0
- package/dist/assets/landing-zone-lz-1.painted.svg +1 -0
- package/dist/assets/landing-zone-lz-1.svg +1 -0
- package/dist/assets/landing-zone-lz-1.thick.svg +1 -0
- package/dist/assets/landing-zone-lz-4-apart.painted.svg +1 -0
- package/dist/assets/landing-zone-lz-4-apart.svg +1 -0
- package/dist/assets/landing-zone-lz-4-apart.thick.svg +1 -0
- package/dist/assets/landing-zone-lz-4-landed.glb +0 -0
- package/dist/assets/landing-zone-lz-4-landed.painted.svg +1 -0
- package/dist/assets/landing-zone-lz-4-landed.svg +1 -0
- package/dist/assets/landing-zone-lz-4-landed.thick.svg +1 -0
- package/dist/assets/landing-zone-lz-4-pad.glb +0 -0
- package/dist/assets/landing-zone-lz-4-pad.painted.svg +1 -0
- package/dist/assets/landing-zone-lz-4-pad.svg +1 -0
- package/dist/assets/landing-zone-lz-4-pad.thick.svg +1 -0
- package/dist/assets/landing-zone-lz-4.glb +0 -0
- package/dist/assets/landing-zone-lz-4.painted.svg +1 -0
- package/dist/assets/landing-zone-lz-4.svg +1 -0
- package/dist/assets/landing-zone-lz-4.thick.svg +1 -0
- package/dist/assets/launch-tower-catch-apart.painted.svg +1 -0
- package/dist/assets/launch-tower-catch-apart.svg +1 -0
- package/dist/assets/launch-tower-catch-apart.thick.svg +1 -0
- package/dist/assets/launch-tower-catch-arms.glb +0 -0
- package/dist/assets/launch-tower-catch-arms.painted.svg +1 -0
- package/dist/assets/launch-tower-catch-arms.svg +1 -0
- package/dist/assets/launch-tower-catch-arms.thick.svg +1 -0
- package/dist/assets/launch-tower-catch-booster.glb +0 -0
- package/dist/assets/launch-tower-catch-booster.painted.svg +1 -0
- package/dist/assets/launch-tower-catch-booster.svg +1 -0
- package/dist/assets/launch-tower-catch-booster.thick.svg +1 -0
- package/dist/assets/launch-tower-catch-mount.glb +0 -0
- package/dist/assets/launch-tower-catch-mount.painted.svg +1 -0
- package/dist/assets/launch-tower-catch-mount.svg +1 -0
- package/dist/assets/launch-tower-catch-mount.thick.svg +1 -0
- package/dist/assets/launch-tower-catch-tower.glb +0 -0
- package/dist/assets/launch-tower-catch-tower.painted.svg +1 -0
- package/dist/assets/launch-tower-catch-tower.svg +1 -0
- package/dist/assets/launch-tower-catch-tower.thick.svg +1 -0
- package/dist/assets/launch-tower-catch.glb +0 -0
- package/dist/assets/launch-tower-catch.painted.svg +1 -0
- package/dist/assets/launch-tower-catch.svg +1 -0
- package/dist/assets/launch-tower-catch.thick.svg +1 -0
- package/dist/assets/launch-tower-stack-apart.painted.svg +1 -0
- package/dist/assets/launch-tower-stack-apart.svg +1 -0
- package/dist/assets/launch-tower-stack-apart.thick.svg +1 -0
- package/dist/assets/launch-tower-stack-arms.glb +0 -0
- package/dist/assets/launch-tower-stack-arms.painted.svg +1 -0
- package/dist/assets/launch-tower-stack-arms.svg +1 -0
- package/dist/assets/launch-tower-stack-arms.thick.svg +1 -0
- package/dist/assets/launch-tower-stack-booster.glb +0 -0
- package/dist/assets/launch-tower-stack-booster.painted.svg +1 -0
- package/dist/assets/launch-tower-stack-booster.svg +1 -0
- package/dist/assets/launch-tower-stack-booster.thick.svg +1 -0
- package/dist/assets/launch-tower-stack-mount.glb +0 -0
- package/dist/assets/launch-tower-stack-mount.painted.svg +1 -0
- package/dist/assets/launch-tower-stack-mount.svg +1 -0
- package/dist/assets/launch-tower-stack-mount.thick.svg +1 -0
- package/dist/assets/launch-tower-stack-ship.glb +0 -0
- package/dist/assets/launch-tower-stack-ship.painted.svg +1 -0
- package/dist/assets/launch-tower-stack-ship.svg +1 -0
- package/dist/assets/launch-tower-stack-ship.thick.svg +1 -0
- package/dist/assets/launch-tower-stack-tower.glb +0 -0
- package/dist/assets/launch-tower-stack-tower.painted.svg +1 -0
- package/dist/assets/launch-tower-stack-tower.svg +1 -0
- package/dist/assets/launch-tower-stack-tower.thick.svg +1 -0
- package/dist/assets/launch-tower-stack.glb +0 -0
- package/dist/assets/launch-tower-stack.painted.svg +1 -0
- package/dist/assets/launch-tower-stack.svg +1 -0
- package/dist/assets/launch-tower-stack.thick.svg +1 -0
- package/dist/assets/launch-tower-tower-apart.painted.svg +1 -0
- package/dist/assets/launch-tower-tower-apart.svg +1 -0
- package/dist/assets/launch-tower-tower-apart.thick.svg +1 -0
- package/dist/assets/launch-tower-tower-arms.glb +0 -0
- package/dist/assets/launch-tower-tower-arms.painted.svg +1 -0
- package/dist/assets/launch-tower-tower-arms.svg +1 -0
- package/dist/assets/launch-tower-tower-arms.thick.svg +1 -0
- package/dist/assets/launch-tower-tower-mount.glb +0 -0
- package/dist/assets/launch-tower-tower-mount.painted.svg +1 -0
- package/dist/assets/launch-tower-tower-mount.svg +1 -0
- package/dist/assets/launch-tower-tower-mount.thick.svg +1 -0
- package/dist/assets/launch-tower-tower-tower.glb +0 -0
- package/dist/assets/launch-tower-tower-tower.painted.svg +1 -0
- package/dist/assets/launch-tower-tower-tower.svg +1 -0
- package/dist/assets/launch-tower-tower-tower.thick.svg +1 -0
- package/dist/assets/launch-tower-tower.glb +0 -0
- package/dist/assets/launch-tower-tower.painted.svg +1 -0
- package/dist/assets/launch-tower-tower.svg +1 -0
- package/dist/assets/launch-tower-tower.thick.svg +1 -0
- package/dist/assets/lunar-module-lunar-module-apart.painted.svg +1 -0
- package/dist/assets/lunar-module-lunar-module-apart.svg +1 -0
- package/dist/assets/lunar-module-lunar-module-apart.thick.svg +1 -0
- package/dist/assets/lunar-module-lunar-module-ascent.glb +0 -0
- package/dist/assets/lunar-module-lunar-module-ascent.painted.svg +1 -0
- package/dist/assets/lunar-module-lunar-module-ascent.svg +1 -0
- package/dist/assets/lunar-module-lunar-module-ascent.thick.svg +1 -0
- package/dist/assets/lunar-module-lunar-module-descent.glb +0 -0
- package/dist/assets/lunar-module-lunar-module-descent.painted.svg +1 -0
- package/dist/assets/lunar-module-lunar-module-descent.svg +1 -0
- package/dist/assets/lunar-module-lunar-module-descent.thick.svg +1 -0
- package/dist/assets/lunar-module-lunar-module.glb +0 -0
- package/dist/assets/lunar-module-lunar-module.painted.svg +1 -0
- package/dist/assets/lunar-module-lunar-module.svg +1 -0
- package/dist/assets/lunar-module-lunar-module.thick.svg +1 -0
- package/dist/assets/mercury-friendship-7.glb +0 -0
- package/dist/assets/mercury-friendship-7.painted.svg +1 -0
- package/dist/assets/mercury-friendship-7.svg +1 -0
- package/dist/assets/mercury-friendship-7.thick.svg +1 -0
- package/dist/assets/models/apollo-soyuz-csm.glb +0 -0
- package/dist/assets/models/apollo-soyuz-docking-module.glb +0 -0
- package/dist/assets/models/apollo-soyuz-soyuz.glb +0 -0
- package/dist/assets/models/gemini-adapter.glb +0 -0
- package/dist/assets/models/gemini-capsule.glb +0 -0
- package/dist/assets/models/hubble-telescope.glb +0 -0
- package/dist/assets/models/iss-station.glb +0 -0
- package/dist/assets/models/jupiter-c-vehicle.glb +0 -0
- package/dist/assets/models/lunar-module-ascent.glb +0 -0
- package/dist/assets/models/lunar-module-descent.glb +0 -0
- package/dist/assets/models/mercury-capsule.glb +0 -0
- package/dist/assets/models/space-shuttle-discovery-orbiter.glb +0 -0
- package/dist/assets/models/space-shuttle-stack-external-tank.glb +0 -0
- package/dist/assets/models/space-shuttle-stack-orbiter.glb +0 -0
- package/dist/assets/models/space-shuttle-stack-srb.glb +0 -0
- package/dist/assets/new-glenn-7x2-apart.painted.svg +1 -0
- package/dist/assets/new-glenn-7x2-apart.svg +1 -0
- package/dist/assets/new-glenn-7x2-apart.thick.svg +1 -0
- package/dist/assets/new-glenn-7x2-fairing.glb +0 -0
- package/dist/assets/new-glenn-7x2-fairing.painted.svg +1 -0
- package/dist/assets/new-glenn-7x2-fairing.svg +1 -0
- package/dist/assets/new-glenn-7x2-fairing.thick.svg +1 -0
- package/dist/assets/new-glenn-7x2-first-stage.glb +0 -0
- package/dist/assets/new-glenn-7x2-first-stage.painted.svg +1 -0
- package/dist/assets/new-glenn-7x2-first-stage.svg +1 -0
- package/dist/assets/new-glenn-7x2-first-stage.thick.svg +1 -0
- package/dist/assets/new-glenn-7x2-second-stage.glb +0 -0
- package/dist/assets/new-glenn-7x2-second-stage.painted.svg +1 -0
- package/dist/assets/new-glenn-7x2-second-stage.svg +1 -0
- package/dist/assets/new-glenn-7x2-second-stage.thick.svg +1 -0
- package/dist/assets/new-glenn-7x2.glb +0 -0
- package/dist/assets/new-glenn-7x2.painted.svg +1 -0
- package/dist/assets/new-glenn-7x2.svg +1 -0
- package/dist/assets/new-glenn-7x2.thick.svg +1 -0
- package/dist/assets/parts/flap-aft.painted.svg +1 -1
- package/dist/assets/parts/flap-aft.svg +1 -1
- package/dist/assets/parts/flap-aft.thick.svg +1 -1
- package/dist/assets/parts/flap-forward.painted.svg +1 -1
- package/dist/assets/parts/flap-forward.svg +1 -1
- package/dist/assets/parts/flap-forward.thick.svg +1 -1
- package/dist/assets/parts/grid-fin-four.painted.svg +1 -1
- package/dist/assets/parts/grid-fin-four.svg +1 -1
- package/dist/assets/parts/grid-fin-four.thick.svg +1 -1
- package/dist/assets/parts/grid-fin-three.painted.svg +1 -1
- package/dist/assets/parts/grid-fin-three.svg +1 -1
- package/dist/assets/parts/grid-fin-three.thick.svg +1 -1
- package/dist/assets/parts/merlin-sea-level.painted.svg +1 -1
- package/dist/assets/parts/merlin-sea-level.svg +1 -1
- package/dist/assets/parts/merlin-sea-level.thick.svg +1 -1
- package/dist/assets/parts/raptor-sea-level.painted.svg +1 -1
- package/dist/assets/parts/raptor-sea-level.svg +1 -1
- package/dist/assets/parts/raptor-sea-level.thick.svg +1 -1
- package/dist/assets/parts/raptor-vacuum.painted.svg +1 -1
- package/dist/assets/parts/raptor-vacuum.svg +1 -1
- package/dist/assets/parts/raptor-vacuum.thick.svg +1 -1
- package/dist/assets/saturn-v-saturn-v-adapter.glb +0 -0
- package/dist/assets/saturn-v-saturn-v-adapter.painted.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-adapter.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-adapter.thick.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-apart.painted.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-apart.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-apart.thick.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-capsule.glb +0 -0
- package/dist/assets/saturn-v-saturn-v-capsule.painted.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-capsule.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-capsule.thick.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-escape-tower.glb +0 -0
- package/dist/assets/saturn-v-saturn-v-escape-tower.painted.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-escape-tower.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-escape-tower.thick.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-first-stage.glb +0 -0
- package/dist/assets/saturn-v-saturn-v-first-stage.painted.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-first-stage.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-first-stage.thick.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-second-stage.glb +0 -0
- package/dist/assets/saturn-v-saturn-v-second-stage.painted.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-second-stage.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-second-stage.thick.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-service-module.glb +0 -0
- package/dist/assets/saturn-v-saturn-v-service-module.painted.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-service-module.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-service-module.thick.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-third-stage.glb +0 -0
- package/dist/assets/saturn-v-saturn-v-third-stage.painted.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-third-stage.svg +1 -0
- package/dist/assets/saturn-v-saturn-v-third-stage.thick.svg +1 -0
- package/dist/assets/saturn-v-saturn-v.glb +0 -0
- package/dist/assets/saturn-v-saturn-v.painted.svg +1 -0
- package/dist/assets/saturn-v-saturn-v.svg +1 -0
- package/dist/assets/saturn-v-saturn-v.thick.svg +1 -0
- package/dist/assets/sls-block-1-apart.painted.svg +1 -0
- package/dist/assets/sls-block-1-apart.svg +1 -0
- package/dist/assets/sls-block-1-apart.thick.svg +1 -0
- package/dist/assets/sls-block-1-capsule.glb +0 -0
- package/dist/assets/sls-block-1-capsule.painted.svg +1 -0
- package/dist/assets/sls-block-1-capsule.svg +1 -0
- package/dist/assets/sls-block-1-capsule.thick.svg +1 -0
- package/dist/assets/sls-block-1-escape-tower.glb +0 -0
- package/dist/assets/sls-block-1-escape-tower.painted.svg +1 -0
- package/dist/assets/sls-block-1-escape-tower.svg +1 -0
- package/dist/assets/sls-block-1-escape-tower.thick.svg +1 -0
- package/dist/assets/sls-block-1-first-stage.glb +0 -0
- package/dist/assets/sls-block-1-first-stage.painted.svg +1 -0
- package/dist/assets/sls-block-1-first-stage.svg +1 -0
- package/dist/assets/sls-block-1-first-stage.thick.svg +1 -0
- package/dist/assets/sls-block-1-service-module.glb +0 -0
- package/dist/assets/sls-block-1-service-module.painted.svg +1 -0
- package/dist/assets/sls-block-1-service-module.svg +1 -0
- package/dist/assets/sls-block-1-service-module.thick.svg +1 -0
- package/dist/assets/sls-block-1-srb-left.glb +0 -0
- package/dist/assets/sls-block-1-srb-left.painted.svg +1 -0
- package/dist/assets/sls-block-1-srb-left.svg +1 -0
- package/dist/assets/sls-block-1-srb-left.thick.svg +1 -0
- package/dist/assets/sls-block-1-srb-right.glb +0 -0
- package/dist/assets/sls-block-1-srb-right.painted.svg +1 -0
- package/dist/assets/sls-block-1-srb-right.svg +1 -0
- package/dist/assets/sls-block-1-srb-right.thick.svg +1 -0
- package/dist/assets/sls-block-1-upper-stage.glb +0 -0
- package/dist/assets/sls-block-1-upper-stage.painted.svg +1 -0
- package/dist/assets/sls-block-1-upper-stage.svg +1 -0
- package/dist/assets/sls-block-1-upper-stage.thick.svg +1 -0
- package/dist/assets/sls-block-1.glb +0 -0
- package/dist/assets/sls-block-1.painted.svg +1 -0
- package/dist/assets/sls-block-1.svg +1 -0
- package/dist/assets/sls-block-1.thick.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-apart.painted.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-apart.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-apart.thick.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-booster-1.glb +0 -0
- package/dist/assets/soyuz-soyuz-2-booster-1.painted.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-booster-1.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-booster-1.thick.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-booster-2.glb +0 -0
- package/dist/assets/soyuz-soyuz-2-booster-2.painted.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-booster-2.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-booster-2.thick.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-booster-3.glb +0 -0
- package/dist/assets/soyuz-soyuz-2-booster-3.painted.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-booster-3.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-booster-3.thick.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-booster-4.glb +0 -0
- package/dist/assets/soyuz-soyuz-2-booster-4.painted.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-booster-4.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-booster-4.thick.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-fairing.glb +0 -0
- package/dist/assets/soyuz-soyuz-2-fairing.painted.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-fairing.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-fairing.thick.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-first-stage.glb +0 -0
- package/dist/assets/soyuz-soyuz-2-first-stage.painted.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-first-stage.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-first-stage.thick.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-third-stage.glb +0 -0
- package/dist/assets/soyuz-soyuz-2-third-stage.painted.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-third-stage.svg +1 -0
- package/dist/assets/soyuz-soyuz-2-third-stage.thick.svg +1 -0
- package/dist/assets/soyuz-soyuz-2.glb +0 -0
- package/dist/assets/soyuz-soyuz-2.painted.svg +1 -0
- package/dist/assets/soyuz-soyuz-2.svg +1 -0
- package/dist/assets/soyuz-soyuz-2.thick.svg +1 -0
- package/dist/assets/space-shuttle-discovery.glb +0 -0
- package/dist/assets/space-shuttle-discovery.painted.svg +1 -0
- package/dist/assets/space-shuttle-discovery.svg +1 -0
- package/dist/assets/space-shuttle-discovery.thick.svg +1 -0
- package/dist/assets/space-shuttle-stack-apart.painted.svg +1 -0
- package/dist/assets/space-shuttle-stack-apart.svg +1 -0
- package/dist/assets/space-shuttle-stack-apart.thick.svg +1 -0
- package/dist/assets/space-shuttle-stack-external-tank.glb +0 -0
- package/dist/assets/space-shuttle-stack-external-tank.painted.svg +1 -0
- package/dist/assets/space-shuttle-stack-external-tank.svg +1 -0
- package/dist/assets/space-shuttle-stack-external-tank.thick.svg +1 -0
- package/dist/assets/space-shuttle-stack-orbiter.glb +0 -0
- package/dist/assets/space-shuttle-stack-orbiter.painted.svg +1 -0
- package/dist/assets/space-shuttle-stack-orbiter.svg +1 -0
- package/dist/assets/space-shuttle-stack-orbiter.thick.svg +1 -0
- package/dist/assets/space-shuttle-stack-srb-left.glb +0 -0
- package/dist/assets/space-shuttle-stack-srb-left.painted.svg +1 -0
- package/dist/assets/space-shuttle-stack-srb-left.svg +1 -0
- package/dist/assets/space-shuttle-stack-srb-left.thick.svg +1 -0
- package/dist/assets/space-shuttle-stack-srb-right.glb +0 -0
- package/dist/assets/space-shuttle-stack-srb-right.painted.svg +1 -0
- package/dist/assets/space-shuttle-stack-srb-right.svg +1 -0
- package/dist/assets/space-shuttle-stack-srb-right.thick.svg +1 -0
- package/dist/assets/space-shuttle-stack.glb +0 -0
- package/dist/assets/space-shuttle-stack.painted.svg +1 -0
- package/dist/assets/space-shuttle-stack.svg +1 -0
- package/dist/assets/space-shuttle-stack.thick.svg +1 -0
- package/dist/assets/starbase-build-site-apart.painted.svg +1 -0
- package/dist/assets/starbase-build-site-apart.svg +1 -0
- package/dist/assets/starbase-build-site-apart.thick.svg +1 -0
- package/dist/assets/starbase-build-site-garden.glb +0 -0
- package/dist/assets/starbase-build-site-garden.painted.svg +1 -0
- package/dist/assets/starbase-build-site-garden.svg +1 -0
- package/dist/assets/starbase-build-site-garden.thick.svg +1 -0
- package/dist/assets/starbase-build-site-ground.glb +0 -0
- package/dist/assets/starbase-build-site-ground.painted.svg +1 -0
- package/dist/assets/starbase-build-site-ground.svg +1 -0
- package/dist/assets/starbase-build-site-ground.thick.svg +1 -0
- package/dist/assets/starbase-build-site-mega-bays.glb +0 -0
- package/dist/assets/starbase-build-site-mega-bays.painted.svg +1 -0
- package/dist/assets/starbase-build-site-mega-bays.svg +1 -0
- package/dist/assets/starbase-build-site-mega-bays.thick.svg +1 -0
- package/dist/assets/starbase-build-site-sign.glb +0 -0
- package/dist/assets/starbase-build-site-sign.painted.svg +1 -0
- package/dist/assets/starbase-build-site-sign.svg +1 -0
- package/dist/assets/starbase-build-site-sign.thick.svg +1 -0
- package/dist/assets/starbase-build-site-starfactory.glb +0 -0
- package/dist/assets/starbase-build-site-starfactory.painted.svg +1 -0
- package/dist/assets/starbase-build-site-starfactory.svg +1 -0
- package/dist/assets/starbase-build-site-starfactory.thick.svg +1 -0
- package/dist/assets/starbase-build-site.glb +0 -0
- package/dist/assets/starbase-build-site.painted.svg +1 -0
- package/dist/assets/starbase-build-site.svg +1 -0
- package/dist/assets/starbase-build-site.thick.svg +1 -0
- package/dist/assets/starbase-city-apart.painted.svg +1 -0
- package/dist/assets/starbase-city-apart.svg +1 -0
- package/dist/assets/starbase-city-apart.thick.svg +1 -0
- package/dist/assets/starbase-city-garden.glb +0 -0
- package/dist/assets/starbase-city-garden.painted.svg +1 -0
- package/dist/assets/starbase-city-garden.svg +1 -0
- package/dist/assets/starbase-city-garden.thick.svg +1 -0
- package/dist/assets/starbase-city-ground.glb +0 -0
- package/dist/assets/starbase-city-ground.painted.svg +1 -0
- package/dist/assets/starbase-city-ground.svg +1 -0
- package/dist/assets/starbase-city-ground.thick.svg +1 -0
- package/dist/assets/starbase-city-mega-bays.glb +0 -0
- package/dist/assets/starbase-city-mega-bays.painted.svg +1 -0
- package/dist/assets/starbase-city-mega-bays.svg +1 -0
- package/dist/assets/starbase-city-mega-bays.thick.svg +1 -0
- package/dist/assets/starbase-city-on-pad.glb +0 -0
- package/dist/assets/starbase-city-on-pad.painted.svg +1 -0
- package/dist/assets/starbase-city-on-pad.svg +1 -0
- package/dist/assets/starbase-city-on-pad.thick.svg +1 -0
- package/dist/assets/starbase-city-pads.glb +0 -0
- package/dist/assets/starbase-city-pads.painted.svg +1 -0
- package/dist/assets/starbase-city-pads.svg +1 -0
- package/dist/assets/starbase-city-pads.thick.svg +1 -0
- package/dist/assets/starbase-city-sign.glb +0 -0
- package/dist/assets/starbase-city-sign.painted.svg +1 -0
- package/dist/assets/starbase-city-sign.svg +1 -0
- package/dist/assets/starbase-city-sign.thick.svg +1 -0
- package/dist/assets/starbase-city-starfactory.glb +0 -0
- package/dist/assets/starbase-city-starfactory.painted.svg +1 -0
- package/dist/assets/starbase-city-starfactory.svg +1 -0
- package/dist/assets/starbase-city-starfactory.thick.svg +1 -0
- package/dist/assets/starbase-city-tank-farm.glb +0 -0
- package/dist/assets/starbase-city-tank-farm.painted.svg +1 -0
- package/dist/assets/starbase-city-tank-farm.svg +1 -0
- package/dist/assets/starbase-city-tank-farm.thick.svg +1 -0
- package/dist/assets/starbase-city-village.glb +0 -0
- package/dist/assets/starbase-city-village.painted.svg +1 -0
- package/dist/assets/starbase-city-village.svg +1 -0
- package/dist/assets/starbase-city-village.thick.svg +1 -0
- package/dist/assets/starbase-city.glb +0 -0
- package/dist/assets/starbase-city.painted.svg +1 -0
- package/dist/assets/starbase-city.svg +1 -0
- package/dist/assets/starbase-city.thick.svg +1 -0
- package/dist/assets/starbase-launch-site-apart.painted.svg +1 -0
- package/dist/assets/starbase-launch-site-apart.svg +1 -0
- package/dist/assets/starbase-launch-site-apart.thick.svg +1 -0
- package/dist/assets/starbase-launch-site-ground.glb +0 -0
- package/dist/assets/starbase-launch-site-ground.painted.svg +1 -0
- package/dist/assets/starbase-launch-site-ground.svg +1 -0
- package/dist/assets/starbase-launch-site-ground.thick.svg +1 -0
- package/dist/assets/starbase-launch-site-on-pad.glb +0 -0
- package/dist/assets/starbase-launch-site-on-pad.painted.svg +1 -0
- package/dist/assets/starbase-launch-site-on-pad.svg +1 -0
- package/dist/assets/starbase-launch-site-on-pad.thick.svg +1 -0
- package/dist/assets/starbase-launch-site-pads.glb +0 -0
- package/dist/assets/starbase-launch-site-pads.painted.svg +1 -0
- package/dist/assets/starbase-launch-site-pads.svg +1 -0
- package/dist/assets/starbase-launch-site-pads.thick.svg +1 -0
- package/dist/assets/starbase-launch-site-tank-farm.glb +0 -0
- package/dist/assets/starbase-launch-site-tank-farm.painted.svg +1 -0
- package/dist/assets/starbase-launch-site-tank-farm.svg +1 -0
- package/dist/assets/starbase-launch-site-tank-farm.thick.svg +1 -0
- package/dist/assets/starbase-launch-site.glb +0 -0
- package/dist/assets/starbase-launch-site.painted.svg +1 -0
- package/dist/assets/starbase-launch-site.svg +1 -0
- package/dist/assets/starbase-launch-site.thick.svg +1 -0
- package/dist/assets/starship-2019.painted.svg +1 -1
- package/dist/assets/starship-2019.svg +1 -1
- package/dist/assets/starship-2019.thick.svg +1 -1
- package/dist/assets/starship-v1-apart.painted.svg +1 -1
- package/dist/assets/starship-v1-apart.svg +1 -1
- package/dist/assets/starship-v1-apart.thick.svg +1 -1
- package/dist/assets/starship-v1-booster.painted.svg +1 -1
- package/dist/assets/starship-v1-booster.svg +1 -1
- package/dist/assets/starship-v1-booster.thick.svg +1 -1
- package/dist/assets/starship-v1-flight1-apart.painted.svg +1 -1
- package/dist/assets/starship-v1-flight1-apart.svg +1 -1
- package/dist/assets/starship-v1-flight1-apart.thick.svg +1 -1
- package/dist/assets/starship-v1-flight1-booster.painted.svg +1 -1
- package/dist/assets/starship-v1-flight1-booster.svg +1 -1
- package/dist/assets/starship-v1-flight1-booster.thick.svg +1 -1
- package/dist/assets/starship-v1-flight1-ship.painted.svg +1 -1
- package/dist/assets/starship-v1-flight1-ship.svg +1 -1
- package/dist/assets/starship-v1-flight1-ship.thick.svg +1 -1
- package/dist/assets/starship-v1-flight1.painted.svg +1 -1
- package/dist/assets/starship-v1-flight1.svg +1 -1
- package/dist/assets/starship-v1-flight1.thick.svg +1 -1
- package/dist/assets/starship-v1-ship.painted.svg +1 -1
- package/dist/assets/starship-v1-ship.svg +1 -1
- package/dist/assets/starship-v1-ship.thick.svg +1 -1
- package/dist/assets/starship-v1.painted.svg +1 -1
- package/dist/assets/starship-v1.svg +1 -1
- package/dist/assets/starship-v1.thick.svg +1 -1
- package/dist/assets/starship-v2-apart.painted.svg +1 -1
- package/dist/assets/starship-v2-apart.svg +1 -1
- package/dist/assets/starship-v2-apart.thick.svg +1 -1
- package/dist/assets/starship-v2-booster.painted.svg +1 -1
- package/dist/assets/starship-v2-booster.svg +1 -1
- package/dist/assets/starship-v2-booster.thick.svg +1 -1
- package/dist/assets/starship-v2-ship.painted.svg +1 -1
- package/dist/assets/starship-v2-ship.svg +1 -1
- package/dist/assets/starship-v2-ship.thick.svg +1 -1
- package/dist/assets/starship-v2.painted.svg +1 -1
- package/dist/assets/starship-v2.svg +1 -1
- package/dist/assets/starship-v2.thick.svg +1 -1
- package/dist/assets/starship-v3-apart.painted.svg +1 -1
- package/dist/assets/starship-v3-apart.svg +1 -1
- package/dist/assets/starship-v3-apart.thick.svg +1 -1
- package/dist/assets/starship-v3-booster.painted.svg +1 -1
- package/dist/assets/starship-v3-booster.svg +1 -1
- package/dist/assets/starship-v3-booster.thick.svg +1 -1
- package/dist/assets/starship-v3-ship.painted.svg +1 -1
- package/dist/assets/starship-v3-ship.svg +1 -1
- package/dist/assets/starship-v3-ship.thick.svg +1 -1
- package/dist/assets/starship-v3.painted.svg +1 -1
- package/dist/assets/starship-v3.svg +1 -1
- package/dist/assets/starship-v3.thick.svg +1 -1
- package/dist/assets/starship-v4-apart.painted.svg +1 -1
- package/dist/assets/starship-v4-apart.svg +1 -1
- package/dist/assets/starship-v4-apart.thick.svg +1 -1
- package/dist/assets/starship-v4-booster.painted.svg +1 -1
- package/dist/assets/starship-v4-booster.svg +1 -1
- package/dist/assets/starship-v4-booster.thick.svg +1 -1
- package/dist/assets/starship-v4-ship.painted.svg +1 -1
- package/dist/assets/starship-v4-ship.svg +1 -1
- package/dist/assets/starship-v4-ship.thick.svg +1 -1
- package/dist/assets/starship-v4.painted.svg +1 -1
- package/dist/assets/starship-v4.svg +1 -1
- package/dist/assets/starship-v4.thick.svg +1 -1
- package/dist/attrs.d.ts +27 -0
- package/dist/attrs.js +31 -0
- package/dist/build/index.d.ts +7 -2
- package/dist/build/index.js +28 -4
- package/dist/build/lineup.js +14 -4
- package/dist/builder.d.ts +22 -0
- package/dist/builder.js +103 -0
- package/dist/data/apollosoyuz.d.ts +6 -0
- package/dist/data/apollosoyuz.js +28 -0
- package/dist/data/credits.d.ts +19 -1
- package/dist/data/credits.js +30 -1
- package/dist/data/dragon.js +35 -0
- package/dist/data/electron.d.ts +2 -0
- package/dist/data/electron.js +23 -0
- package/dist/data/falcon.js +2 -2
- package/dist/data/falcon1.d.ts +4 -0
- package/dist/data/falcon1.js +51 -0
- package/dist/data/flight-log.d.ts +18 -0
- package/dist/data/flight-log.js +23 -0
- package/dist/data/flights.d.ts +49 -0
- package/dist/data/flights.js +177 -0
- package/dist/data/gemini.d.ts +3 -0
- package/dist/data/gemini.js +22 -0
- package/dist/data/hubble.d.ts +3 -0
- package/dist/data/hubble.js +23 -0
- package/dist/data/iss.d.ts +5 -0
- package/dist/data/iss.js +25 -0
- package/dist/data/jupiterc.d.ts +3 -0
- package/dist/data/jupiterc.js +22 -0
- package/dist/data/landing.d.ts +3 -0
- package/dist/data/landing.js +51 -0
- package/dist/data/lunarmodule.d.ts +4 -0
- package/dist/data/lunarmodule.js +27 -0
- package/dist/data/makers.d.ts +16 -0
- package/dist/data/makers.js +29 -0
- package/dist/data/mercury.d.ts +3 -0
- package/dist/data/mercury.js +22 -0
- package/dist/data/newglenn.d.ts +2 -0
- package/dist/data/newglenn.js +23 -0
- package/dist/data/saturn.d.ts +2 -0
- package/dist/data/saturn.js +32 -0
- package/dist/data/shuttle.d.ts +5 -0
- package/dist/data/shuttle.js +52 -0
- package/dist/data/sls.d.ts +4 -0
- package/dist/data/sls.js +36 -0
- package/dist/data/sources.d.ts +348 -2
- package/dist/data/sources.js +45 -1
- package/dist/data/soyuz.d.ts +3 -0
- package/dist/data/soyuz.js +33 -0
- package/dist/data/starbase.d.ts +2 -0
- package/dist/data/starbase.js +30 -0
- package/dist/data/tower.d.ts +3 -0
- package/dist/data/tower.js +26 -0
- package/dist/data/types.d.ts +7 -1
- package/dist/draw/plume.d.ts +8 -0
- package/dist/draw/plume.js +71 -0
- package/dist/draw/svg.d.ts +1 -1
- package/dist/draw/svg.js +3 -3
- package/dist/element/ground.d.ts +15 -0
- package/dist/element/ground.js +95 -0
- package/dist/element/plumes.d.ts +38 -0
- package/dist/element/plumes.js +208 -0
- package/dist/element/scene.d.ts +39 -5
- package/dist/element/scene.js +250 -7
- package/dist/element.d.ts +50 -1
- package/dist/element.js +201 -13
- package/dist/embed.d.ts +26 -0
- package/dist/embed.js +135 -0
- package/dist/engines.d.ts +44 -0
- package/dist/engines.js +79 -0
- package/dist/fit.d.ts +2 -0
- package/dist/fit.js +4 -3
- package/dist/flight.d.ts +67 -0
- package/dist/flight.js +124 -0
- package/dist/flightbar.d.ts +22 -0
- package/dist/flightbar.js +176 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.js +9 -0
- package/dist/layout.js +1 -1
- package/dist/looks.d.ts +1 -1
- package/dist/looks.js +2 -0
- package/dist/model/apollosoyuz.d.ts +2 -0
- package/dist/model/apollosoyuz.js +46 -0
- package/dist/model/dragoninside.d.ts +2 -0
- package/dist/model/dragoninside.js +67 -0
- package/dist/model/electron.d.ts +2 -0
- package/dist/model/electron.js +35 -0
- package/dist/model/falcon.d.ts +2 -0
- package/dist/model/falcon.js +4 -0
- package/dist/model/falcon1.d.ts +2 -0
- package/dist/model/falcon1.js +53 -0
- package/dist/model/gemini.d.ts +2 -0
- package/dist/model/gemini.js +28 -0
- package/dist/model/hubble.d.ts +2 -0
- package/dist/model/hubble.js +28 -0
- package/dist/model/iss.d.ts +2 -0
- package/dist/model/iss.js +32 -0
- package/dist/model/jupiterc.d.ts +2 -0
- package/dist/model/jupiterc.js +24 -0
- package/dist/model/kit.d.ts +36 -0
- package/dist/model/kit.js +95 -0
- package/dist/model/landing.d.ts +3 -0
- package/dist/model/landing.js +81 -0
- package/dist/model/lunarmodule.d.ts +2 -0
- package/dist/model/lunarmodule.js +43 -0
- package/dist/model/materials.d.ts +42 -0
- package/dist/model/materials.js +7 -0
- package/dist/model/mercury.d.ts +2 -0
- package/dist/model/mercury.js +19 -0
- package/dist/model/newglenn.d.ts +2 -0
- package/dist/model/newglenn.js +43 -0
- package/dist/model/pieces.d.ts +2 -0
- package/dist/model/pieces.js +2 -2
- package/dist/model/registry.js +63 -0
- package/dist/model/saturn.d.ts +2 -0
- package/dist/model/saturn.js +122 -0
- package/dist/model/shuttle.d.ts +2 -0
- package/dist/model/shuttle.js +111 -0
- package/dist/model/sls.d.ts +2 -0
- package/dist/model/sls.js +83 -0
- package/dist/model/soyuz.d.ts +2 -0
- package/dist/model/soyuz.js +75 -0
- package/dist/model/stacks.d.ts +39 -0
- package/dist/model/stacks.js +1 -0
- package/dist/model/starbase.d.ts +2 -0
- package/dist/model/starbase.js +108 -0
- package/dist/model/tower.d.ts +6 -0
- package/dist/model/tower.js +89 -0
- package/dist/parts.d.ts +3 -2
- package/dist/react.d.ts +14 -6
- package/dist/rockets.d.ts +5 -0
- package/dist/rockets.js +78 -7
- package/dist/spin.d.ts +11 -0
- package/dist/spin.js +11 -0
- package/package.json +93 -18
package/dist/element.js
CHANGED
|
@@ -2,18 +2,22 @@
|
|
|
2
2
|
// crossfading in over it; drag to turn, keyboard, tilt on phones, a slow spin, reduced motion; the drawing stays on no WebGL, Save-Data or any failure. Importing this file defines the elements. three.js is
|
|
3
3
|
// loaded only when a 3D view is wanted, and a licensed model only when the painted look asks for one.
|
|
4
4
|
import { build, FitError } from "./build/index.js";
|
|
5
|
+
import { bellsOf, enginesWanted, pickBells } from "./engines.js";
|
|
6
|
+
import { engineChart } from "./draw/plume.js";
|
|
7
|
+
import { burnsOf, FlightClock, flightOf, frameAt, phaseAt, phasePosition } from "./flight.js";
|
|
8
|
+
import { defineUchusenFlight, UchusenFlight } from "./flightbar.js";
|
|
5
9
|
import { lineupSvg } from "./build/lineup.js";
|
|
6
10
|
import { CROSSFADE_MS, REDUCED_FADE_MS, revealDelay } from "./crossfade.js";
|
|
7
11
|
import { cleanView, turnedBy, VIEWS } from "./framing.js";
|
|
8
12
|
import { cleanShow } from "./layout.js";
|
|
9
13
|
import { cleanLook } from "./looks.js";
|
|
10
|
-
import { ROCKETS } from "./rockets.js";
|
|
14
|
+
import { ROCKETS, SLOT_NAMES } from "./rockets.js";
|
|
11
15
|
import { tiltMode, tiltTurn } from "./tilt.js";
|
|
16
|
+
import { spinOf } from "./spin.js";
|
|
12
17
|
const HTMLBase = typeof HTMLElement === "undefined" ? class {
|
|
13
18
|
} : HTMLElement;
|
|
14
19
|
/** A view out of sight keeps its WebGL canvas this long before letting it go (a browser allows only a few at a time). */
|
|
15
20
|
const RELEASE_MS = 30_000;
|
|
16
|
-
const DEFAULT_SPIN = { seconds: 180, way: "cw" };
|
|
17
21
|
/** The drawing, followed along a turn, is made again at most this often. */
|
|
18
22
|
const PLACE_MS = 50;
|
|
19
23
|
let assetBase = null;
|
|
@@ -83,7 +87,7 @@ function whyNot(mode) {
|
|
|
83
87
|
return "";
|
|
84
88
|
}
|
|
85
89
|
export class UchusenRocket extends HTMLBase {
|
|
86
|
-
static observedAttributes = ["rocket", "variant", "show", "look", "view", "build", "mode", "assets", "spin", "way", "label"];
|
|
90
|
+
static observedAttributes = ["rocket", "variant", "show", "look", "view", "build", "mode", "assets", "spin", "way", "label", "engines", "phase"];
|
|
87
91
|
descriptionValue = null;
|
|
88
92
|
picture = null;
|
|
89
93
|
holder = null;
|
|
@@ -106,6 +110,13 @@ export class UchusenRocket extends HTMLBase {
|
|
|
106
110
|
onScreen = true;
|
|
107
111
|
drawn = { key: "", box: [0, 0, 1, 1] };
|
|
108
112
|
tiltCleanups = [];
|
|
113
|
+
clock = null;
|
|
114
|
+
flightFrame = 0;
|
|
115
|
+
flightLast = 0;
|
|
116
|
+
flightDrawn = -1;
|
|
117
|
+
noted = { index: -1, at: 0 };
|
|
118
|
+
phaseSeen = null;
|
|
119
|
+
flightSeen = null;
|
|
109
120
|
/** What is showing now. */
|
|
110
121
|
get state() {
|
|
111
122
|
return this.stateNow;
|
|
@@ -173,15 +184,22 @@ export class UchusenRocket extends HTMLBase {
|
|
|
173
184
|
seen = () => {
|
|
174
185
|
if (!document.hidden && this.stale)
|
|
175
186
|
this.place();
|
|
187
|
+
this.kickFlight();
|
|
176
188
|
};
|
|
189
|
+
/** A reader who changes the setting while the page is open is followed at once. */
|
|
190
|
+
motionChanged = () => this.queue();
|
|
191
|
+
motion = null;
|
|
177
192
|
connectedCallback() {
|
|
178
193
|
if (!this.shadowRoot)
|
|
179
194
|
adopt(this.attachShadow({ mode: "open" }), CSS, rocketSheet);
|
|
180
195
|
document.addEventListener("visibilitychange", this.seen);
|
|
196
|
+
this.motion = typeof matchMedia === "function" ? matchMedia("(prefers-reduced-motion: reduce)") : null;
|
|
197
|
+
this.motion?.addEventListener("change", this.motionChanged);
|
|
181
198
|
this.queue();
|
|
182
199
|
}
|
|
183
200
|
disconnectedCallback() {
|
|
184
201
|
document.removeEventListener("visibilitychange", this.seen);
|
|
202
|
+
this.motion?.removeEventListener("change", this.motionChanged);
|
|
185
203
|
this.teardown();
|
|
186
204
|
this.key = "";
|
|
187
205
|
}
|
|
@@ -190,15 +208,16 @@ export class UchusenRocket extends HTMLBase {
|
|
|
190
208
|
return;
|
|
191
209
|
if (name === "spin" || name === "way")
|
|
192
210
|
this.viewer?.setSpin(this.spin());
|
|
193
|
-
else
|
|
211
|
+
else {
|
|
212
|
+
// choosing what to show leaves the flight
|
|
213
|
+
if (name === "show")
|
|
214
|
+
this.endFlight();
|
|
194
215
|
this.queue();
|
|
216
|
+
}
|
|
195
217
|
}
|
|
196
218
|
// ---------------------------------------------------------------------------------------------------------------------------------
|
|
197
219
|
spin() {
|
|
198
|
-
|
|
199
|
-
const named = { off: 0, slow: 180, medium: 67, fast: 20 };
|
|
200
|
-
const seconds = raw === null ? DEFAULT_SPIN.seconds : (named[raw] ?? (Number.isFinite(Number(raw)) ? Math.max(0, Number(raw)) : DEFAULT_SPIN.seconds));
|
|
201
|
-
return { seconds, way: this.getAttribute("way") === "ccw" ? "ccw" : "cw" };
|
|
220
|
+
return spinOf(this.getAttribute("spin"), this.getAttribute("way"));
|
|
202
221
|
}
|
|
203
222
|
descriptionNow() {
|
|
204
223
|
if (this.descriptionValue)
|
|
@@ -233,6 +252,8 @@ export class UchusenRocket extends HTMLBase {
|
|
|
233
252
|
window.clearTimeout(this.releaseTimer);
|
|
234
253
|
window.clearTimeout(this.revealTimer);
|
|
235
254
|
window.cancelAnimationFrame(this.placeFrame);
|
|
255
|
+
window.cancelAnimationFrame(this.flightFrame);
|
|
256
|
+
this.flightFrame = 0;
|
|
236
257
|
this.stopTilt();
|
|
237
258
|
this.viewer?.dispose();
|
|
238
259
|
this.viewer = null;
|
|
@@ -257,6 +278,129 @@ export class UchusenRocket extends HTMLBase {
|
|
|
257
278
|
const viewName = cleanView(this.getAttribute("view"));
|
|
258
279
|
return { look, show, viewName, angle: VIEWS[viewName] };
|
|
259
280
|
}
|
|
281
|
+
// ---------------------------------------------------------------------------------------------------------------------------------
|
|
282
|
+
// the flight
|
|
283
|
+
/** The flight a page gives for what is showing, or null: a custom build never has one. */
|
|
284
|
+
get flight() {
|
|
285
|
+
const report = this.builtNow?.report;
|
|
286
|
+
return report && !report.custom && report.variant ? flightOf(report.variant.rocket, report.variant.id) : null;
|
|
287
|
+
}
|
|
288
|
+
/** Where the timeline is: `active` once it has been started or moved, until `endFlight`. */
|
|
289
|
+
get flightState() {
|
|
290
|
+
const clock = this.clock;
|
|
291
|
+
const flight = this.flight;
|
|
292
|
+
return { active: clock !== null, playing: clock?.playing ?? false, ended: clock?.ended ?? false, position: clock?.position ?? 0, phase: clock ? phaseAt(clock.flight, clock.position).phase.id : (flight?.phases[0].id ?? "") };
|
|
293
|
+
}
|
|
294
|
+
/** Plays the flight from where it is. It stands still out of sight, and does not play at all for a reader who asked for reduced motion: `seek` still moves it, by hand. */
|
|
295
|
+
play() {
|
|
296
|
+
const flight = this.flight;
|
|
297
|
+
if (!flight || media("(prefers-reduced-motion: reduce)"))
|
|
298
|
+
return;
|
|
299
|
+
this.clock ??= new FlightClock(flight);
|
|
300
|
+
this.clock.play();
|
|
301
|
+
this.flightMoved();
|
|
302
|
+
}
|
|
303
|
+
pause() {
|
|
304
|
+
this.clock?.pause();
|
|
305
|
+
this.flightMoved();
|
|
306
|
+
}
|
|
307
|
+
/** Moves the timeline to a place, where 0 is the first phase, 1 the next and so on: `2.5` is half way from the third to the fourth. */
|
|
308
|
+
seek(position) {
|
|
309
|
+
const flight = this.flight;
|
|
310
|
+
if (!flight)
|
|
311
|
+
return;
|
|
312
|
+
this.clock ??= new FlightClock(flight);
|
|
313
|
+
this.clock.seek(position);
|
|
314
|
+
this.flightMoved();
|
|
315
|
+
}
|
|
316
|
+
/** Leaves the flight: the rocket as it was. */
|
|
317
|
+
endFlight() {
|
|
318
|
+
if (!this.clock)
|
|
319
|
+
return;
|
|
320
|
+
this.clock = null;
|
|
321
|
+
this.phaseSeen = null;
|
|
322
|
+
window.cancelAnimationFrame(this.flightFrame);
|
|
323
|
+
this.flightFrame = 0;
|
|
324
|
+
this.viewer?.setFlight(null);
|
|
325
|
+
this.place();
|
|
326
|
+
this.mark();
|
|
327
|
+
this.noteFlight(true);
|
|
328
|
+
}
|
|
329
|
+
/** For each part with engines, which burn: at a named phase, where the timeline is, or else as the attributes have them. */
|
|
330
|
+
engineCharts(phaseId = null) {
|
|
331
|
+
const built = this.builtNow;
|
|
332
|
+
if (!built)
|
|
333
|
+
return [];
|
|
334
|
+
const flight = this.flight;
|
|
335
|
+
const fromPhase = phaseId && flight ? flight.phases.find((phase) => phase.id === phaseId) : null;
|
|
336
|
+
const phase = fromPhase ?? (this.clock ? phaseAt(this.clock.flight, this.clock.position).phase : null);
|
|
337
|
+
const burns = phase ? burnsOf(phase) : null;
|
|
338
|
+
return built.parts.flatMap((part) => {
|
|
339
|
+
const bells = bellsOf(part.pieces);
|
|
340
|
+
if (bells.length === 0)
|
|
341
|
+
return [];
|
|
342
|
+
const fired = pickBells(bells, burns ? (burns[part.slot] ?? 0) : this.engineLights() ? bells.length : 0);
|
|
343
|
+
const name = SLOT_NAMES[part.slot] ?? part.slot;
|
|
344
|
+
const figure = phase?.burns[part.slot]?.engines;
|
|
345
|
+
const words = `${name}: ${figure && figure.value === null ? `${fired.length} drawn, no source says how many` : `${fired.length} of ${bells.length}`}`;
|
|
346
|
+
return [{ slot: part.slot, burning: fired.length, total: bells.length, words, svg: engineChart(bells, fired, words) }];
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
flightMoved() {
|
|
350
|
+
if (this.clock)
|
|
351
|
+
this.viewer?.setFlight(this.clock);
|
|
352
|
+
if (this.viewer)
|
|
353
|
+
this.noteFlight(true);
|
|
354
|
+
else {
|
|
355
|
+
this.place();
|
|
356
|
+
this.noteFlight(true);
|
|
357
|
+
this.kickFlight();
|
|
358
|
+
}
|
|
359
|
+
this.mark();
|
|
360
|
+
}
|
|
361
|
+
/** With no 3D view the drawing follows the timeline, by one frame request at a time, at most 20 drawings a second, never out of sight. */
|
|
362
|
+
kickFlight() {
|
|
363
|
+
if (this.viewer || this.flightFrame || !this.clock?.playing || !this.onScreen || document.hidden)
|
|
364
|
+
return;
|
|
365
|
+
this.flightLast = 0;
|
|
366
|
+
this.flightFrame = window.requestAnimationFrame(this.flightStep);
|
|
367
|
+
}
|
|
368
|
+
flightStep = (time) => {
|
|
369
|
+
this.flightFrame = 0;
|
|
370
|
+
const clock = this.clock;
|
|
371
|
+
if (!clock?.playing || this.viewer || !this.onScreen || document.hidden)
|
|
372
|
+
return;
|
|
373
|
+
if (this.flightLast)
|
|
374
|
+
clock.advance(Math.min(0.1, (time - this.flightLast) / 1000));
|
|
375
|
+
this.flightLast = time;
|
|
376
|
+
if (phaseAt(clock.flight, clock.position).index !== this.flightDrawn) {
|
|
377
|
+
this.flightDrawn = phaseAt(clock.flight, clock.position).index;
|
|
378
|
+
this.place();
|
|
379
|
+
}
|
|
380
|
+
this.noteFlight(!clock.playing);
|
|
381
|
+
if (clock.playing)
|
|
382
|
+
this.flightFrame = window.requestAnimationFrame(this.flightStep);
|
|
383
|
+
};
|
|
384
|
+
/** Tells the page where the timeline is: at once for a new phase or a stop, otherwise at most 8 times a second. */
|
|
385
|
+
noteFlight(now = false) {
|
|
386
|
+
const clock = this.clock;
|
|
387
|
+
const index = clock ? phaseAt(clock.flight, clock.position).index : -1;
|
|
388
|
+
const time = performance.now();
|
|
389
|
+
if (!now && index === this.noted.index && time - this.noted.at < 125)
|
|
390
|
+
return;
|
|
391
|
+
this.noted = { index, at: time };
|
|
392
|
+
this.dataset.phase = this.flightState.active ? this.flightState.phase : "";
|
|
393
|
+
this.emit("uchusen-flight", this.flightState);
|
|
394
|
+
}
|
|
395
|
+
/** Whether the engines are lit: `engines="on"`, and never for a reader who asked for reduced motion. */
|
|
396
|
+
engineLights() {
|
|
397
|
+
return enginesWanted(this.getAttribute("engines"), media("(prefers-reduced-motion: reduce)"));
|
|
398
|
+
}
|
|
399
|
+
/** Hands the 3D view what the attributes say about the engines, and its reader's motion setting. */
|
|
400
|
+
lightViewer(viewer) {
|
|
401
|
+
viewer.setReduced(media("(prefers-reduced-motion: reduce)"));
|
|
402
|
+
viewer.setEngines(this.engineLights() ? "full" : null);
|
|
403
|
+
}
|
|
260
404
|
update() {
|
|
261
405
|
const description = this.descriptionNow();
|
|
262
406
|
const key = JSON.stringify(description);
|
|
@@ -275,9 +419,31 @@ export class UchusenRocket extends HTMLBase {
|
|
|
275
419
|
if (!this.picture)
|
|
276
420
|
this.renderShell();
|
|
277
421
|
void this.applyRocket();
|
|
422
|
+
this.settleFlight();
|
|
278
423
|
return;
|
|
279
424
|
}
|
|
280
425
|
this.applySettings();
|
|
426
|
+
this.settleFlight();
|
|
427
|
+
}
|
|
428
|
+
/** After a change: a timeline of another rocket ends, and the `phase` attribute moves it. */
|
|
429
|
+
settleFlight() {
|
|
430
|
+
const flight = this.flight;
|
|
431
|
+
if (this.clock && this.clock.flight.id !== flight?.id)
|
|
432
|
+
this.endFlight();
|
|
433
|
+
if ((flight?.id ?? null) !== this.flightSeen) {
|
|
434
|
+
this.flightSeen = flight?.id ?? null;
|
|
435
|
+
this.phaseSeen = null;
|
|
436
|
+
this.noteFlight(true);
|
|
437
|
+
}
|
|
438
|
+
const asked = this.getAttribute("phase");
|
|
439
|
+
if (asked !== this.phaseSeen) {
|
|
440
|
+
this.phaseSeen = asked;
|
|
441
|
+
const place = flight ? phasePosition(flight, asked) : null;
|
|
442
|
+
if (place !== null)
|
|
443
|
+
this.seek(place);
|
|
444
|
+
else if (asked === null)
|
|
445
|
+
this.endFlight();
|
|
446
|
+
}
|
|
281
447
|
}
|
|
282
448
|
renderShell() {
|
|
283
449
|
const root = this.shadowRoot;
|
|
@@ -306,15 +472,18 @@ export class UchusenRocket extends HTMLBase {
|
|
|
306
472
|
redraw() {
|
|
307
473
|
if (!this.builtNow || !this.drawing)
|
|
308
474
|
return;
|
|
309
|
-
const { look, show, angle } = this.settings(this.builtNow);
|
|
475
|
+
const { look, show: chosen, angle } = this.settings(this.builtNow);
|
|
476
|
+
const flying = this.clock ? frameAt(this.clock.flight, this.clock.position, this.builtNow.parts.map((part) => ({ slot: part.slot, baseY: 0 })), 1) : null;
|
|
477
|
+
const show = flying ? (flying.separated ? "apart" : "together") : chosen;
|
|
310
478
|
// when a 3D view is showing, a drawing of the same angle is ready behind it
|
|
311
479
|
const from = this.driven ? turnedBy(angle, this.driven.yaw, this.driven.tilt) : (this.viewer?.currentAngle() ?? angle);
|
|
312
480
|
const label = this.getAttribute("label") ?? this.builtNow.report.label;
|
|
313
|
-
const
|
|
481
|
+
const lit = flying ? (media("(prefers-reduced-motion: reduce)") ? false : flying.burns) : this.engineLights();
|
|
482
|
+
const key = `${this.key}|${look}|${show}|${from.az.toFixed(2)}|${from.el.toFixed(2)}|${label}|${flying ? flying.index : ""}|${JSON.stringify(lit)}`;
|
|
314
483
|
let node = this.drawing.firstElementChild;
|
|
315
484
|
if (key !== this.drawn.key || !node) {
|
|
316
485
|
const template = document.createElement("template");
|
|
317
|
-
template.innerHTML = this.builtNow.svg({ look, show, view: from });
|
|
486
|
+
template.innerHTML = this.builtNow.svg({ look, show, view: from, engines: lit });
|
|
318
487
|
node = template.content.firstElementChild;
|
|
319
488
|
if (!node)
|
|
320
489
|
return;
|
|
@@ -337,6 +506,8 @@ export class UchusenRocket extends HTMLBase {
|
|
|
337
506
|
return;
|
|
338
507
|
const { look, show, viewName } = this.settings(this.builtNow);
|
|
339
508
|
this.dataset.look = look;
|
|
509
|
+
this.dataset.engines = this.engineLights() ? "on" : "off";
|
|
510
|
+
this.dataset.flight = this.flight?.id ?? "";
|
|
340
511
|
this.dataset.show = show;
|
|
341
512
|
this.dataset.viewAngle = viewName;
|
|
342
513
|
this.dataset.variant = this.builtNow.report.variant?.id ?? "";
|
|
@@ -354,6 +525,8 @@ export class UchusenRocket extends HTMLBase {
|
|
|
354
525
|
const from = viewName !== this.lastView || this.driven ? angle : this.viewer.currentAngle();
|
|
355
526
|
this.lastView = viewName;
|
|
356
527
|
await this.viewer.load(this.builtNow, show, look, from);
|
|
528
|
+
if (this.viewer)
|
|
529
|
+
this.lightViewer(this.viewer);
|
|
357
530
|
this.emit("uchusen-change", { report: this.builtNow.report });
|
|
358
531
|
}
|
|
359
532
|
}
|
|
@@ -366,6 +539,7 @@ export class UchusenRocket extends HTMLBase {
|
|
|
366
539
|
if (this.viewer) {
|
|
367
540
|
this.viewer.setLook(look);
|
|
368
541
|
this.viewer.setShow(show);
|
|
542
|
+
this.lightViewer(this.viewer);
|
|
369
543
|
if (viewName !== this.lastView)
|
|
370
544
|
this.viewer.setAngle(angle, true);
|
|
371
545
|
this.viewer.setHome(angle);
|
|
@@ -387,6 +561,8 @@ export class UchusenRocket extends HTMLBase {
|
|
|
387
561
|
this.onScreen = seen.isIntersecting;
|
|
388
562
|
if (seen.isIntersecting && this.stale)
|
|
389
563
|
this.place();
|
|
564
|
+
if (seen.isIntersecting)
|
|
565
|
+
this.kickFlight();
|
|
390
566
|
if (reason)
|
|
391
567
|
return;
|
|
392
568
|
if (seen.isIntersecting) {
|
|
@@ -404,6 +580,7 @@ export class UchusenRocket extends HTMLBase {
|
|
|
404
580
|
this.viewer?.dispose();
|
|
405
581
|
this.viewer = null;
|
|
406
582
|
this.stopTilt();
|
|
583
|
+
this.kickFlight();
|
|
407
584
|
if (generation === this.generation) {
|
|
408
585
|
this.setState("picture");
|
|
409
586
|
if (this.driven)
|
|
@@ -422,6 +599,7 @@ export class UchusenRocket extends HTMLBase {
|
|
|
422
599
|
this.stopTilt();
|
|
423
600
|
this.viewer?.dispose();
|
|
424
601
|
this.viewer = null;
|
|
602
|
+
this.kickFlight();
|
|
425
603
|
this.setState("fallback", why);
|
|
426
604
|
this.emit("uchusen-fallback", { reason: why });
|
|
427
605
|
}
|
|
@@ -448,16 +626,25 @@ export class UchusenRocket extends HTMLBase {
|
|
|
448
626
|
this.dataset.painted = state;
|
|
449
627
|
this.emit("uchusen-painted", { state });
|
|
450
628
|
},
|
|
629
|
+
onFlight: () => this.noteFlight(!this.clock?.playing),
|
|
451
630
|
});
|
|
452
631
|
this.viewer = made;
|
|
632
|
+
window.cancelAnimationFrame(this.flightFrame);
|
|
633
|
+
this.flightFrame = 0;
|
|
634
|
+
if (this.clock)
|
|
635
|
+
made.setFlight(this.clock);
|
|
453
636
|
if (this.driven)
|
|
454
637
|
made.drive(this.driven);
|
|
455
638
|
made.setVisible(true);
|
|
456
639
|
const { look, show, viewName, angle } = this.settings(this.builtNow ?? built);
|
|
457
640
|
this.lastView = viewName;
|
|
458
641
|
await made.load(this.builtNow ?? built, show, look, angle);
|
|
459
|
-
if (generation !== this.generation)
|
|
642
|
+
if (generation !== this.generation || this.viewer !== made)
|
|
460
643
|
return;
|
|
644
|
+
const now = this.settings(this.builtNow ?? built);
|
|
645
|
+
if (now.show !== show)
|
|
646
|
+
made.setShow(now.show);
|
|
647
|
+
this.lightViewer(made);
|
|
461
648
|
made.setSpin(this.spin());
|
|
462
649
|
const wait = revealDelay(this.shownAt, performance.now(), reduced);
|
|
463
650
|
this.revealTimer = window.setTimeout(() => {
|
|
@@ -575,6 +762,7 @@ export function defineUchusenRocket() {
|
|
|
575
762
|
customElements.define("uchusen-rocket", UchusenRocket);
|
|
576
763
|
if (!customElements.get("uchusen-lineup"))
|
|
577
764
|
customElements.define("uchusen-lineup", UchusenLineup);
|
|
765
|
+
defineUchusenFlight();
|
|
578
766
|
}
|
|
579
767
|
defineUchusenRocket();
|
|
580
|
-
export { ROCKETS };
|
|
768
|
+
export { ROCKETS, UchusenFlight };
|
package/dist/embed.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type RocketOptions } from "./attrs.ts";
|
|
2
|
+
export declare const EMBED_KINDS: readonly ["element", "iframe", "module", "svg", "data", "link"];
|
|
3
|
+
export type EmbedKind = (typeof EMBED_KINDS)[number];
|
|
4
|
+
export interface EmbedSettings {
|
|
5
|
+
/** The address of the published demo, where `embed.html` is. */
|
|
6
|
+
site?: string;
|
|
7
|
+
/** The CDN or package path the element is loaded from. */
|
|
8
|
+
cdn?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const SITE = "https://johnmorrisdotca.github.io/uchusen-rockets/";
|
|
11
|
+
export declare const CDN = "https://cdn.jsdelivr.net/npm/@johnmorrisdotca/uchusen-rockets@0";
|
|
12
|
+
/** The three.js a page with no bundler takes from the CDN: the version this package is built and tested with. */
|
|
13
|
+
export declare const THREE_VERSION = "0.186.1";
|
|
14
|
+
/** What an embed asks of the page around it, in words: a line for the demo to show. */
|
|
15
|
+
export declare function embedNote(kind: EmbedKind, options: RocketOptions): string;
|
|
16
|
+
/**
|
|
17
|
+
* The CC BY line for a painted rocket, generated from the parts that are showing.
|
|
18
|
+
* Empty when the look is not painted, or when those parts are this package's own paint.
|
|
19
|
+
*/
|
|
20
|
+
export declare function paintedCredit(options: RocketOptions): string;
|
|
21
|
+
/**
|
|
22
|
+
* The shipped picture of these options, under the package's `dist/assets/`: `starship-v3.svg`, `falcon-9-block-5-apart.thick.svg`. These are drawn from the default view, with no flames. Null for a custom build, which has no file, or a variant, part or look that does not exist.
|
|
23
|
+
*/
|
|
24
|
+
export declare function assetPathOf(options: RocketOptions): string | null;
|
|
25
|
+
/** The text of one embed. The `module` one imports the package; the `data` one is a `data:image/svg+xml` address for an `<img>`. */
|
|
26
|
+
export declare function embedCode(options: RocketOptions, kind?: EmbedKind, settings?: EmbedSettings): string;
|
package/dist/embed.js
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
// `embedCode`: the text to put a rocket in a page, in each of the six ways: the custom element from a CDN, an iframe of `embed.html`, a JavaScript module, the SVG itself, a data address, and a link to the shipped picture.
|
|
2
|
+
// A painted rocket's credit is generated from the parts that show, and every painted form carries it.
|
|
3
|
+
import { build } from "./build/index.js";
|
|
4
|
+
import { creditLine } from "./data/credits.js";
|
|
5
|
+
import { check } from "./fit.js";
|
|
6
|
+
import { cleanView } from "./framing.js";
|
|
7
|
+
import { cleanShow, showsOf } from "./layout.js";
|
|
8
|
+
import { cleanLook, DEFAULT_LOOK } from "./looks.js";
|
|
9
|
+
import { attributesFromOptions, rocketToParams } from "./attrs.js";
|
|
10
|
+
export const EMBED_KINDS = ["element", "iframe", "module", "svg", "data", "link"];
|
|
11
|
+
export const SITE = "https://johnmorrisdotca.github.io/uchusen-rockets/";
|
|
12
|
+
export const CDN = "https://cdn.jsdelivr.net/npm/@johnmorrisdotca/uchusen-rockets@0";
|
|
13
|
+
/** The three.js a page with no bundler takes from the CDN: the version this package is built and tested with. */
|
|
14
|
+
export const THREE_VERSION = "0.186.1";
|
|
15
|
+
const THREE_CDN = `https://cdn.jsdelivr.net/npm/three@${THREE_VERSION}`;
|
|
16
|
+
const IMPORT_MAP = `<script type="importmap">\n { "imports": { "three": "${THREE_CDN}/build/three.module.js", "three/addons/": "${THREE_CDN}/examples/jsm/" } }\n</script>`;
|
|
17
|
+
const esc = (value) => value.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
18
|
+
const EMPTY_SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 640" width="480" height="640" role="img"></svg>`;
|
|
19
|
+
function descriptionOf(options) {
|
|
20
|
+
if (options.build) {
|
|
21
|
+
try {
|
|
22
|
+
const parsed = JSON.parse(options.build);
|
|
23
|
+
if (parsed && typeof parsed === "object" && typeof parsed.rocket === "string") {
|
|
24
|
+
return {
|
|
25
|
+
rocket: parsed.rocket,
|
|
26
|
+
...(typeof parsed.variant === "string" ? { variant: parsed.variant } : {}),
|
|
27
|
+
...(parsed.parts && typeof parsed.parts === "object" ? { parts: parsed.parts } : {}),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
// a build that is not JSON falls through to the named rocket
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return { rocket: options.rocket ?? "starship", ...(options.variant ? { variant: options.variant } : {}) };
|
|
36
|
+
}
|
|
37
|
+
/** What an embed asks of the page around it, in words: a line for the demo to show. */
|
|
38
|
+
export function embedNote(kind, options) {
|
|
39
|
+
const notes = {
|
|
40
|
+
element: "One script from the CDN and the tag. The import map names three.js, for the 3D view; a page with a bundler needs neither, only the package.",
|
|
41
|
+
iframe: "No script of your own. It draws the drawing at once, and the 3D view when the browser can. Add flight=1 to the address for the flight's controls.",
|
|
42
|
+
module: "The drawing from a script of your own, with no three.js.",
|
|
43
|
+
svg: "The drawing itself: nothing to load. Paste it in a page or save it as a file.",
|
|
44
|
+
data: "The drawing as an address, for an image tag or a stylesheet.",
|
|
45
|
+
link: options.view && options.view !== "three-quarter" ? "A link to the file in the package. Those show the three-quarter view, with no flames: use the SVG or data tab for this view." : "A link to the file in the package. Those show the three-quarter view, with no flames.",
|
|
46
|
+
};
|
|
47
|
+
return notes[kind];
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The CC BY line for a painted rocket, generated from the parts that are showing.
|
|
51
|
+
* Empty when the look is not painted, or when those parts are this package's own paint.
|
|
52
|
+
*/
|
|
53
|
+
export function paintedCredit(options) {
|
|
54
|
+
if (cleanLook(options.look) !== "painted")
|
|
55
|
+
return "";
|
|
56
|
+
const report = check(descriptionOf(options));
|
|
57
|
+
if (!report.ok)
|
|
58
|
+
return "";
|
|
59
|
+
const show = options.show;
|
|
60
|
+
const names = new Set(report.parts.filter(({ slot }) => !show || show === "together" || show === "apart" || show === slot).map(({ part }) => part.name));
|
|
61
|
+
return report.credits
|
|
62
|
+
.map((credit) => {
|
|
63
|
+
const used = credit.usedFor.filter((name) => names.has(name));
|
|
64
|
+
return used.length === 0 ? "" : `${used.join(", ")}: ${creditLine(credit.id)}`;
|
|
65
|
+
})
|
|
66
|
+
.filter((line) => line !== "")
|
|
67
|
+
.join("\n");
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* The shipped picture of these options, under the package's `dist/assets/`: `starship-v3.svg`, `falcon-9-block-5-apart.thick.svg`. These are drawn from the default view, with no flames. Null for a custom build, which has no file, or a variant, part or look that does not exist.
|
|
71
|
+
*/
|
|
72
|
+
export function assetPathOf(options) {
|
|
73
|
+
if (options.build)
|
|
74
|
+
return null;
|
|
75
|
+
const description = descriptionOf(options);
|
|
76
|
+
const report = check(description);
|
|
77
|
+
if (!report.ok || !report.variant || report.custom)
|
|
78
|
+
return null;
|
|
79
|
+
const slots = report.parts.map(({ slot }) => slot);
|
|
80
|
+
const shows = showsOf(slots);
|
|
81
|
+
const show = cleanShow(options.show, slots);
|
|
82
|
+
if (!shows.includes(show))
|
|
83
|
+
return null;
|
|
84
|
+
const look = cleanLook(options.look);
|
|
85
|
+
return `${report.variant.rocket}-${report.variant.id}${show === shows[0] ? "" : `-${show}`}${look === DEFAULT_LOOK ? "" : `.${look}`}.svg`;
|
|
86
|
+
}
|
|
87
|
+
function svgOptionsOf(options) {
|
|
88
|
+
return {
|
|
89
|
+
look: cleanLook(options.look),
|
|
90
|
+
view: cleanView(options.view),
|
|
91
|
+
...(options.show ? { show: options.show } : {}),
|
|
92
|
+
...(options.engines === "on" ? { engines: true } : {}),
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function drawingOf(options) {
|
|
96
|
+
try {
|
|
97
|
+
const drawn = build(descriptionOf(options)).svg(svgOptionsOf(options));
|
|
98
|
+
const credit = paintedCredit(options);
|
|
99
|
+
return credit === "" ? drawn : drawn.replace("</svg>", `<desc>${esc(credit)}</desc></svg>`);
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
return EMPTY_SVG;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
const creditHtml = (credit) => (credit === "" ? "" : `\n<p>${esc(credit).replaceAll("\n", "<br>\n")}</p>`);
|
|
106
|
+
/** The text of one embed. The `module` one imports the package; the `data` one is a `data:image/svg+xml` address for an `<img>`. */
|
|
107
|
+
export function embedCode(options, kind = "element", settings = {}) {
|
|
108
|
+
const site = settings.site ?? SITE;
|
|
109
|
+
const cdn = settings.cdn ?? CDN;
|
|
110
|
+
const credit = paintedCredit(options);
|
|
111
|
+
if (kind === "svg")
|
|
112
|
+
return drawingOf(options);
|
|
113
|
+
if (kind === "data")
|
|
114
|
+
return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(drawingOf(options))}`;
|
|
115
|
+
if (kind === "link") {
|
|
116
|
+
const path = assetPathOf(options);
|
|
117
|
+
const alt = esc(options.label ?? "Rocket");
|
|
118
|
+
const src = path === null ? `data:image/svg+xml;charset=utf-8,${encodeURIComponent(drawingOf(options))}` : `${cdn}/dist/assets/${path}`;
|
|
119
|
+
return `<img src="${esc(src)}" alt="${alt}" width="480" height="640" loading="lazy">${creditHtml(credit)}`;
|
|
120
|
+
}
|
|
121
|
+
if (kind === "iframe") {
|
|
122
|
+
const query = rocketToParams(options).toString();
|
|
123
|
+
const src = `${site}embed.html${query === "" ? "" : `?${query}`}`;
|
|
124
|
+
const title = options.label ?? "Rocket";
|
|
125
|
+
return `<iframe\n src="${esc(src)}"\n title="${esc(title)}"\n loading="lazy"\n style="width:100%;max-width:480px;aspect-ratio:3 / 4;border:0"\n></iframe>${creditHtml(credit)}`;
|
|
126
|
+
}
|
|
127
|
+
if (kind === "module") {
|
|
128
|
+
const description = descriptionOf(options);
|
|
129
|
+
const svgOptions = svgOptionsOf(options);
|
|
130
|
+
const caption = credit === "" ? "" : `\ndocument.querySelector("#credit").textContent = ${JSON.stringify(credit)};`;
|
|
131
|
+
return `// In a page with <div id="rocket"></div>${credit === "" ? "" : ' and <p id="credit"></p>'}.\nimport { build } from "${cdn}/dist/build/index.js";\n// or, from npm: import { build } from "@johnmorrisdotca/uchusen-rockets/build";\n\nconst rocket = build(${JSON.stringify(description, null, 2)});\ndocument.querySelector("#rocket").innerHTML = rocket.svg(${JSON.stringify(svgOptions)});${caption}`;
|
|
132
|
+
}
|
|
133
|
+
const attrs = Object.entries(attributesFromOptions(options)).map(([name, value]) => `${name}="${esc(value)}"`);
|
|
134
|
+
return `${IMPORT_MAP}\n<script type="module" src="${cdn}/dist/element.js"></script>\n\n<uchusen-rocket${attrs.length === 0 ? "" : `\n ${attrs.join("\n ")}`}\n></uchusen-rocket>${creditHtml(credit)}`;
|
|
135
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Piece } from "./model/pieces.ts";
|
|
2
|
+
/** How many exit-radii a drawn flame reaches, and the most any reaches in metres. A picture, not a measured length. */
|
|
3
|
+
export declare const PLUME_EXITS = 34;
|
|
4
|
+
export declare const PLUME_MOST_M = 26;
|
|
5
|
+
/** How many shock diamonds a flame shows near the ground. A picture. */
|
|
6
|
+
export declare const PLUME_DIAMONDS = 6;
|
|
7
|
+
/** With no one touching anything, a flame stops moving after this long and nothing draws: a lit rocket at rest costs the same as a dark one. */
|
|
8
|
+
export declare const FLAME_SETTLE_MS = 15000;
|
|
9
|
+
/** A flame that only flickers is drawn at most this often. A turn or a move still draws once a frame. */
|
|
10
|
+
export declare const FLAME_GAP_MS = 33;
|
|
11
|
+
export declare function plumeLength(exit: number): number;
|
|
12
|
+
/** `on` asks for them, and a reader who asked for reduced motion has them off whatever the page says. Anything else, or nothing, is off. */
|
|
13
|
+
export declare function enginesWanted(attribute: string | null, reduced: boolean): boolean;
|
|
14
|
+
export interface Bell {
|
|
15
|
+
x: number;
|
|
16
|
+
z: number;
|
|
17
|
+
/** Height of the mouth, in the part's own metres. */
|
|
18
|
+
y: number;
|
|
19
|
+
/** Exit radius, metres. */
|
|
20
|
+
exit: number;
|
|
21
|
+
}
|
|
22
|
+
/** One bell for every engine the pieces already draw. The mouth is the first point of the bell. */
|
|
23
|
+
export declare function bellsOf(pieces: readonly Piece[]): Bell[];
|
|
24
|
+
export interface LitBell extends Bell {
|
|
25
|
+
slot: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The engines that are alight at full thrust. Stacked, only the parts on the ground or beside the stack, as an orbiter is: a ship's engines are buried in the booster.
|
|
29
|
+
* Apart, or one part on its own, every bell that part draws. A part whose engines no source tells of (`dark`, a stage that has landed) draws no flame.
|
|
30
|
+
*/
|
|
31
|
+
export declare function litBells(parts: readonly {
|
|
32
|
+
slot: string;
|
|
33
|
+
atY: number;
|
|
34
|
+
shown: boolean;
|
|
35
|
+
pieces: readonly Piece[];
|
|
36
|
+
beside?: boolean;
|
|
37
|
+
dark?: boolean;
|
|
38
|
+
}[], together: boolean): LitBell[];
|
|
39
|
+
/** The bells grouped by how far they are from the part's axis, innermost ring first, and each ring in order round the axis. */
|
|
40
|
+
export declare function ringsOf(bells: readonly Bell[]): Bell[][];
|
|
41
|
+
/**
|
|
42
|
+
* Which `count` engines burn: from the middle out, and a ring that is only partly used has them evenly round it, so three of a Falcon 9's nine are the middle one and two opposite. A source says how many; where they stand is this rule.
|
|
43
|
+
*/
|
|
44
|
+
export declare function pickBells(bells: readonly Bell[], count: number): Bell[];
|
package/dist/engines.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/** How many exit-radii a drawn flame reaches, and the most any reaches in metres. A picture, not a measured length. */
|
|
2
|
+
export const PLUME_EXITS = 34;
|
|
3
|
+
export const PLUME_MOST_M = 26;
|
|
4
|
+
/** How many shock diamonds a flame shows near the ground. A picture. */
|
|
5
|
+
export const PLUME_DIAMONDS = 6;
|
|
6
|
+
/** With no one touching anything, a flame stops moving after this long and nothing draws: a lit rocket at rest costs the same as a dark one. */
|
|
7
|
+
export const FLAME_SETTLE_MS = 15_000;
|
|
8
|
+
/** A flame that only flickers is drawn at most this often. A turn or a move still draws once a frame. */
|
|
9
|
+
export const FLAME_GAP_MS = 33;
|
|
10
|
+
export function plumeLength(exit) {
|
|
11
|
+
return Math.min(exit * PLUME_EXITS, PLUME_MOST_M);
|
|
12
|
+
}
|
|
13
|
+
/** `on` asks for them, and a reader who asked for reduced motion has them off whatever the page says. Anything else, or nothing, is off. */
|
|
14
|
+
export function enginesWanted(attribute, reduced) {
|
|
15
|
+
return attribute === "on" && !reduced;
|
|
16
|
+
}
|
|
17
|
+
/** One bell for every engine the pieces already draw. The mouth is the first point of the bell. */
|
|
18
|
+
export function bellsOf(pieces) {
|
|
19
|
+
const bells = [];
|
|
20
|
+
for (const piece of pieces) {
|
|
21
|
+
if (piece.kind !== "lathe" || piece.material !== "bell" || piece.profile.length === 0)
|
|
22
|
+
continue;
|
|
23
|
+
const [exit, y] = piece.profile[0];
|
|
24
|
+
const at = piece.at ?? [0, 0];
|
|
25
|
+
bells.push({ x: at[0], z: at[1], y, exit });
|
|
26
|
+
}
|
|
27
|
+
return bells;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* The engines that are alight at full thrust. Stacked, only the parts on the ground or beside the stack, as an orbiter is: a ship's engines are buried in the booster.
|
|
31
|
+
* Apart, or one part on its own, every bell that part draws. A part whose engines no source tells of (`dark`, a stage that has landed) draws no flame.
|
|
32
|
+
*/
|
|
33
|
+
export function litBells(parts, together) {
|
|
34
|
+
const shown = parts.filter((part) => part.shown);
|
|
35
|
+
if (shown.length === 0)
|
|
36
|
+
return [];
|
|
37
|
+
const floor = Math.min(...shown.map((part) => part.atY));
|
|
38
|
+
const bells = [];
|
|
39
|
+
for (const part of shown) {
|
|
40
|
+
if (part.dark || (together && part.atY > floor + 0.5 && !part.beside))
|
|
41
|
+
continue;
|
|
42
|
+
for (const bell of bellsOf(part.pieces))
|
|
43
|
+
bells.push({ ...bell, slot: part.slot });
|
|
44
|
+
}
|
|
45
|
+
return bells;
|
|
46
|
+
}
|
|
47
|
+
/** The bells grouped by how far they are from the part's axis, innermost ring first, and each ring in order round the axis. */
|
|
48
|
+
export function ringsOf(bells) {
|
|
49
|
+
const sorted = [...bells].sort((a, b) => Math.hypot(a.x, a.z) - Math.hypot(b.x, b.z));
|
|
50
|
+
const rings = [];
|
|
51
|
+
for (const bell of sorted) {
|
|
52
|
+
const last = rings[rings.length - 1];
|
|
53
|
+
if (last && Math.abs(Math.hypot(last[0].x, last[0].z) - Math.hypot(bell.x, bell.z)) < 0.05)
|
|
54
|
+
last.push(bell);
|
|
55
|
+
else
|
|
56
|
+
rings.push([bell]);
|
|
57
|
+
}
|
|
58
|
+
for (const ring of rings)
|
|
59
|
+
ring.sort((a, b) => Math.atan2(a.x, a.z) - Math.atan2(b.x, b.z));
|
|
60
|
+
return rings;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Which `count` engines burn: from the middle out, and a ring that is only partly used has them evenly round it, so three of a Falcon 9's nine are the middle one and two opposite. A source says how many; where they stand is this rule.
|
|
64
|
+
*/
|
|
65
|
+
export function pickBells(bells, count) {
|
|
66
|
+
const wanted = Math.max(0, Math.min(bells.length, Math.floor(count)));
|
|
67
|
+
const out = [];
|
|
68
|
+
for (const ring of ringsOf(bells)) {
|
|
69
|
+
const left = wanted - out.length;
|
|
70
|
+
if (left <= 0)
|
|
71
|
+
break;
|
|
72
|
+
if (ring.length <= left)
|
|
73
|
+
out.push(...ring);
|
|
74
|
+
else
|
|
75
|
+
for (let i = 0; i < left; i++)
|
|
76
|
+
out.push(ring[Math.floor((i * ring.length) / left)]);
|
|
77
|
+
}
|
|
78
|
+
return out;
|
|
79
|
+
}
|
package/dist/fit.d.ts
CHANGED