@johnmorrisdotca/uchusen-rockets 0.0.0-stage → 0.1.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 +12 -0
- package/LICENSE +21 -0
- package/LICENSES/CC-BY-4.0.txt +396 -0
- package/LICENSES/MIT.txt +21 -0
- package/NOTICE.md +66 -0
- package/README.md +171 -2
- package/dist/assets/dragon-dragon-1-apart.painted.svg +1 -0
- package/dist/assets/dragon-dragon-1-apart.svg +1 -0
- package/dist/assets/dragon-dragon-1-apart.thick.svg +1 -0
- package/dist/assets/dragon-dragon-1-capsule.glb +0 -0
- package/dist/assets/dragon-dragon-1-capsule.painted.svg +1 -0
- package/dist/assets/dragon-dragon-1-capsule.svg +1 -0
- package/dist/assets/dragon-dragon-1-capsule.thick.svg +1 -0
- package/dist/assets/dragon-dragon-1-trunk.glb +0 -0
- package/dist/assets/dragon-dragon-1-trunk.painted.svg +1 -0
- package/dist/assets/dragon-dragon-1-trunk.svg +1 -0
- package/dist/assets/dragon-dragon-1-trunk.thick.svg +1 -0
- package/dist/assets/dragon-dragon-1.glb +0 -0
- package/dist/assets/dragon-dragon-1.painted.svg +1 -0
- package/dist/assets/dragon-dragon-1.svg +1 -0
- package/dist/assets/dragon-dragon-1.thick.svg +1 -0
- package/dist/assets/dragon-dragon-2-apart.painted.svg +1 -0
- package/dist/assets/dragon-dragon-2-apart.svg +1 -0
- package/dist/assets/dragon-dragon-2-apart.thick.svg +1 -0
- package/dist/assets/dragon-dragon-2-capsule.glb +0 -0
- package/dist/assets/dragon-dragon-2-capsule.painted.svg +1 -0
- package/dist/assets/dragon-dragon-2-capsule.svg +1 -0
- package/dist/assets/dragon-dragon-2-capsule.thick.svg +1 -0
- package/dist/assets/dragon-dragon-2-trunk.glb +0 -0
- package/dist/assets/dragon-dragon-2-trunk.painted.svg +1 -0
- package/dist/assets/dragon-dragon-2-trunk.svg +1 -0
- package/dist/assets/dragon-dragon-2-trunk.thick.svg +1 -0
- package/dist/assets/dragon-dragon-2.glb +0 -0
- package/dist/assets/dragon-dragon-2.painted.svg +1 -0
- package/dist/assets/dragon-dragon-2.svg +1 -0
- package/dist/assets/dragon-dragon-2.thick.svg +1 -0
- package/dist/assets/falcon-9-block-5-apart.painted.svg +1 -0
- package/dist/assets/falcon-9-block-5-apart.svg +1 -0
- package/dist/assets/falcon-9-block-5-apart.thick.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2-apart.painted.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2-apart.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2-apart.thick.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2-capsule.glb +0 -0
- package/dist/assets/falcon-9-block-5-dragon-2-capsule.painted.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2-capsule.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2-capsule.thick.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2-first-stage.glb +0 -0
- package/dist/assets/falcon-9-block-5-dragon-2-first-stage.painted.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2-first-stage.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2-first-stage.thick.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2-second-stage.glb +0 -0
- package/dist/assets/falcon-9-block-5-dragon-2-second-stage.painted.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2-second-stage.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2-second-stage.thick.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2-trunk.glb +0 -0
- package/dist/assets/falcon-9-block-5-dragon-2-trunk.painted.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2-trunk.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2-trunk.thick.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2.glb +0 -0
- package/dist/assets/falcon-9-block-5-dragon-2.painted.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2.svg +1 -0
- package/dist/assets/falcon-9-block-5-dragon-2.thick.svg +1 -0
- package/dist/assets/falcon-9-block-5-fairing.glb +0 -0
- package/dist/assets/falcon-9-block-5-fairing.painted.svg +1 -0
- package/dist/assets/falcon-9-block-5-fairing.svg +1 -0
- package/dist/assets/falcon-9-block-5-fairing.thick.svg +1 -0
- package/dist/assets/falcon-9-block-5-first-stage.glb +0 -0
- package/dist/assets/falcon-9-block-5-first-stage.painted.svg +1 -0
- package/dist/assets/falcon-9-block-5-first-stage.svg +1 -0
- package/dist/assets/falcon-9-block-5-first-stage.thick.svg +1 -0
- package/dist/assets/falcon-9-block-5-second-stage.glb +0 -0
- package/dist/assets/falcon-9-block-5-second-stage.painted.svg +1 -0
- package/dist/assets/falcon-9-block-5-second-stage.svg +1 -0
- package/dist/assets/falcon-9-block-5-second-stage.thick.svg +1 -0
- package/dist/assets/falcon-9-block-5.glb +0 -0
- package/dist/assets/falcon-9-block-5.painted.svg +1 -0
- package/dist/assets/falcon-9-block-5.svg +1 -0
- package/dist/assets/falcon-9-block-5.thick.svg +1 -0
- package/dist/assets/falcon-9-ft-apart.painted.svg +1 -0
- package/dist/assets/falcon-9-ft-apart.svg +1 -0
- package/dist/assets/falcon-9-ft-apart.thick.svg +1 -0
- package/dist/assets/falcon-9-ft-fairing.glb +0 -0
- package/dist/assets/falcon-9-ft-fairing.painted.svg +1 -0
- package/dist/assets/falcon-9-ft-fairing.svg +1 -0
- package/dist/assets/falcon-9-ft-fairing.thick.svg +1 -0
- package/dist/assets/falcon-9-ft-first-stage.glb +0 -0
- package/dist/assets/falcon-9-ft-first-stage.painted.svg +1 -0
- package/dist/assets/falcon-9-ft-first-stage.svg +1 -0
- package/dist/assets/falcon-9-ft-first-stage.thick.svg +1 -0
- package/dist/assets/falcon-9-ft-second-stage.glb +0 -0
- package/dist/assets/falcon-9-ft-second-stage.painted.svg +1 -0
- package/dist/assets/falcon-9-ft-second-stage.svg +1 -0
- package/dist/assets/falcon-9-ft-second-stage.thick.svg +1 -0
- package/dist/assets/falcon-9-ft.glb +0 -0
- package/dist/assets/falcon-9-ft.painted.svg +1 -0
- package/dist/assets/falcon-9-ft.svg +1 -0
- package/dist/assets/falcon-9-ft.thick.svg +1 -0
- package/dist/assets/falcon-9-v1.0-apart.painted.svg +1 -0
- package/dist/assets/falcon-9-v1.0-apart.svg +1 -0
- package/dist/assets/falcon-9-v1.0-apart.thick.svg +1 -0
- package/dist/assets/falcon-9-v1.0-fairing.glb +0 -0
- package/dist/assets/falcon-9-v1.0-fairing.painted.svg +1 -0
- package/dist/assets/falcon-9-v1.0-fairing.svg +1 -0
- package/dist/assets/falcon-9-v1.0-fairing.thick.svg +1 -0
- package/dist/assets/falcon-9-v1.0-first-stage.glb +0 -0
- package/dist/assets/falcon-9-v1.0-first-stage.painted.svg +1 -0
- package/dist/assets/falcon-9-v1.0-first-stage.svg +1 -0
- package/dist/assets/falcon-9-v1.0-first-stage.thick.svg +1 -0
- package/dist/assets/falcon-9-v1.0-second-stage.glb +0 -0
- package/dist/assets/falcon-9-v1.0-second-stage.painted.svg +1 -0
- package/dist/assets/falcon-9-v1.0-second-stage.svg +1 -0
- package/dist/assets/falcon-9-v1.0-second-stage.thick.svg +1 -0
- package/dist/assets/falcon-9-v1.0.glb +0 -0
- package/dist/assets/falcon-9-v1.0.painted.svg +1 -0
- package/dist/assets/falcon-9-v1.0.svg +1 -0
- package/dist/assets/falcon-9-v1.0.thick.svg +1 -0
- package/dist/assets/falcon-9-v1.1-apart.painted.svg +1 -0
- package/dist/assets/falcon-9-v1.1-apart.svg +1 -0
- package/dist/assets/falcon-9-v1.1-apart.thick.svg +1 -0
- package/dist/assets/falcon-9-v1.1-fairing.glb +0 -0
- package/dist/assets/falcon-9-v1.1-fairing.painted.svg +1 -0
- package/dist/assets/falcon-9-v1.1-fairing.svg +1 -0
- package/dist/assets/falcon-9-v1.1-fairing.thick.svg +1 -0
- package/dist/assets/falcon-9-v1.1-first-stage.glb +0 -0
- package/dist/assets/falcon-9-v1.1-first-stage.painted.svg +1 -0
- package/dist/assets/falcon-9-v1.1-first-stage.svg +1 -0
- package/dist/assets/falcon-9-v1.1-first-stage.thick.svg +1 -0
- package/dist/assets/falcon-9-v1.1-second-stage.glb +0 -0
- package/dist/assets/falcon-9-v1.1-second-stage.painted.svg +1 -0
- package/dist/assets/falcon-9-v1.1-second-stage.svg +1 -0
- package/dist/assets/falcon-9-v1.1-second-stage.thick.svg +1 -0
- package/dist/assets/falcon-9-v1.1.glb +0 -0
- package/dist/assets/falcon-9-v1.1.painted.svg +1 -0
- package/dist/assets/falcon-9-v1.1.svg +1 -0
- package/dist/assets/falcon-9-v1.1.thick.svg +1 -0
- package/dist/assets/falcon-heavy-falcon-heavy-apart.painted.svg +1 -0
- package/dist/assets/falcon-heavy-falcon-heavy-apart.svg +1 -0
- package/dist/assets/falcon-heavy-falcon-heavy-apart.thick.svg +1 -0
- package/dist/assets/falcon-heavy-falcon-heavy-centre.glb +0 -0
- package/dist/assets/falcon-heavy-falcon-heavy-centre.painted.svg +1 -0
- package/dist/assets/falcon-heavy-falcon-heavy-centre.svg +1 -0
- package/dist/assets/falcon-heavy-falcon-heavy-centre.thick.svg +1 -0
- package/dist/assets/falcon-heavy-falcon-heavy-side-left.glb +0 -0
- package/dist/assets/falcon-heavy-falcon-heavy-side-left.painted.svg +1 -0
- package/dist/assets/falcon-heavy-falcon-heavy-side-left.svg +1 -0
- package/dist/assets/falcon-heavy-falcon-heavy-side-left.thick.svg +1 -0
- package/dist/assets/falcon-heavy-falcon-heavy-side-right.glb +0 -0
- package/dist/assets/falcon-heavy-falcon-heavy-side-right.painted.svg +1 -0
- package/dist/assets/falcon-heavy-falcon-heavy-side-right.svg +1 -0
- package/dist/assets/falcon-heavy-falcon-heavy-side-right.thick.svg +1 -0
- package/dist/assets/falcon-heavy-falcon-heavy.glb +0 -0
- package/dist/assets/falcon-heavy-falcon-heavy.painted.svg +1 -0
- package/dist/assets/falcon-heavy-falcon-heavy.svg +1 -0
- package/dist/assets/falcon-heavy-falcon-heavy.thick.svg +1 -0
- package/dist/assets/grasshopper-grasshopper.glb +0 -0
- package/dist/assets/grasshopper-grasshopper.painted.svg +1 -0
- package/dist/assets/grasshopper-grasshopper.svg +1 -0
- package/dist/assets/grasshopper-grasshopper.thick.svg +1 -0
- package/dist/assets/models/dragon-dragon-1-capsule.glb +0 -0
- package/dist/assets/models/dragon-dragon-1-trunk.glb +0 -0
- package/dist/assets/models/dragon-dragon-2-capsule.glb +0 -0
- package/dist/assets/models/dragon-dragon-2-trunk.glb +0 -0
- package/dist/assets/models/falcon-9-block-5-fairing.glb +0 -0
- package/dist/assets/models/falcon-9-block-5-first-stage.glb +0 -0
- package/dist/assets/models/falcon-9-block-5-second-stage.glb +0 -0
- package/dist/assets/models/falcon-heavy-falcon-heavy-centre.glb +0 -0
- package/dist/assets/models/falcon-heavy-falcon-heavy-side-left.glb +0 -0
- package/dist/assets/models/falcon-heavy-falcon-heavy-side-right.glb +0 -0
- package/dist/assets/models/grasshopper-grasshopper-vehicle.glb +0 -0
- package/dist/assets/models/starship-2019-ship.glb +0 -0
- package/dist/assets/models/starship-v1-flight1-booster.glb +0 -0
- package/dist/assets/models/starship-v1-flight1-ship.glb +0 -0
- package/dist/assets/models/starship-v3-booster.glb +0 -0
- package/dist/assets/models/starship-v3-ship.glb +0 -0
- package/dist/assets/parts/flap-aft.glb +0 -0
- package/dist/assets/parts/flap-aft.painted.svg +1 -0
- package/dist/assets/parts/flap-aft.svg +1 -0
- package/dist/assets/parts/flap-aft.thick.svg +1 -0
- package/dist/assets/parts/flap-forward.glb +0 -0
- package/dist/assets/parts/flap-forward.painted.svg +1 -0
- package/dist/assets/parts/flap-forward.svg +1 -0
- package/dist/assets/parts/flap-forward.thick.svg +1 -0
- package/dist/assets/parts/grid-fin-four.glb +0 -0
- package/dist/assets/parts/grid-fin-four.painted.svg +1 -0
- package/dist/assets/parts/grid-fin-four.svg +1 -0
- package/dist/assets/parts/grid-fin-four.thick.svg +1 -0
- package/dist/assets/parts/grid-fin-three.glb +0 -0
- package/dist/assets/parts/grid-fin-three.painted.svg +1 -0
- package/dist/assets/parts/grid-fin-three.svg +1 -0
- package/dist/assets/parts/grid-fin-three.thick.svg +1 -0
- package/dist/assets/parts/merlin-sea-level.glb +0 -0
- package/dist/assets/parts/merlin-sea-level.painted.svg +1 -0
- package/dist/assets/parts/merlin-sea-level.svg +1 -0
- package/dist/assets/parts/merlin-sea-level.thick.svg +1 -0
- package/dist/assets/parts/raptor-sea-level.glb +0 -0
- package/dist/assets/parts/raptor-sea-level.painted.svg +1 -0
- package/dist/assets/parts/raptor-sea-level.svg +1 -0
- package/dist/assets/parts/raptor-sea-level.thick.svg +1 -0
- package/dist/assets/parts/raptor-vacuum.glb +0 -0
- package/dist/assets/parts/raptor-vacuum.painted.svg +1 -0
- package/dist/assets/parts/raptor-vacuum.svg +1 -0
- package/dist/assets/parts/raptor-vacuum.thick.svg +1 -0
- package/dist/assets/starship-2019.glb +0 -0
- package/dist/assets/starship-2019.painted.svg +1 -0
- package/dist/assets/starship-2019.svg +1 -0
- package/dist/assets/starship-2019.thick.svg +1 -0
- package/dist/assets/starship-v1-apart.painted.svg +1 -0
- package/dist/assets/starship-v1-apart.svg +1 -0
- package/dist/assets/starship-v1-apart.thick.svg +1 -0
- package/dist/assets/starship-v1-booster.glb +0 -0
- package/dist/assets/starship-v1-booster.painted.svg +1 -0
- package/dist/assets/starship-v1-booster.svg +1 -0
- package/dist/assets/starship-v1-booster.thick.svg +1 -0
- package/dist/assets/starship-v1-flight1-apart.painted.svg +1 -0
- package/dist/assets/starship-v1-flight1-apart.svg +1 -0
- package/dist/assets/starship-v1-flight1-apart.thick.svg +1 -0
- package/dist/assets/starship-v1-flight1-booster.glb +0 -0
- package/dist/assets/starship-v1-flight1-booster.painted.svg +1 -0
- package/dist/assets/starship-v1-flight1-booster.svg +1 -0
- package/dist/assets/starship-v1-flight1-booster.thick.svg +1 -0
- package/dist/assets/starship-v1-flight1-ship.glb +0 -0
- package/dist/assets/starship-v1-flight1-ship.painted.svg +1 -0
- package/dist/assets/starship-v1-flight1-ship.svg +1 -0
- package/dist/assets/starship-v1-flight1-ship.thick.svg +1 -0
- package/dist/assets/starship-v1-flight1.glb +0 -0
- package/dist/assets/starship-v1-flight1.painted.svg +1 -0
- package/dist/assets/starship-v1-flight1.svg +1 -0
- package/dist/assets/starship-v1-flight1.thick.svg +1 -0
- package/dist/assets/starship-v1-ship.glb +0 -0
- package/dist/assets/starship-v1-ship.painted.svg +1 -0
- package/dist/assets/starship-v1-ship.svg +1 -0
- package/dist/assets/starship-v1-ship.thick.svg +1 -0
- package/dist/assets/starship-v1.glb +0 -0
- package/dist/assets/starship-v1.painted.svg +1 -0
- package/dist/assets/starship-v1.svg +1 -0
- package/dist/assets/starship-v1.thick.svg +1 -0
- package/dist/assets/starship-v2-apart.painted.svg +1 -0
- package/dist/assets/starship-v2-apart.svg +1 -0
- package/dist/assets/starship-v2-apart.thick.svg +1 -0
- package/dist/assets/starship-v2-booster.glb +0 -0
- package/dist/assets/starship-v2-booster.painted.svg +1 -0
- package/dist/assets/starship-v2-booster.svg +1 -0
- package/dist/assets/starship-v2-booster.thick.svg +1 -0
- package/dist/assets/starship-v2-ship.glb +0 -0
- package/dist/assets/starship-v2-ship.painted.svg +1 -0
- package/dist/assets/starship-v2-ship.svg +1 -0
- package/dist/assets/starship-v2-ship.thick.svg +1 -0
- package/dist/assets/starship-v2.glb +0 -0
- package/dist/assets/starship-v2.painted.svg +1 -0
- package/dist/assets/starship-v2.svg +1 -0
- package/dist/assets/starship-v2.thick.svg +1 -0
- package/dist/assets/starship-v3-apart.painted.svg +1 -0
- package/dist/assets/starship-v3-apart.svg +1 -0
- package/dist/assets/starship-v3-apart.thick.svg +1 -0
- package/dist/assets/starship-v3-booster.glb +0 -0
- package/dist/assets/starship-v3-booster.painted.svg +1 -0
- package/dist/assets/starship-v3-booster.svg +1 -0
- package/dist/assets/starship-v3-booster.thick.svg +1 -0
- package/dist/assets/starship-v3-ship.glb +0 -0
- package/dist/assets/starship-v3-ship.painted.svg +1 -0
- package/dist/assets/starship-v3-ship.svg +1 -0
- package/dist/assets/starship-v3-ship.thick.svg +1 -0
- package/dist/assets/starship-v3.glb +0 -0
- package/dist/assets/starship-v3.painted.svg +1 -0
- package/dist/assets/starship-v3.svg +1 -0
- package/dist/assets/starship-v3.thick.svg +1 -0
- package/dist/assets/starship-v4-apart.painted.svg +1 -0
- package/dist/assets/starship-v4-apart.svg +1 -0
- package/dist/assets/starship-v4-apart.thick.svg +1 -0
- package/dist/assets/starship-v4-booster.glb +0 -0
- package/dist/assets/starship-v4-booster.painted.svg +1 -0
- package/dist/assets/starship-v4-booster.svg +1 -0
- package/dist/assets/starship-v4-booster.thick.svg +1 -0
- package/dist/assets/starship-v4-ship.glb +0 -0
- package/dist/assets/starship-v4-ship.painted.svg +1 -0
- package/dist/assets/starship-v4-ship.svg +1 -0
- package/dist/assets/starship-v4-ship.thick.svg +1 -0
- package/dist/assets/starship-v4.glb +0 -0
- package/dist/assets/starship-v4.painted.svg +1 -0
- package/dist/assets/starship-v4.svg +1 -0
- package/dist/assets/starship-v4.thick.svg +1 -0
- package/dist/build/glb.d.ts +12 -0
- package/dist/build/glb.js +157 -0
- package/dist/build/index.d.ts +59 -0
- package/dist/build/index.js +118 -0
- package/dist/build/lineup.d.ts +40 -0
- package/dist/build/lineup.js +97 -0
- package/dist/crossfade.d.ts +6 -0
- package/dist/crossfade.js +11 -0
- package/dist/data/credits.d.ts +87 -0
- package/dist/data/credits.js +82 -0
- package/dist/data/dragon.d.ts +2 -0
- package/dist/data/dragon.js +45 -0
- package/dist/data/falcon.d.ts +3 -0
- package/dist/data/falcon.js +121 -0
- package/dist/data/grasshopper.d.ts +2 -0
- package/dist/data/grasshopper.js +21 -0
- package/dist/data/sources.d.ts +173 -0
- package/dist/data/sources.js +25 -0
- package/dist/data/starship.d.ts +2 -0
- package/dist/data/starship.js +183 -0
- package/dist/data/types.d.ts +48 -0
- package/dist/data/types.js +8 -0
- package/dist/draw/svg.d.ts +26 -0
- package/dist/draw/svg.js +262 -0
- package/dist/element/paint.d.ts +9 -0
- package/dist/element/paint.js +138 -0
- package/dist/element/scene.d.ts +104 -0
- package/dist/element/scene.js +758 -0
- package/dist/element.d.ts +74 -0
- package/dist/element.js +488 -0
- package/dist/fit.d.ts +43 -0
- package/dist/fit.js +93 -0
- package/dist/framing.d.ts +32 -0
- package/dist/framing.js +52 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.js +13 -0
- package/dist/layout.d.ts +17 -0
- package/dist/layout.js +33 -0
- package/dist/looks.d.ts +25 -0
- package/dist/looks.js +36 -0
- package/dist/model/falcon.d.ts +48 -0
- package/dist/model/falcon.js +206 -0
- package/dist/model/materials.d.ts +113 -0
- package/dist/model/materials.js +19 -0
- package/dist/model/pieces.d.ts +91 -0
- package/dist/model/pieces.js +223 -0
- package/dist/model/registry.d.ts +8 -0
- package/dist/model/registry.js +104 -0
- package/dist/model/starship.d.ts +67 -0
- package/dist/model/starship.js +503 -0
- package/dist/parts.d.ts +44 -0
- package/dist/parts.js +1 -0
- package/dist/react.d.ts +314 -0
- package/dist/react.js +8 -0
- package/dist/rockets.d.ts +27 -0
- package/dist/rockets.js +36 -0
- package/dist/tilt.d.ts +21 -0
- package/dist/tilt.js +23 -0
- package/package.json +65 -4
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
// Pictures painted on canvases at run time for the painted look: the panels of a steel hull and a mosaic of tiles. Canvases only, so a page's content security policy needs nothing for them, and made from
|
|
2
|
+
// a seed, so they are the same every time.
|
|
3
|
+
export function canvas(w, h) {
|
|
4
|
+
const c = document.createElement("canvas");
|
|
5
|
+
c.width = w;
|
|
6
|
+
c.height = h;
|
|
7
|
+
return c;
|
|
8
|
+
}
|
|
9
|
+
function seeded(seed) {
|
|
10
|
+
let s = seed >>> 0;
|
|
11
|
+
return () => {
|
|
12
|
+
s = (s + 0x6d2b79f5) >>> 0;
|
|
13
|
+
let t = s;
|
|
14
|
+
t = Math.imul(t ^ (t >>> 15), t | 1);
|
|
15
|
+
t ^= t + Math.imul(t ^ (t >>> 7), t | 61);
|
|
16
|
+
return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
/** One repeat of a stainless hull: panels of slightly different tone, with weld lines between them. Its colour multiplies the steel's. `across` panels wide and `down` rings tall. */
|
|
20
|
+
export function paintSteel(across, down) {
|
|
21
|
+
const size = 1024;
|
|
22
|
+
const c = canvas(size, size);
|
|
23
|
+
const ctx = c.getContext("2d");
|
|
24
|
+
if (!ctx)
|
|
25
|
+
return c;
|
|
26
|
+
const random = seeded(7);
|
|
27
|
+
const w = size / across;
|
|
28
|
+
const h = size / down;
|
|
29
|
+
for (let j = 0; j < down; j++) {
|
|
30
|
+
// the courses of panels are staggered
|
|
31
|
+
const shift = (j % 2) * (w / 2);
|
|
32
|
+
for (let i = -1; i < across; i++) {
|
|
33
|
+
const tone = 228 + Math.round(random() * 22);
|
|
34
|
+
ctx.fillStyle = `rgb(${tone},${tone},${tone + 2})`;
|
|
35
|
+
ctx.fillRect(i * w + shift, j * h, w + 1, h + 1);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
// a little grain along the sheet
|
|
39
|
+
for (let k = 0; k < 2600; k++) {
|
|
40
|
+
const alpha = 0.02 + random() * 0.05;
|
|
41
|
+
ctx.fillStyle = random() > 0.5 ? `rgba(255,255,255,${alpha})` : `rgba(0,0,0,${alpha})`;
|
|
42
|
+
ctx.fillRect(random() * size, random() * size, 1 + random() * 28, 1);
|
|
43
|
+
}
|
|
44
|
+
// weld lines
|
|
45
|
+
ctx.fillStyle = "rgba(58,60,64,0.34)";
|
|
46
|
+
for (let j = 0; j <= down; j++)
|
|
47
|
+
ctx.fillRect(0, j * h - 1, size, 2);
|
|
48
|
+
for (let j = 0; j < down; j++)
|
|
49
|
+
for (let i = -1; i <= across; i++)
|
|
50
|
+
ctx.fillRect(i * w + (j % 2) * (w / 2) - 0.7, j * h, 1.4, h);
|
|
51
|
+
return c;
|
|
52
|
+
}
|
|
53
|
+
/** A mosaic of hexagonal tiles in black with hair-thin gaps. `across` flats wide in one repeat. */
|
|
54
|
+
export function paintTiles(across) {
|
|
55
|
+
const size = 1024;
|
|
56
|
+
const c = canvas(size, size);
|
|
57
|
+
const ctx = c.getContext("2d");
|
|
58
|
+
if (!ctx)
|
|
59
|
+
return c;
|
|
60
|
+
ctx.fillStyle = "#3a3c40";
|
|
61
|
+
ctx.fillRect(0, 0, size, size);
|
|
62
|
+
const random = seeded(11);
|
|
63
|
+
const flat = size / across;
|
|
64
|
+
const r = flat / Math.sqrt(3);
|
|
65
|
+
const rowH = r * 1.5;
|
|
66
|
+
const rows = Math.round(size / rowH / 2) * 2;
|
|
67
|
+
const stepY = size / rows;
|
|
68
|
+
for (let j = -1; j <= rows; j++)
|
|
69
|
+
for (let i = -1; i <= across; i++) {
|
|
70
|
+
const x = (i + (j % 2 ? 0.5 : 0)) * flat;
|
|
71
|
+
const y = j * stepY;
|
|
72
|
+
const tone = 13 + Math.round(random() * 12);
|
|
73
|
+
ctx.fillStyle = `rgb(${tone},${tone},${tone + 1})`;
|
|
74
|
+
ctx.beginPath();
|
|
75
|
+
for (let k = 0; k < 6; k++) {
|
|
76
|
+
const a = Math.PI / 6 + (k * Math.PI) / 3;
|
|
77
|
+
const px = x + (r - 0.9) * Math.cos(a);
|
|
78
|
+
const py = y + (r - 0.9) * Math.sin(a);
|
|
79
|
+
if (k === 0)
|
|
80
|
+
ctx.moveTo(px, py);
|
|
81
|
+
else
|
|
82
|
+
ctx.lineTo(px, py);
|
|
83
|
+
}
|
|
84
|
+
ctx.closePath();
|
|
85
|
+
ctx.fill();
|
|
86
|
+
}
|
|
87
|
+
return c;
|
|
88
|
+
}
|
|
89
|
+
/** A soft round glow: the pool of light under a rocket. */
|
|
90
|
+
export function paintGlow(inner, outer) {
|
|
91
|
+
const n = 128;
|
|
92
|
+
const c = canvas(n, n);
|
|
93
|
+
const ctx = c.getContext("2d");
|
|
94
|
+
if (!ctx)
|
|
95
|
+
return c;
|
|
96
|
+
const g = ctx.createRadialGradient(n / 2, n / 2, 0, n / 2, n / 2, n / 2);
|
|
97
|
+
g.addColorStop(0, inner);
|
|
98
|
+
g.addColorStop(1, outer);
|
|
99
|
+
ctx.fillStyle = g;
|
|
100
|
+
ctx.fillRect(0, 0, n, n);
|
|
101
|
+
return c;
|
|
102
|
+
}
|
|
103
|
+
/** A day's sky for reflections, wrapped round a sphere: bright to the horizon, a pale ground, and tall dark and bright streaks, which is what gives a steel hull its long vertical sheen. */
|
|
104
|
+
export function paintSky() {
|
|
105
|
+
const w = 1024;
|
|
106
|
+
const h = 512;
|
|
107
|
+
const c = canvas(w, h);
|
|
108
|
+
const ctx = c.getContext("2d");
|
|
109
|
+
if (!ctx)
|
|
110
|
+
return c;
|
|
111
|
+
const g = ctx.createLinearGradient(0, 0, 0, h);
|
|
112
|
+
g.addColorStop(0, "#7fa6d6");
|
|
113
|
+
g.addColorStop(0.42, "#dfe9f2");
|
|
114
|
+
g.addColorStop(0.5, "#fbfbf8");
|
|
115
|
+
g.addColorStop(0.53, "#b9b3a6");
|
|
116
|
+
g.addColorStop(1, "#6d6a63");
|
|
117
|
+
ctx.fillStyle = g;
|
|
118
|
+
ctx.fillRect(0, 0, w, h);
|
|
119
|
+
const streaks = [
|
|
120
|
+
[0.04, 0.05, "rgba(40,48,60,0.62)"],
|
|
121
|
+
[0.22, 0.03, "rgba(255,255,255,0.95)"],
|
|
122
|
+
[0.36, 0.09, "rgba(38,46,58,0.5)"],
|
|
123
|
+
[0.55, 0.04, "rgba(255,255,255,0.8)"],
|
|
124
|
+
[0.7, 0.07, "rgba(40,48,60,0.58)"],
|
|
125
|
+
[0.86, 0.03, "rgba(255,255,255,0.9)"],
|
|
126
|
+
];
|
|
127
|
+
for (const [at, width, colour] of streaks) {
|
|
128
|
+
const x = at * w;
|
|
129
|
+
const half = (width * w) / 2;
|
|
130
|
+
const s = ctx.createLinearGradient(x - half, 0, x + half, 0);
|
|
131
|
+
s.addColorStop(0, colour.replace(/[\d.]+\)$/, "0)"));
|
|
132
|
+
s.addColorStop(0.5, colour);
|
|
133
|
+
s.addColorStop(1, colour.replace(/[\d.]+\)$/, "0)"));
|
|
134
|
+
ctx.fillStyle = s;
|
|
135
|
+
ctx.fillRect(x - half, h * 0.12, half * 2, h * 0.68);
|
|
136
|
+
}
|
|
137
|
+
return c;
|
|
138
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import type { Built } from "../build/index.ts";
|
|
2
|
+
import { type Angle } from "../framing.ts";
|
|
3
|
+
import { type LookName } from "../looks.ts";
|
|
4
|
+
export interface ViewerOptions {
|
|
5
|
+
label: string;
|
|
6
|
+
reducedMotion: boolean;
|
|
7
|
+
onLost: () => void;
|
|
8
|
+
/** Where the licensed models are. */
|
|
9
|
+
assets: string;
|
|
10
|
+
/** Tells the page which painted parts have come in. */
|
|
11
|
+
onPainted: (state: string) => void;
|
|
12
|
+
}
|
|
13
|
+
export interface Spin {
|
|
14
|
+
/** Seconds a turn, 0 for not at all. */
|
|
15
|
+
seconds: number;
|
|
16
|
+
way: "cw" | "ccw";
|
|
17
|
+
}
|
|
18
|
+
export declare class RocketViewer {
|
|
19
|
+
readonly canvas: HTMLCanvasElement;
|
|
20
|
+
frames: number;
|
|
21
|
+
private holder;
|
|
22
|
+
private options;
|
|
23
|
+
private renderer;
|
|
24
|
+
private environment;
|
|
25
|
+
private scene;
|
|
26
|
+
private camera;
|
|
27
|
+
private root;
|
|
28
|
+
private parts;
|
|
29
|
+
private built;
|
|
30
|
+
private look;
|
|
31
|
+
private show;
|
|
32
|
+
private generation;
|
|
33
|
+
private materialCache;
|
|
34
|
+
private outlineMaterial;
|
|
35
|
+
private textures;
|
|
36
|
+
private steelMap;
|
|
37
|
+
private tileMap;
|
|
38
|
+
private glow;
|
|
39
|
+
private controls;
|
|
40
|
+
private clock;
|
|
41
|
+
private frame;
|
|
42
|
+
private visible;
|
|
43
|
+
private lastActive;
|
|
44
|
+
private needsDraw;
|
|
45
|
+
private pose;
|
|
46
|
+
private tilt;
|
|
47
|
+
private resize;
|
|
48
|
+
private disposed;
|
|
49
|
+
constructor(holder: HTMLElement, options: ViewerOptions);
|
|
50
|
+
private homeAngle;
|
|
51
|
+
setLabel(label: string): void;
|
|
52
|
+
/** Loads a rocket and shows it. The camera's angle stays when a rocket is already showing. */
|
|
53
|
+
load(built: Built, show: string, look: LookName, angle: Angle | null): Promise<void>;
|
|
54
|
+
/** Moves the parts from the packed nodes into `into`, keeping each mesh's own placement. */
|
|
55
|
+
private takeMeshes;
|
|
56
|
+
/** Lines of a set width in pixels, whatever the distance. */
|
|
57
|
+
private fatLines;
|
|
58
|
+
/** The drawing's own colours for a material in a line look: a body that darkens to its edges, as the drawing's gradient does. */
|
|
59
|
+
private lineMaterial;
|
|
60
|
+
/** True materials: a stainless hull with its panels, black tiles, dark bells. */
|
|
61
|
+
private paintedMaterial;
|
|
62
|
+
/** Black tiles are matt: without this a bright sky washes them grey. */
|
|
63
|
+
private dullTile;
|
|
64
|
+
private repeating;
|
|
65
|
+
/** One of the three looks. The camera does not move. */
|
|
66
|
+
setLook(look: LookName): void;
|
|
67
|
+
/** Which painted parts are in: "model" when all come from a licensed model, "code" when this package's own paint, "loading" while one is on its way. */
|
|
68
|
+
private reportPainted;
|
|
69
|
+
/** The licensed model of a part, fetched the first time the painted look asks for it. Until it is in, and if it fails, this package's own paint shows. */
|
|
70
|
+
private useModel;
|
|
71
|
+
/** Together, apart, or one part alone: an animated move, or a cut under reduced motion. */
|
|
72
|
+
setShow(show: string): void;
|
|
73
|
+
private framingFor;
|
|
74
|
+
private applyFraming;
|
|
75
|
+
private limits;
|
|
76
|
+
/** The tile mosaic is drawn at a constant size on screen, as the drawing's is. */
|
|
77
|
+
private updateHexSize;
|
|
78
|
+
private startPose;
|
|
79
|
+
private finishParts;
|
|
80
|
+
/** Where the camera is looking from. */
|
|
81
|
+
currentAngle(): Angle;
|
|
82
|
+
/** Turns to look from an angle. */
|
|
83
|
+
setAngle(angle: Angle, animate: boolean): void;
|
|
84
|
+
private frameTo;
|
|
85
|
+
private setAngleKeepingSpin;
|
|
86
|
+
setHome(angle: Angle): void;
|
|
87
|
+
setVisible(visible: boolean): void;
|
|
88
|
+
setSpin(spin: Spin): void;
|
|
89
|
+
setTilt(azimuthDeg: number, polarDeg: number): void;
|
|
90
|
+
dispose(): void;
|
|
91
|
+
private disposeTree;
|
|
92
|
+
private addGlow;
|
|
93
|
+
/** The pool of light is as wide as what stands in it. */
|
|
94
|
+
private fitGlow;
|
|
95
|
+
private onVisibility;
|
|
96
|
+
private touched;
|
|
97
|
+
private wake;
|
|
98
|
+
private tick;
|
|
99
|
+
private syncSizes;
|
|
100
|
+
private fit;
|
|
101
|
+
private orbit;
|
|
102
|
+
private key;
|
|
103
|
+
private zoom;
|
|
104
|
+
}
|