@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/fit.js
CHANGED
|
@@ -3,14 +3,15 @@
|
|
|
3
3
|
import { MODEL_CREDITS } from "./data/credits.js";
|
|
4
4
|
import { partEntry } from "./model/registry.js";
|
|
5
5
|
import { partIdOf, ROCKETS, variantOf } from "./rockets.js";
|
|
6
|
-
|
|
6
|
+
/** How far apart two joints may be in metres and still meet. */
|
|
7
|
+
export const JOINT_TOLERANCE = 0.1;
|
|
7
8
|
/** The whole height, joint to joint up the stack, and the widest part. */
|
|
8
9
|
function sizeOf(parts) {
|
|
9
10
|
let y = 0;
|
|
10
11
|
let top = 0;
|
|
11
12
|
for (const { part } of parts) {
|
|
12
13
|
if (part.strapOn) {
|
|
13
|
-
top = Math.max(top, part.height);
|
|
14
|
+
top = Math.max(top, (part.strapOn.y ?? 0) + part.height);
|
|
14
15
|
continue;
|
|
15
16
|
}
|
|
16
17
|
const base = y - (part.joints.bottom?.y ?? 0);
|
|
@@ -84,7 +85,7 @@ export function check(description) {
|
|
|
84
85
|
}
|
|
85
86
|
if (top.kind !== bottom.kind)
|
|
86
87
|
fail("joint-kind", `${below.name} ends in a ${top.kind} joint and ${above.name} starts with a ${bottom.kind} joint.`);
|
|
87
|
-
if (Math.abs(top.diameter - bottom.diameter) >
|
|
88
|
+
if (Math.abs(top.diameter - bottom.diameter) > JOINT_TOLERANCE)
|
|
88
89
|
fail("joint-diameter", `${below.name} is ${top.diameter} m across at the joint and ${above.name} is ${bottom.diameter} m.`);
|
|
89
90
|
}
|
|
90
91
|
if (custom)
|
package/dist/flight.d.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { type Flight, type FlightPhase } from "./data/flights.ts";
|
|
2
|
+
import type { Figure } from "./data/types.ts";
|
|
3
|
+
export type { Flight, FlightBurn, FlightPhase, PartPose } from "./data/flights.ts";
|
|
4
|
+
/** Seconds a phase takes on the screen when the timeline plays: one flight in under a minute, whatever its real length. */
|
|
5
|
+
export declare const SECONDS_PER_PHASE = 2.4;
|
|
6
|
+
/** The flight for a rocket's variant, when a page gives one. */
|
|
7
|
+
export declare const flightOf: (rocket: string, variant: string | undefined) => Flight | null;
|
|
8
|
+
/** The last place on the timeline: the last phase. */
|
|
9
|
+
export declare const lastPosition: (flight: Flight) => number;
|
|
10
|
+
/** Which phase a place on the timeline is in, and how far along to the next. A value that is not a number is the start. */
|
|
11
|
+
export declare function phaseAt(flight: Flight, position: number): {
|
|
12
|
+
index: number;
|
|
13
|
+
along: number;
|
|
14
|
+
phase: FlightPhase;
|
|
15
|
+
};
|
|
16
|
+
/** The place on the timeline of a phase by its id, or null for one the flight does not have. */
|
|
17
|
+
export declare function phasePosition(flight: Flight, id: string | null | undefined): number | null;
|
|
18
|
+
/** How many engines of each part burn in a phase, as drawn: a blank figure draws its `drawn`. */
|
|
19
|
+
export declare function burnsOf(phase: FlightPhase): Record<string, number>;
|
|
20
|
+
export interface PoseNow {
|
|
21
|
+
dx: number;
|
|
22
|
+
dy: number;
|
|
23
|
+
pitch: number;
|
|
24
|
+
gone: boolean;
|
|
25
|
+
}
|
|
26
|
+
export interface FlightFrame {
|
|
27
|
+
index: number;
|
|
28
|
+
phase: FlightPhase;
|
|
29
|
+
poses: Readonly<Record<string, PoseNow>>;
|
|
30
|
+
burns: Readonly<Record<string, number>>;
|
|
31
|
+
/** Metres. */
|
|
32
|
+
groundY: number;
|
|
33
|
+
smoke: number;
|
|
34
|
+
air: number;
|
|
35
|
+
/** A part stands away from the stack. */
|
|
36
|
+
separated: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface FlightPart {
|
|
39
|
+
slot: string;
|
|
40
|
+
/** Where it stands in the stack: the base's height, metres. */
|
|
41
|
+
baseY: number;
|
|
42
|
+
}
|
|
43
|
+
/** Everything the picture needs at a place on the timeline, for a vehicle `height` metres tall. */
|
|
44
|
+
export declare function frameAt(flight: Flight, position: number, parts: readonly FlightPart[], height: number): FlightFrame;
|
|
45
|
+
/** How far a flight's picture reaches, so the camera can hold all of it: the widest and highest every part stands, from the stack's own bounds. */
|
|
46
|
+
export declare function flightBounds(flight: Flight, parts: readonly (FlightPart & {
|
|
47
|
+
height: number;
|
|
48
|
+
radius: number;
|
|
49
|
+
})[], height: number): {
|
|
50
|
+
min: [number, number, number];
|
|
51
|
+
max: [number, number, number];
|
|
52
|
+
};
|
|
53
|
+
/** The clock of one timeline: where it is and whether it runs. It only moves when told to, once a frame by whoever draws, so a timeline out of sight stands still. */
|
|
54
|
+
export declare class FlightClock {
|
|
55
|
+
readonly flight: Flight;
|
|
56
|
+
position: number;
|
|
57
|
+
playing: boolean;
|
|
58
|
+
constructor(flight: Flight);
|
|
59
|
+
get ended(): boolean;
|
|
60
|
+
play(): void;
|
|
61
|
+
pause(): void;
|
|
62
|
+
seek(position: number): void;
|
|
63
|
+
/** Moves on by `seconds` of the screen's time, and stops at the end. */
|
|
64
|
+
advance(seconds: number): void;
|
|
65
|
+
}
|
|
66
|
+
/** A time as words: `T+2:35`, `T-0:03`, `T+1:05:20`. A blank says so. */
|
|
67
|
+
export declare function clockWords(at: Figure): string;
|
package/dist/flight.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// A flight as a timeline: where the reader is along it, which engines burn there and how each part stands. The times and the counts are `src/data/flights.ts`, each with its page. Moving between the phases is a picture. Pure: no three.js and no DOM.
|
|
2
|
+
import { FLIGHTS } from "./data/flights.js";
|
|
3
|
+
/** Seconds a phase takes on the screen when the timeline plays: one flight in under a minute, whatever its real length. */
|
|
4
|
+
export const SECONDS_PER_PHASE = 2.4;
|
|
5
|
+
/** The flight for a rocket's variant, when a page gives one. */
|
|
6
|
+
export const flightOf = (rocket, variant) => FLIGHTS.find((flight) => flight.rocket === rocket && flight.variant === variant) ?? null;
|
|
7
|
+
/** The last place on the timeline: the last phase. */
|
|
8
|
+
export const lastPosition = (flight) => flight.phases.length - 1;
|
|
9
|
+
/** Which phase a place on the timeline is in, and how far along to the next. A value that is not a number is the start. */
|
|
10
|
+
export function phaseAt(flight, position) {
|
|
11
|
+
const last = lastPosition(flight);
|
|
12
|
+
const place = Number.isFinite(position) ? Math.min(last, Math.max(0, position)) : 0;
|
|
13
|
+
const index = Math.floor(place);
|
|
14
|
+
return { index, along: place - index, phase: flight.phases[index] };
|
|
15
|
+
}
|
|
16
|
+
/** The place on the timeline of a phase by its id, or null for one the flight does not have. */
|
|
17
|
+
export function phasePosition(flight, id) {
|
|
18
|
+
const index = flight.phases.findIndex((phase) => phase.id === id);
|
|
19
|
+
return index < 0 ? null : index;
|
|
20
|
+
}
|
|
21
|
+
/** How many engines of each part burn in a phase, as drawn: a blank figure draws its `drawn`. */
|
|
22
|
+
export function burnsOf(phase) {
|
|
23
|
+
const out = {};
|
|
24
|
+
for (const [slot, burn] of Object.entries(phase.burns))
|
|
25
|
+
out[slot] = burn.engines.value ?? burn.drawn ?? 0;
|
|
26
|
+
return out;
|
|
27
|
+
}
|
|
28
|
+
const smooth = (t) => t * t * (3 - 2 * t);
|
|
29
|
+
const mix = (a, b, t) => a + (b - a) * t;
|
|
30
|
+
const poseIn = (pose, part, height) => ({
|
|
31
|
+
dx: (pose?.dx ?? 0) * height,
|
|
32
|
+
dy: pose?.rest ? -part.baseY : (pose?.dy ?? 0) * height,
|
|
33
|
+
pitch: pose?.pitch ?? 0,
|
|
34
|
+
gone: pose?.gone ?? false,
|
|
35
|
+
});
|
|
36
|
+
/** Everything the picture needs at a place on the timeline, for a vehicle `height` metres tall. */
|
|
37
|
+
export function frameAt(flight, position, parts, height) {
|
|
38
|
+
const { index, along, phase } = phaseAt(flight, position);
|
|
39
|
+
const next = flight.phases[Math.min(index + 1, lastPosition(flight))];
|
|
40
|
+
const t = smooth(along);
|
|
41
|
+
const poses = {};
|
|
42
|
+
let separated = false;
|
|
43
|
+
for (const part of parts) {
|
|
44
|
+
const from = poseIn(phase.pose[part.slot], part, height);
|
|
45
|
+
const to = poseIn(next.pose[part.slot], part, height);
|
|
46
|
+
const now = { dx: mix(from.dx, to.dx, t), dy: mix(from.dy, to.dy, t), pitch: mix(from.pitch, to.pitch, t), gone: from.gone };
|
|
47
|
+
poses[part.slot] = now;
|
|
48
|
+
if (now.dx !== 0 || now.dy !== 0)
|
|
49
|
+
separated = true;
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
index,
|
|
53
|
+
phase,
|
|
54
|
+
poses,
|
|
55
|
+
burns: burnsOf(phase),
|
|
56
|
+
groundY: -mix(phase.ground, next.ground, t) * height,
|
|
57
|
+
smoke: mix(phase.smoke ?? 0, next.smoke ?? 0, t),
|
|
58
|
+
air: mix(phase.air ?? 0, next.air ?? 0, t),
|
|
59
|
+
separated,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/** How far a flight's picture reaches, so the camera can hold all of it: the widest and highest every part stands, from the stack's own bounds. */
|
|
63
|
+
export function flightBounds(flight, parts, height) {
|
|
64
|
+
const min = [Infinity, 0, Infinity];
|
|
65
|
+
const max = [-Infinity, height, -Infinity];
|
|
66
|
+
for (const part of parts)
|
|
67
|
+
for (const phase of flight.phases) {
|
|
68
|
+
const pose = poseIn(phase.pose[part.slot], part, height);
|
|
69
|
+
if (pose.gone)
|
|
70
|
+
continue;
|
|
71
|
+
const reach = Math.max(part.radius, (Math.abs(Math.sin((pose.pitch * Math.PI) / 180)) * part.height) / 2);
|
|
72
|
+
min[0] = Math.min(min[0], pose.dx - reach);
|
|
73
|
+
max[0] = Math.max(max[0], pose.dx + reach);
|
|
74
|
+
min[1] = Math.min(min[1], part.baseY + pose.dy);
|
|
75
|
+
max[1] = Math.max(max[1], part.baseY + pose.dy + part.height);
|
|
76
|
+
min[2] = Math.min(min[2], -part.radius);
|
|
77
|
+
max[2] = Math.max(max[2], part.radius);
|
|
78
|
+
}
|
|
79
|
+
return { min, max };
|
|
80
|
+
}
|
|
81
|
+
/** The clock of one timeline: where it is and whether it runs. It only moves when told to, once a frame by whoever draws, so a timeline out of sight stands still. */
|
|
82
|
+
export class FlightClock {
|
|
83
|
+
flight;
|
|
84
|
+
position = 0;
|
|
85
|
+
playing = false;
|
|
86
|
+
constructor(flight) {
|
|
87
|
+
this.flight = flight;
|
|
88
|
+
}
|
|
89
|
+
get ended() {
|
|
90
|
+
return this.position >= lastPosition(this.flight);
|
|
91
|
+
}
|
|
92
|
+
play() {
|
|
93
|
+
if (this.ended)
|
|
94
|
+
this.position = 0;
|
|
95
|
+
this.playing = true;
|
|
96
|
+
}
|
|
97
|
+
pause() {
|
|
98
|
+
this.playing = false;
|
|
99
|
+
}
|
|
100
|
+
seek(position) {
|
|
101
|
+
const { index, along } = phaseAt(this.flight, position);
|
|
102
|
+
this.position = index + along;
|
|
103
|
+
this.playing = false;
|
|
104
|
+
}
|
|
105
|
+
/** Moves on by `seconds` of the screen's time, and stops at the end. */
|
|
106
|
+
advance(seconds) {
|
|
107
|
+
if (!this.playing)
|
|
108
|
+
return;
|
|
109
|
+
this.position = Math.min(lastPosition(this.flight), this.position + seconds / SECONDS_PER_PHASE);
|
|
110
|
+
if (this.ended)
|
|
111
|
+
this.playing = false;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/** A time as words: `T+2:35`, `T-0:03`, `T+1:05:20`. A blank says so. */
|
|
115
|
+
export function clockWords(at) {
|
|
116
|
+
if (at.value === null)
|
|
117
|
+
return "Time: no source";
|
|
118
|
+
const sign = at.value < 0 ? "-" : "+";
|
|
119
|
+
const total = Math.abs(at.value);
|
|
120
|
+
const h = Math.floor(total / 3600);
|
|
121
|
+
const m = Math.floor((total % 3600) / 60);
|
|
122
|
+
const s = String(total % 60).padStart(2, "0");
|
|
123
|
+
return h > 0 ? `T${sign}${h}:${String(m).padStart(2, "0")}:${s}` : `T${sign}${m}:${s}`;
|
|
124
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
declare const HTMLBase: typeof HTMLElement;
|
|
2
|
+
export declare class UchusenFlight extends HTMLBase {
|
|
3
|
+
static readonly observedAttributes: string[];
|
|
4
|
+
private rocket;
|
|
5
|
+
private drawnFor;
|
|
6
|
+
private chartKey;
|
|
7
|
+
private parts;
|
|
8
|
+
connectedCallback(): void;
|
|
9
|
+
disconnectedCallback(): void;
|
|
10
|
+
attributeChangedCallback(): void;
|
|
11
|
+
private bind;
|
|
12
|
+
private build;
|
|
13
|
+
private drawAbout;
|
|
14
|
+
private update;
|
|
15
|
+
}
|
|
16
|
+
export declare function defineUchusenFlight(): void;
|
|
17
|
+
declare global {
|
|
18
|
+
interface HTMLElementTagNameMap {
|
|
19
|
+
"uchusen-flight": UchusenFlight;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
// `<uchusen-flight for="rocket">`: the play, pause and scrub of a rocket's flight, with where it is, what happens there and which engines burn, engine by engine. It draws nothing and has no clock of its own: the rocket's own frame loop moves the timeline and tells it, so it adds no frame request. Importing the element's module defines it.
|
|
2
|
+
import { SOURCES } from "./data/sources.js";
|
|
3
|
+
import { clockWords, lastPosition, phaseAt } from "./flight.js";
|
|
4
|
+
const HTMLBase = typeof HTMLElement === "undefined" ? class {
|
|
5
|
+
} : HTMLElement;
|
|
6
|
+
const CSS = `
|
|
7
|
+
:host { display: block; color: inherit; font-size: 0.9rem; line-height: 1.4; }
|
|
8
|
+
:host([hidden]) { display: none; }
|
|
9
|
+
[hidden] { display: none !important; }
|
|
10
|
+
.row { display: flex; flex-wrap: wrap; align-items: center; gap: 0.4rem; }
|
|
11
|
+
button { min-width: 44px; min-height: 44px; padding: 0.3rem 0.75rem; border: 1px solid currentColor; border-radius: 10px; background: transparent; color: inherit; font: inherit; cursor: pointer; }
|
|
12
|
+
button:disabled { opacity: 0.45; cursor: default; }
|
|
13
|
+
button:focus-visible, input:focus-visible { outline: 2px solid currentColor; outline-offset: 2px; }
|
|
14
|
+
input[type="range"] { flex: 1 1 10rem; min-width: 8rem; min-height: 44px; margin: 0; accent-color: var(--uchusen-accent, currentColor); }
|
|
15
|
+
.now { margin: 0.45rem 0 0.1rem; font-weight: 600; font-variant-numeric: tabular-nums; }
|
|
16
|
+
.what, .fine { margin: 0; }
|
|
17
|
+
.fine { margin-top: 0.3rem; font-size: 0.78rem; opacity: 0.78; }
|
|
18
|
+
.charts { display: flex; flex-wrap: wrap; gap: 0.7rem; margin-top: 0.5rem; }
|
|
19
|
+
figure { margin: 0; width: 5.5rem; }
|
|
20
|
+
figure svg { display: block; width: 100%; height: auto; }
|
|
21
|
+
figcaption { font-size: 0.74rem; line-height: 1.25; margin-top: 0.2rem; }
|
|
22
|
+
a { color: inherit; }
|
|
23
|
+
`;
|
|
24
|
+
const sheet = { made: null };
|
|
25
|
+
export class UchusenFlight extends HTMLBase {
|
|
26
|
+
static observedAttributes = ["for"];
|
|
27
|
+
rocket = null;
|
|
28
|
+
drawnFor = "";
|
|
29
|
+
chartKey = "";
|
|
30
|
+
parts = null;
|
|
31
|
+
connectedCallback() {
|
|
32
|
+
if (!this.shadowRoot)
|
|
33
|
+
this.build();
|
|
34
|
+
this.bind();
|
|
35
|
+
}
|
|
36
|
+
disconnectedCallback() {
|
|
37
|
+
this.rocket?.removeEventListener("uchusen-flight", this.update);
|
|
38
|
+
this.rocket = null;
|
|
39
|
+
}
|
|
40
|
+
attributeChangedCallback() {
|
|
41
|
+
if (this.isConnected && this.shadowRoot)
|
|
42
|
+
this.bind();
|
|
43
|
+
}
|
|
44
|
+
bind() {
|
|
45
|
+
this.rocket?.removeEventListener("uchusen-flight", this.update);
|
|
46
|
+
const id = this.getAttribute("for");
|
|
47
|
+
this.rocket = id ? this.getRootNode().getElementById?.(id) : null;
|
|
48
|
+
this.rocket?.addEventListener("uchusen-flight", this.update);
|
|
49
|
+
queueMicrotask(this.update);
|
|
50
|
+
}
|
|
51
|
+
build() {
|
|
52
|
+
const root = this.attachShadow({ mode: "open" });
|
|
53
|
+
try {
|
|
54
|
+
if (!sheet.made) {
|
|
55
|
+
sheet.made = new CSSStyleSheet();
|
|
56
|
+
sheet.made.replaceSync(CSS);
|
|
57
|
+
}
|
|
58
|
+
root.adoptedStyleSheets = [sheet.made];
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
const style = document.createElement("style");
|
|
62
|
+
style.textContent = CSS;
|
|
63
|
+
root.append(style);
|
|
64
|
+
}
|
|
65
|
+
const make = (tag, id, text = "") => {
|
|
66
|
+
const node = document.createElement(tag);
|
|
67
|
+
node.dataset.testid = id;
|
|
68
|
+
node.setAttribute("part", id);
|
|
69
|
+
node.textContent = text;
|
|
70
|
+
return node;
|
|
71
|
+
};
|
|
72
|
+
const button = (id, text, on) => {
|
|
73
|
+
const node = make("button", id, text);
|
|
74
|
+
node.type = "button";
|
|
75
|
+
node.addEventListener("click", on);
|
|
76
|
+
return node;
|
|
77
|
+
};
|
|
78
|
+
const play = button("flight-play", "Play", () => {
|
|
79
|
+
if (this.rocket?.flightState.playing)
|
|
80
|
+
this.rocket.pause();
|
|
81
|
+
else
|
|
82
|
+
this.rocket?.play();
|
|
83
|
+
});
|
|
84
|
+
const position = () => this.rocket?.flightState.position ?? 0;
|
|
85
|
+
const back = button("flight-back", "Back", () => this.rocket?.seek(Math.ceil(position()) - 1));
|
|
86
|
+
const next = button("flight-next", "Next", () => this.rocket?.seek(Math.floor(position()) + 1));
|
|
87
|
+
const leave = button("flight-leave", "Back to the rocket", () => this.rocket?.endFlight());
|
|
88
|
+
const range = make("input", "flight-range");
|
|
89
|
+
range.type = "range";
|
|
90
|
+
range.min = "0";
|
|
91
|
+
range.step = "0.01";
|
|
92
|
+
range.value = "0";
|
|
93
|
+
range.setAttribute("aria-label", "Where along the flight");
|
|
94
|
+
range.addEventListener("input", () => this.rocket?.seek(Number(range.value)));
|
|
95
|
+
const row = document.createElement("div");
|
|
96
|
+
row.className = "row";
|
|
97
|
+
row.setAttribute("part", "flight-row");
|
|
98
|
+
row.append(play, back, range, next, leave);
|
|
99
|
+
const now = make("p", "flight-now");
|
|
100
|
+
now.className = "now";
|
|
101
|
+
now.setAttribute("aria-live", "polite");
|
|
102
|
+
const what = make("p", "flight-what");
|
|
103
|
+
what.className = "what";
|
|
104
|
+
const charts = make("div", "flight-charts");
|
|
105
|
+
charts.className = "charts";
|
|
106
|
+
const about = make("p", "flight-about");
|
|
107
|
+
about.className = "fine";
|
|
108
|
+
const body = document.createElement("div");
|
|
109
|
+
body.setAttribute("part", "flight-body");
|
|
110
|
+
body.append(row, now, what, charts, about);
|
|
111
|
+
const none = make("p", "flight-none", "No flight timeline for this version yet: no page read here gives one.");
|
|
112
|
+
none.className = "fine";
|
|
113
|
+
root.append(body, none);
|
|
114
|
+
this.parts = { play, back, next, leave, range, now, what, charts, about, none, body };
|
|
115
|
+
}
|
|
116
|
+
drawAbout(flight, reduced) {
|
|
117
|
+
if (!this.parts)
|
|
118
|
+
return;
|
|
119
|
+
const source = SOURCES[flight.source];
|
|
120
|
+
const link = document.createElement("a");
|
|
121
|
+
link.href = source.url;
|
|
122
|
+
link.rel = "noopener";
|
|
123
|
+
link.textContent = `${source.publisher}: ${source.title}`;
|
|
124
|
+
this.parts.about.replaceChildren(`${flight.basis} The times and engine counts are sourced; how the picture moves between them is illustrative, not to scale. ${flight.note ?? ""} ${reduced ? "This device asks for reduced motion, so nothing plays and no flame shows: move the slider or step through, and the charts say which engines burn. " : ""}From `, link, ".");
|
|
125
|
+
}
|
|
126
|
+
update = () => {
|
|
127
|
+
const parts = this.parts;
|
|
128
|
+
const rocket = this.rocket;
|
|
129
|
+
if (!parts)
|
|
130
|
+
return;
|
|
131
|
+
const flight = rocket?.flight ?? null;
|
|
132
|
+
parts.body.hidden = !flight;
|
|
133
|
+
parts.none.hidden = Boolean(flight);
|
|
134
|
+
if (!rocket || !flight) {
|
|
135
|
+
this.drawnFor = "";
|
|
136
|
+
this.dataset.flight = "";
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
const reduced = typeof matchMedia === "function" && matchMedia("(prefers-reduced-motion: reduce)").matches;
|
|
140
|
+
if (this.drawnFor !== flight.id) {
|
|
141
|
+
this.drawnFor = flight.id;
|
|
142
|
+
parts.range.max = String(lastPosition(flight));
|
|
143
|
+
parts.play.disabled = reduced;
|
|
144
|
+
this.drawAbout(flight, reduced);
|
|
145
|
+
}
|
|
146
|
+
const state = rocket.flightState;
|
|
147
|
+
const { index, phase } = phaseAt(flight, state.position);
|
|
148
|
+
this.dataset.flight = flight.id;
|
|
149
|
+
this.dataset.phase = state.active ? phase.id : "";
|
|
150
|
+
this.dataset.playing = String(state.playing);
|
|
151
|
+
parts.play.textContent = state.playing ? "Pause" : state.ended ? "Play again" : "Play";
|
|
152
|
+
parts.play.setAttribute("aria-pressed", String(state.playing));
|
|
153
|
+
parts.back.disabled = state.position <= 0;
|
|
154
|
+
parts.next.disabled = state.position >= lastPosition(flight);
|
|
155
|
+
parts.leave.disabled = !state.active;
|
|
156
|
+
parts.range.value = String(state.position);
|
|
157
|
+
parts.range.setAttribute("aria-valuetext", `${clockWords(phase.at)}, ${phase.name}`);
|
|
158
|
+
parts.now.textContent = `${clockWords(phase.at)}, ${phase.name}${phase.altitude?.value ? `, ${phase.altitude.value}` : ""}`;
|
|
159
|
+
parts.what.textContent = phase.what;
|
|
160
|
+
const chartKey = `${flight.id}/${index}/${state.active}`;
|
|
161
|
+
if (chartKey !== this.chartKey) {
|
|
162
|
+
this.chartKey = chartKey;
|
|
163
|
+
// nothing started yet: what burns in the first phase
|
|
164
|
+
const charts = rocket.engineCharts(state.active ? null : flight.phases[0].id);
|
|
165
|
+
const template = document.createElement("template");
|
|
166
|
+
template.innerHTML = charts.map((chart) => `<figure data-slot="${chart.slot}" data-burning="${chart.burning}">${chart.svg}<figcaption></figcaption></figure>`).join("");
|
|
167
|
+
for (const [i, node] of [...template.content.querySelectorAll("figcaption")].entries())
|
|
168
|
+
node.textContent = charts[i].words;
|
|
169
|
+
parts.charts.replaceChildren(template.content);
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
export function defineUchusenFlight() {
|
|
174
|
+
if (typeof customElements !== "undefined" && !customElements.get("uchusen-flight"))
|
|
175
|
+
customElements.define("uchusen-flight", UchusenFlight);
|
|
176
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,10 @@ export { PLANNED_ROCKETS, ROCKETS, partIdOf, SLOT_NAMES, variantOf } from "./roc
|
|
|
2
2
|
export type { PlannedRocket, RocketEntry, RocketStatus } from "./rockets.ts";
|
|
3
3
|
export { blank, figureWords } from "./data/types.ts";
|
|
4
4
|
export type { Disagreement, Figure, Variant, VariantFacts, VariantStatus } from "./data/types.ts";
|
|
5
|
+
export { MAKERS } from "./data/makers.ts";
|
|
6
|
+
export type { MakerId } from "./data/makers.ts";
|
|
7
|
+
export { FLIGHT_LOG, flightLogOf } from "./data/flight-log.ts";
|
|
8
|
+
export type { LoggedFlight } from "./data/flight-log.ts";
|
|
5
9
|
export { SOURCES } from "./data/sources.ts";
|
|
6
10
|
export type { Source, SourceId } from "./data/sources.ts";
|
|
7
11
|
export { creditLine, MODEL_CREDITS } from "./data/credits.ts";
|
|
@@ -22,3 +26,16 @@ export { tiltMode, tiltTurn } from "./tilt.ts";
|
|
|
22
26
|
export type { Reading, TiltMode } from "./tilt.ts";
|
|
23
27
|
export { MATERIALS } from "./model/materials.ts";
|
|
24
28
|
export type { MaterialName, MaterialSpec } from "./model/materials.ts";
|
|
29
|
+
export { builderState } from "./builder.ts";
|
|
30
|
+
export type { BuilderOption, BuilderRow, BuilderState } from "./builder.ts";
|
|
31
|
+
export { cleanWay, DEFAULT_SPIN, spinOf } from "./spin.ts";
|
|
32
|
+
export type { Spin, Way } from "./spin.ts";
|
|
33
|
+
export { FLIGHTS } from "./data/flights.ts";
|
|
34
|
+
export { burnsOf, clockWords, FlightClock, flightOf, frameAt, lastPosition, phaseAt, phasePosition, SECONDS_PER_PHASE } from "./flight.ts";
|
|
35
|
+
export type { Flight, FlightBurn, FlightFrame, FlightPhase, PartPose } from "./flight.ts";
|
|
36
|
+
export { bellsOf, enginesWanted, FLAME_SETTLE_MS, pickBells, plumeLength, ringsOf } from "./engines.ts";
|
|
37
|
+
export type { Bell } from "./engines.ts";
|
|
38
|
+
export { OPTION_ATTRIBUTES, attributesFromOptions, optionsFromAttributes, rocketFromParams, rocketToParams } from "./attrs.ts";
|
|
39
|
+
export type { RocketOptions } from "./attrs.ts";
|
|
40
|
+
export { assetPathOf, CDN, EMBED_KINDS, SITE, THREE_VERSION, embedCode, embedNote, paintedCredit } from "./embed.ts";
|
|
41
|
+
export type { EmbedKind, EmbedSettings } from "./embed.ts";
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
// The pure core: the rockets and their variants with sourced sizes, the parts and how they fit, the camera rule, the looks and the layout. No three.js, no DOM.
|
|
2
2
|
export { PLANNED_ROCKETS, ROCKETS, partIdOf, SLOT_NAMES, variantOf } from "./rockets.js";
|
|
3
3
|
export { blank, figureWords } from "./data/types.js";
|
|
4
|
+
export { MAKERS } from "./data/makers.js";
|
|
5
|
+
export { FLIGHT_LOG, flightLogOf } from "./data/flight-log.js";
|
|
4
6
|
export { SOURCES } from "./data/sources.js";
|
|
5
7
|
export { creditLine, MODEL_CREDITS } from "./data/credits.js";
|
|
6
8
|
export { PART_ENTRIES, partEntry } from "./model/registry.js";
|
|
@@ -12,3 +14,10 @@ export { CROSSFADE_MS, DRAWING_HOLD_MS, REDUCED_FADE_MS, revealDelay } from "./c
|
|
|
12
14
|
export { MAX_PIXELS, MAX_RATIO, MAX_SIDE, pixelRatioFor } from "./pixels.js";
|
|
13
15
|
export { tiltMode, tiltTurn } from "./tilt.js";
|
|
14
16
|
export { MATERIALS } from "./model/materials.js";
|
|
17
|
+
export { builderState } from "./builder.js";
|
|
18
|
+
export { cleanWay, DEFAULT_SPIN, spinOf } from "./spin.js";
|
|
19
|
+
export { FLIGHTS } from "./data/flights.js";
|
|
20
|
+
export { burnsOf, clockWords, FlightClock, flightOf, frameAt, lastPosition, phaseAt, phasePosition, SECONDS_PER_PHASE } from "./flight.js";
|
|
21
|
+
export { bellsOf, enginesWanted, FLAME_SETTLE_MS, pickBells, plumeLength, ringsOf } from "./engines.js";
|
|
22
|
+
export { OPTION_ATTRIBUTES, attributesFromOptions, optionsFromAttributes, rocketFromParams, rocketToParams } from "./attrs.js";
|
|
23
|
+
export { assetPathOf, CDN, EMBED_KINDS, SITE, THREE_VERSION, embedCode, embedNote, paintedCredit } from "./embed.js";
|
package/dist/layout.js
CHANGED
|
@@ -24,7 +24,7 @@ export function placesFor(parts, show, widthOf) {
|
|
|
24
24
|
return parts.map(({ slot, part }) => {
|
|
25
25
|
const together = show === "together";
|
|
26
26
|
if (part.strapOn)
|
|
27
|
-
return { slot, at: [together ? part.strapOn.x : 0, 0, together ? part.strapOn.z : 0], shown: together || show === slot };
|
|
27
|
+
return { slot, at: [together ? part.strapOn.x : 0, together ? (part.strapOn.y ?? 0) : 0, together ? part.strapOn.z : 0], shown: together || show === slot };
|
|
28
28
|
const base = y - (part.joints.bottom?.y ?? 0);
|
|
29
29
|
const at = [0, together ? base : 0, 0];
|
|
30
30
|
y = base + (part.joints.top ? part.joints.top.y : part.height);
|
package/dist/looks.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export interface Look {
|
|
|
19
19
|
/** The soft light behind the rocket in a drawing. */
|
|
20
20
|
halo: boolean;
|
|
21
21
|
}
|
|
22
|
-
export type FillName = "hull" | "white" | "tile" | "metal" | "dark" | "bell";
|
|
22
|
+
export type FillName = "hull" | "white" | "tile" | "metal" | "dark" | "bell" | "foam";
|
|
23
23
|
export declare const LOOKS: Readonly<Record<LookName, Look>>;
|
|
24
24
|
/** A value from outside as a look's name: the default for anything else. */
|
|
25
25
|
export declare const cleanLook: (value: unknown) => LookName;
|
package/dist/looks.js
CHANGED
|
@@ -8,6 +8,7 @@ const NIGHT = {
|
|
|
8
8
|
metal: ["#16202f", "#3a475c", "#16202f"],
|
|
9
9
|
dark: ["#070b12", "#121a28", "#070b12"],
|
|
10
10
|
bell: ["#0a0f18", "#242f42", "#0a0f18"],
|
|
11
|
+
foam: ["#16202f", "#3a475c", "#16202f"],
|
|
11
12
|
};
|
|
12
13
|
export const LOOKS = {
|
|
13
14
|
line: { line: "#8fa1b8", outlinePx: 1.4, featurePx: 1, weldPx: 0.6, weldOpacity: 0.45, outline: 1.2, feature: 0.8, weld: 0.45, fills: NIGHT, halo: true },
|
|
@@ -28,6 +29,7 @@ export const LOOKS = {
|
|
|
28
29
|
metal: ["#5a5f66", "#a9afb6", "#5a5f66"],
|
|
29
30
|
dark: ["#111316", "#2a2d31", "#111316"],
|
|
30
31
|
bell: ["#141518", "#3c3f44", "#141518"],
|
|
32
|
+
foam: ["#6e3a1b", "#c8743a", "#6e3a1b"],
|
|
31
33
|
},
|
|
32
34
|
halo: false,
|
|
33
35
|
},
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Apollo and Soyuz docked, in plain shapes, for the line looks: each is its sourced length and width, stood on end with Apollo's engine down. Where their parts begin is measured from NASA's model at those scales. The painted look is NASA's model.
|
|
2
|
+
import { AS_CSM_LONG, AS_CSM_WIDE, AS_SOYUZ_LONG, AS_SOYUZ_WIDE } from "../data/apollosoyuz.js";
|
|
3
|
+
import { blank } from "../data/types.js";
|
|
4
|
+
import { floor, taper, tube } from "./kit.js";
|
|
5
|
+
const CSM = AS_CSM_LONG.value ?? 0;
|
|
6
|
+
const CSM_R = (AS_CSM_WIDE.value ?? 0) / 2;
|
|
7
|
+
const ALONG = CSM / 11.84;
|
|
8
|
+
const ENGINE = 2.59;
|
|
9
|
+
const CM_AT = CSM - 3.28;
|
|
10
|
+
const DOCK_AT = CSM - (0.32 * ALONG);
|
|
11
|
+
const DOCK = 2.33;
|
|
12
|
+
const SOYUZ_AT = DOCK_AT + 2.32 * ALONG;
|
|
13
|
+
const SOYUZ = AS_SOYUZ_LONG.value ?? 0;
|
|
14
|
+
const SOYUZ_R = (AS_SOYUZ_WIDE.value ?? 0) / 2;
|
|
15
|
+
const csm = () => [
|
|
16
|
+
taper("engine-pale", 1.2, 0, 0.45, ENGINE, { rings: [0.02] }),
|
|
17
|
+
tube("white", CSM_R, ENGINE, CM_AT, { rings: [ENGINE + 0.02, CM_AT - 0.02], welds: [ENGINE + 1.5] }),
|
|
18
|
+
floor(CSM_R, ENGINE),
|
|
19
|
+
taper("steel", CSM_R, CM_AT, 0.3, CSM),
|
|
20
|
+
];
|
|
21
|
+
const dock = () => [tube("dark", 0.7, 0.1, DOCK, { rings: [0.3, DOCK - 0.25] }), floor(0.7, 0.1)];
|
|
22
|
+
const wing = (side) => {
|
|
23
|
+
const frame = { o: [side * SOYUZ_R, 5.9, 0], u: [side, 0, 0], v: [0, 1, 0], w: [0, 0, 1] };
|
|
24
|
+
return { kind: "plate", material: "solar", frame, outline: [[0.1, -0.5], [2.75, -0.5], [2.75, 0.5], [0.1, 0.5]], thickness: 0.04 };
|
|
25
|
+
};
|
|
26
|
+
const soyuz = () => [
|
|
27
|
+
{ kind: "lathe", material: "white", segs: 28, body: true, outline: true, profile: [[0.3, 0.1], [0.75, 0.25], [1.05, 0.8], [1.05, 1.4], [0.72, 2.1]] },
|
|
28
|
+
{ kind: "lathe", material: "white", segs: 28, body: true, outline: true, profile: [[0.72, 2.1], [SOYUZ_R * 0.88, 3], [SOYUZ_R * 0.9, 4.6]], rings: [3] },
|
|
29
|
+
tube("engine-pale", SOYUZ_R * 0.95, 4.6, 6.6, { rings: [4.62] }),
|
|
30
|
+
{ kind: "lathe", material: "white", segs: 28, body: true, outline: true, profile: [[SOYUZ_R * 0.95, 6.6], [SOYUZ_R, SOYUZ]] },
|
|
31
|
+
wing(1),
|
|
32
|
+
wing(-1),
|
|
33
|
+
];
|
|
34
|
+
const FROM = "NASA's model for the painted look. This package's plain shapes for the two line looks, from each craft's sourced length and width; where its parts begin is measured from NASA's model. No flag or lettering is drawn.";
|
|
35
|
+
export const APOLLO_SOYUZ_BUILDS = [
|
|
36
|
+
{
|
|
37
|
+
rocket: "apollo-soyuz",
|
|
38
|
+
variant: "apollo-soyuz",
|
|
39
|
+
drawnFrom: FROM,
|
|
40
|
+
parts: [
|
|
41
|
+
{ slot: "csm", kind: "spacecraft", name: "Apollo command and service module", height: CSM, diameter: CSM_R * 2, sourcedDiameter: AS_CSM_WIDE, painted: { file: "apollo-soyuz-csm.glb", credit: "nasa-apollo-soyuz" }, pieces: csm },
|
|
42
|
+
{ slot: "docking-module", kind: "spacecraft", name: "Docking module", height: DOCK, diameter: 1.41, place: { x: 0, z: 0, y: DOCK_AT }, sourcedDiameter: blank("No source read here gives its size."), painted: { file: "apollo-soyuz-docking-module.glb", credit: "nasa-apollo-soyuz" }, pieces: dock },
|
|
43
|
+
{ slot: "soyuz", kind: "spacecraft", name: "Soyuz 7K-TM", height: SOYUZ, diameter: SOYUZ_R * 2, place: { x: 0, z: 0, y: SOYUZ_AT }, sourcedDiameter: AS_SOYUZ_WIDE, painted: { file: "apollo-soyuz-soyuz.glb", credit: "nasa-apollo-soyuz" }, pieces: soyuz },
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
];
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// Inside Crew Dragon: the capsule cut open down its middle, at Dragon 2's sourced sizes. Four seats and the three-screen panel over the two centre seats are sourced, with the cargo below them; where each sits and its size are judged from one published picture of the cabin. For scale, a plain person of 1.8 m, not a fact about anyone.
|
|
2
|
+
import { DRAGON_DRAWS } from "./falcon.js";
|
|
3
|
+
import { deg } from "../framing.js";
|
|
4
|
+
import { strut } from "./pieces.js";
|
|
5
|
+
const d = DRAGON_DRAWS["dragon-2"];
|
|
6
|
+
const H = d.capsule;
|
|
7
|
+
const R = d.baseRadius;
|
|
8
|
+
const N = d.nest;
|
|
9
|
+
const SHOULDER = H * 0.74;
|
|
10
|
+
const OUTER = [[R * 0.9, N], [R, N + 0.3], [R * 0.93, N + 0.7], [R * 0.5, SHOULDER], [R * 0.47, H * 0.84], [R * 0.3, H * 0.95], [0.001, H]];
|
|
11
|
+
const BACK = () => [deg(90), deg(270)];
|
|
12
|
+
const FLOOR_Y = N + 0.75;
|
|
13
|
+
const shell = (profile, material, extra = {}) => ({ kind: "lathe", material, segs: 48, body: true, arc: BACK, profile, ...extra });
|
|
14
|
+
const box = (material, a, b, width, depth) => strut(material, a, b, width, depth, { plain: false });
|
|
15
|
+
function seat(x, y, z) {
|
|
16
|
+
return [
|
|
17
|
+
box("white", [x, y, z - 0.3], [x, y + 0.82, z - 0.62], 0.58, 0.1),
|
|
18
|
+
box("black", [x, y + 0.02, z - 0.28], [x, y + 0.08, z + 0.26], 0.54, 0.12),
|
|
19
|
+
box("black", [x, y + 0.72, z - 0.5], [x, y + 0.84, z - 0.54], 0.3, 0.14),
|
|
20
|
+
];
|
|
21
|
+
}
|
|
22
|
+
/** A plain person for scale, standing. */
|
|
23
|
+
function person(x, y, z) {
|
|
24
|
+
const tall = 1.8;
|
|
25
|
+
const head = 0.12;
|
|
26
|
+
const at = [x, z];
|
|
27
|
+
return [
|
|
28
|
+
{ kind: "lathe", material: "engine-pale", at, segs: 12, profile: [[0.14, y], [0.2, y + tall * 0.5], [0.23, y + tall * 0.8], [0.09, y + tall - 2 * head]] },
|
|
29
|
+
{ kind: "lathe", material: "engine-pale", at, segs: 12, profile: [[0.001, y + tall - 2 * head], [head * 0.72, y + tall - 1.72 * head], [head, y + tall - head], [head * 0.72, y + tall - 0.28 * head], [0.001, y + tall]] },
|
|
30
|
+
];
|
|
31
|
+
}
|
|
32
|
+
function inside() {
|
|
33
|
+
const inner = OUTER.map(([r, y]) => [Math.max(0.001, r * 0.93), y + 0.03]).reverse();
|
|
34
|
+
const out = [
|
|
35
|
+
shell(OUTER, "white", { outline: true, rings: [N + 0.3, SHOULDER] }),
|
|
36
|
+
// the inner wall, seen through the cut
|
|
37
|
+
shell(inner, "engine-pale"),
|
|
38
|
+
{ kind: "lathe", material: "soot", segs: 40, under: true, profile: [[0, 0], [R * 0.72, 0], [R * 0.9, N]], rings: [N] },
|
|
39
|
+
// the floor and the cut edge of the shell
|
|
40
|
+
{ kind: "lathe", material: "dark", segs: 40, body: true, profile: [[R * 0.86, FLOOR_Y], [0.001, FLOOR_Y]] },
|
|
41
|
+
// the cargo under the centre seats
|
|
42
|
+
box("engine-pale", [-0.55, FLOOR_Y, 0.1], [-0.55, FLOOR_Y + 0.5, 0.1], 0.5, 0.55),
|
|
43
|
+
box("engine-metal", [0, FLOOR_Y, 0.15], [0, FLOOR_Y + 0.46, 0.15], 0.4, 0.55),
|
|
44
|
+
box("engine-pale", [0.55, FLOOR_Y, 0.1], [0.55, FLOOR_Y + 0.5, 0.1], 0.5, 0.55),
|
|
45
|
+
// the two centre seats, higher, and the outer two
|
|
46
|
+
...seat(-0.34, FLOOR_Y + 0.72, -0.15),
|
|
47
|
+
...seat(0.34, FLOOR_Y + 0.72, -0.15),
|
|
48
|
+
...seat(-1.02, FLOOR_Y + 0.42, -0.42),
|
|
49
|
+
...seat(1.02, FLOOR_Y + 0.42, -0.42),
|
|
50
|
+
// the panel over the centre seats, with its three screens
|
|
51
|
+
box("engine-metal", [0, FLOOR_Y + 1.62, 0.22], [0, FLOOR_Y + 1.92, 0.08], 1.34, 0.08),
|
|
52
|
+
...[-0.42, 0, 0.42].map((x) => box("glass", [x, FLOOR_Y + 1.66, 0.25], [x, FLOOR_Y + 1.88, 0.15], 0.38, 0.03)),
|
|
53
|
+
// a window on each side of the cabin, and the docking port in the ceiling
|
|
54
|
+
...[-1, 1].map((side) => box("glass", [side * 1.36, FLOOR_Y + 0.96, -0.1], [side * 1.2, FLOOR_Y + 1.24, -0.1], 0.3, 0.06)),
|
|
55
|
+
{ kind: "lathe", material: "engine-metal", segs: 20, body: true, profile: [[0.38, H * 0.8], [0.38, H * 0.86], [0.001, H * 0.86]] },
|
|
56
|
+
...person(1.5, FLOOR_Y, 0.9),
|
|
57
|
+
];
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
export const DRAGON_INSIDE_BUILDS = [
|
|
61
|
+
{
|
|
62
|
+
rocket: "dragon",
|
|
63
|
+
variant: "crew-dragon-inside",
|
|
64
|
+
drawnFrom: "This package's code. The outside is Dragon 2's sourced size; its four seats, panel and cargo are from its article, placed by eye from one published picture of the cabin. Their sizes have no source. Cut open to look inside: the real capsule's front half is not drawn. The figure of 1.8 m is for scale.",
|
|
65
|
+
parts: [{ slot: "capsule", kind: "capsule", name: "Inside Crew Dragon, cut open", height: H, diameter: R * 2, pieces: inside }],
|
|
66
|
+
},
|
|
67
|
+
];
|