@johnmorrisdotca/uchusen-rockets 0.18.0 → 0.19.1
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 +30 -4
- package/NOTICE.md +22 -4
- package/README.md +16 -11
- package/dist/assets/hubble-hubble-aft-shroud.glb +0 -0
- package/dist/assets/hubble-hubble-aft-shroud.painted.svg +1 -0
- package/dist/assets/hubble-hubble-aft-shroud.svg +1 -0
- package/dist/assets/hubble-hubble-aft-shroud.thick.svg +1 -0
- package/dist/assets/hubble-hubble-antenna-far.glb +0 -0
- package/dist/assets/hubble-hubble-antenna-far.painted.svg +1 -0
- package/dist/assets/hubble-hubble-antenna-far.svg +1 -0
- package/dist/assets/hubble-hubble-antenna-far.thick.svg +1 -0
- package/dist/assets/hubble-hubble-antenna-near.glb +0 -0
- package/dist/assets/hubble-hubble-antenna-near.painted.svg +1 -0
- package/dist/assets/hubble-hubble-antenna-near.svg +1 -0
- package/dist/assets/hubble-hubble-antenna-near.thick.svg +1 -0
- package/dist/assets/hubble-hubble-apart.painted.svg +1 -0
- package/dist/assets/hubble-hubble-apart.svg +1 -0
- package/dist/assets/hubble-hubble-apart.thick.svg +1 -0
- package/dist/assets/hubble-hubble-aperture-door.glb +0 -0
- package/dist/assets/hubble-hubble-aperture-door.painted.svg +1 -0
- package/dist/assets/hubble-hubble-aperture-door.svg +1 -0
- package/dist/assets/hubble-hubble-aperture-door.thick.svg +1 -0
- package/dist/assets/hubble-hubble-array-left.glb +0 -0
- package/dist/assets/hubble-hubble-array-left.painted.svg +1 -0
- package/dist/assets/hubble-hubble-array-left.svg +1 -0
- package/dist/assets/hubble-hubble-array-left.thick.svg +1 -0
- package/dist/assets/hubble-hubble-array-right.glb +0 -0
- package/dist/assets/hubble-hubble-array-right.painted.svg +1 -0
- package/dist/assets/hubble-hubble-array-right.svg +1 -0
- package/dist/assets/hubble-hubble-array-right.thick.svg +1 -0
- package/dist/assets/hubble-hubble-equipment-section.glb +0 -0
- package/dist/assets/hubble-hubble-equipment-section.painted.svg +1 -0
- package/dist/assets/hubble-hubble-equipment-section.svg +1 -0
- package/dist/assets/hubble-hubble-equipment-section.thick.svg +1 -0
- package/dist/assets/hubble-hubble-forward-shell.glb +0 -0
- package/dist/assets/hubble-hubble-forward-shell.painted.svg +1 -0
- package/dist/assets/hubble-hubble-forward-shell.svg +1 -0
- package/dist/assets/hubble-hubble-forward-shell.thick.svg +1 -0
- package/dist/assets/hubble-hubble-light-shield.glb +0 -0
- package/dist/assets/hubble-hubble-light-shield.painted.svg +1 -0
- package/dist/assets/hubble-hubble-light-shield.svg +1 -0
- package/dist/assets/hubble-hubble-light-shield.thick.svg +1 -0
- package/dist/assets/hubble-hubble.glb +0 -0
- package/dist/assets/hubble-hubble.painted.svg +1 -1
- package/dist/assets/hubble-hubble.svg +1 -1
- package/dist/assets/hubble-hubble.thick.svg +1 -1
- package/dist/assets/iss-iss-airlock.glb +0 -0
- package/dist/assets/iss-iss-airlock.painted.svg +1 -0
- package/dist/assets/iss-iss-airlock.svg +1 -0
- package/dist/assets/iss-iss-airlock.thick.svg +1 -0
- package/dist/assets/iss-iss-apart.painted.svg +1 -0
- package/dist/assets/iss-iss-apart.svg +1 -0
- package/dist/assets/iss-iss-apart.thick.svg +1 -0
- package/dist/assets/iss-iss-arrays-p4.glb +0 -0
- package/dist/assets/iss-iss-arrays-p4.painted.svg +1 -0
- package/dist/assets/iss-iss-arrays-p4.svg +1 -0
- package/dist/assets/iss-iss-arrays-p4.thick.svg +1 -0
- package/dist/assets/iss-iss-arrays-p6.glb +0 -0
- package/dist/assets/iss-iss-arrays-p6.painted.svg +1 -0
- package/dist/assets/iss-iss-arrays-p6.svg +1 -0
- package/dist/assets/iss-iss-arrays-p6.thick.svg +1 -0
- package/dist/assets/iss-iss-arrays-s4.glb +0 -0
- package/dist/assets/iss-iss-arrays-s4.painted.svg +1 -0
- package/dist/assets/iss-iss-arrays-s4.svg +1 -0
- package/dist/assets/iss-iss-arrays-s4.thick.svg +1 -0
- package/dist/assets/iss-iss-arrays-s6.glb +0 -0
- package/dist/assets/iss-iss-arrays-s6.painted.svg +1 -0
- package/dist/assets/iss-iss-arrays-s6.svg +1 -0
- package/dist/assets/iss-iss-arrays-s6.thick.svg +1 -0
- package/dist/assets/iss-iss-columbus.glb +0 -0
- package/dist/assets/iss-iss-columbus.painted.svg +1 -0
- package/dist/assets/iss-iss-columbus.svg +1 -0
- package/dist/assets/iss-iss-columbus.thick.svg +1 -0
- package/dist/assets/iss-iss-destiny.glb +0 -0
- package/dist/assets/iss-iss-destiny.painted.svg +1 -0
- package/dist/assets/iss-iss-destiny.svg +1 -0
- package/dist/assets/iss-iss-destiny.thick.svg +1 -0
- package/dist/assets/iss-iss-harmony.glb +0 -0
- package/dist/assets/iss-iss-harmony.painted.svg +1 -0
- package/dist/assets/iss-iss-harmony.svg +1 -0
- package/dist/assets/iss-iss-harmony.thick.svg +1 -0
- package/dist/assets/iss-iss-kibo.glb +0 -0
- package/dist/assets/iss-iss-kibo.painted.svg +1 -0
- package/dist/assets/iss-iss-kibo.svg +1 -0
- package/dist/assets/iss-iss-kibo.thick.svg +1 -0
- package/dist/assets/iss-iss-radiators-port.glb +0 -0
- package/dist/assets/iss-iss-radiators-port.painted.svg +1 -0
- package/dist/assets/iss-iss-radiators-port.svg +1 -0
- package/dist/assets/iss-iss-radiators-port.thick.svg +1 -0
- package/dist/assets/iss-iss-radiators-starboard.glb +0 -0
- package/dist/assets/iss-iss-radiators-starboard.painted.svg +1 -0
- package/dist/assets/iss-iss-radiators-starboard.svg +1 -0
- package/dist/assets/iss-iss-radiators-starboard.thick.svg +1 -0
- package/dist/assets/iss-iss-soyuz-aft.glb +0 -0
- package/dist/assets/iss-iss-soyuz-aft.painted.svg +1 -0
- package/dist/assets/iss-iss-soyuz-aft.svg +1 -0
- package/dist/assets/iss-iss-soyuz-aft.thick.svg +1 -0
- package/dist/assets/iss-iss-soyuz-zarya-nadir.glb +0 -0
- package/dist/assets/iss-iss-soyuz-zarya-nadir.painted.svg +1 -0
- package/dist/assets/iss-iss-soyuz-zarya-nadir.svg +1 -0
- package/dist/assets/iss-iss-soyuz-zarya-nadir.thick.svg +1 -0
- package/dist/assets/iss-iss-soyuz-zvezda-nadir.glb +0 -0
- package/dist/assets/iss-iss-soyuz-zvezda-nadir.painted.svg +1 -0
- package/dist/assets/iss-iss-soyuz-zvezda-nadir.svg +1 -0
- package/dist/assets/iss-iss-soyuz-zvezda-nadir.thick.svg +1 -0
- package/dist/assets/iss-iss-soyuz-zvezda-zenith.glb +0 -0
- package/dist/assets/iss-iss-soyuz-zvezda-zenith.painted.svg +1 -0
- package/dist/assets/iss-iss-soyuz-zvezda-zenith.svg +1 -0
- package/dist/assets/iss-iss-soyuz-zvezda-zenith.thick.svg +1 -0
- package/dist/assets/iss-iss-truss-p1.glb +0 -0
- package/dist/assets/iss-iss-truss-p1.painted.svg +1 -0
- package/dist/assets/iss-iss-truss-p1.svg +1 -0
- package/dist/assets/iss-iss-truss-p1.thick.svg +1 -0
- package/dist/assets/iss-iss-truss-p3-p4.glb +0 -0
- package/dist/assets/iss-iss-truss-p3-p4.painted.svg +1 -0
- package/dist/assets/iss-iss-truss-p3-p4.svg +1 -0
- package/dist/assets/iss-iss-truss-p3-p4.thick.svg +1 -0
- package/dist/assets/iss-iss-truss-p5.glb +0 -0
- package/dist/assets/iss-iss-truss-p5.painted.svg +1 -0
- package/dist/assets/iss-iss-truss-p5.svg +1 -0
- package/dist/assets/iss-iss-truss-p5.thick.svg +1 -0
- package/dist/assets/iss-iss-truss-p6.glb +0 -0
- package/dist/assets/iss-iss-truss-p6.painted.svg +1 -0
- package/dist/assets/iss-iss-truss-p6.svg +1 -0
- package/dist/assets/iss-iss-truss-p6.thick.svg +1 -0
- package/dist/assets/iss-iss-truss-s0.glb +0 -0
- package/dist/assets/iss-iss-truss-s0.painted.svg +1 -0
- package/dist/assets/iss-iss-truss-s0.svg +1 -0
- package/dist/assets/iss-iss-truss-s0.thick.svg +1 -0
- package/dist/assets/iss-iss-truss-s1.glb +0 -0
- package/dist/assets/iss-iss-truss-s1.painted.svg +1 -0
- package/dist/assets/iss-iss-truss-s1.svg +1 -0
- package/dist/assets/iss-iss-truss-s1.thick.svg +1 -0
- package/dist/assets/iss-iss-truss-s3-s4.glb +0 -0
- package/dist/assets/iss-iss-truss-s3-s4.painted.svg +1 -0
- package/dist/assets/iss-iss-truss-s3-s4.svg +1 -0
- package/dist/assets/iss-iss-truss-s3-s4.thick.svg +1 -0
- package/dist/assets/iss-iss-truss-s5.glb +0 -0
- package/dist/assets/iss-iss-truss-s5.painted.svg +1 -0
- package/dist/assets/iss-iss-truss-s5.svg +1 -0
- package/dist/assets/iss-iss-truss-s5.thick.svg +1 -0
- package/dist/assets/iss-iss-truss-s6.glb +0 -0
- package/dist/assets/iss-iss-truss-s6.painted.svg +1 -0
- package/dist/assets/iss-iss-truss-s6.svg +1 -0
- package/dist/assets/iss-iss-truss-s6.thick.svg +1 -0
- package/dist/assets/iss-iss-unity.glb +0 -0
- package/dist/assets/iss-iss-unity.painted.svg +1 -0
- package/dist/assets/iss-iss-unity.svg +1 -0
- package/dist/assets/iss-iss-unity.thick.svg +1 -0
- package/dist/assets/iss-iss-zarya.glb +0 -0
- package/dist/assets/iss-iss-zarya.painted.svg +1 -0
- package/dist/assets/iss-iss-zarya.svg +1 -0
- package/dist/assets/iss-iss-zarya.thick.svg +1 -0
- package/dist/assets/iss-iss-zvezda.glb +0 -0
- package/dist/assets/iss-iss-zvezda.painted.svg +1 -0
- package/dist/assets/iss-iss-zvezda.svg +1 -0
- package/dist/assets/iss-iss-zvezda.thick.svg +1 -0
- package/dist/assets/iss-iss.glb +0 -0
- package/dist/assets/iss-iss.painted.svg +1 -1
- package/dist/assets/iss-iss.svg +1 -1
- package/dist/assets/iss-iss.thick.svg +1 -1
- package/dist/assets/jupiter-c-jupiter-c-apart.painted.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c-apart.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c-apart.thick.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c-first-stage.glb +0 -0
- package/dist/assets/jupiter-c-jupiter-c-first-stage.painted.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c-first-stage.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c-first-stage.thick.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c-fourth-stage.glb +0 -0
- package/dist/assets/jupiter-c-jupiter-c-fourth-stage.painted.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c-fourth-stage.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c-fourth-stage.thick.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c-tail.glb +0 -0
- package/dist/assets/jupiter-c-jupiter-c-tail.painted.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c-tail.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c-tail.thick.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c-tub.glb +0 -0
- package/dist/assets/jupiter-c-jupiter-c-tub.painted.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c-tub.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c-tub.thick.svg +1 -0
- package/dist/assets/jupiter-c-jupiter-c.glb +0 -0
- package/dist/assets/jupiter-c-jupiter-c.painted.svg +1 -1
- package/dist/assets/jupiter-c-jupiter-c.svg +1 -1
- package/dist/assets/jupiter-c-jupiter-c.thick.svg +1 -1
- package/dist/assets/models/hubble-aft-shroud.glb +0 -0
- package/dist/assets/models/hubble-antenna-far.glb +0 -0
- package/dist/assets/models/hubble-antenna-near.glb +0 -0
- package/dist/assets/models/hubble-aperture-door.glb +0 -0
- package/dist/assets/models/hubble-array-left.glb +0 -0
- package/dist/assets/models/hubble-array-right.glb +0 -0
- package/dist/assets/models/hubble-equipment-section.glb +0 -0
- package/dist/assets/models/hubble-forward-shell.glb +0 -0
- package/dist/assets/models/hubble-light-shield.glb +0 -0
- package/dist/assets/models/iss-airlock.glb +0 -0
- package/dist/assets/models/iss-arrays-p4.glb +0 -0
- package/dist/assets/models/iss-arrays-p6.glb +0 -0
- package/dist/assets/models/iss-arrays-s4.glb +0 -0
- package/dist/assets/models/iss-arrays-s6.glb +0 -0
- package/dist/assets/models/iss-columbus.glb +0 -0
- package/dist/assets/models/iss-destiny.glb +0 -0
- package/dist/assets/models/iss-harmony.glb +0 -0
- package/dist/assets/models/iss-kibo.glb +0 -0
- package/dist/assets/models/iss-radiators-port.glb +0 -0
- package/dist/assets/models/iss-radiators-starboard.glb +0 -0
- package/dist/assets/models/iss-soyuz-aft.glb +0 -0
- package/dist/assets/models/iss-soyuz-zarya-nadir.glb +0 -0
- package/dist/assets/models/iss-soyuz-zvezda-nadir.glb +0 -0
- package/dist/assets/models/iss-soyuz-zvezda-zenith.glb +0 -0
- package/dist/assets/models/iss-truss-p1.glb +0 -0
- package/dist/assets/models/iss-truss-p3-p4.glb +0 -0
- package/dist/assets/models/iss-truss-p5.glb +0 -0
- package/dist/assets/models/iss-truss-p6.glb +0 -0
- package/dist/assets/models/iss-truss-s0.glb +0 -0
- package/dist/assets/models/iss-truss-s1.glb +0 -0
- package/dist/assets/models/iss-truss-s3-s4.glb +0 -0
- package/dist/assets/models/iss-truss-s5.glb +0 -0
- package/dist/assets/models/iss-truss-s6.glb +0 -0
- package/dist/assets/models/iss-unity.glb +0 -0
- package/dist/assets/models/iss-zarya.glb +0 -0
- package/dist/assets/models/iss-zvezda.glb +0 -0
- package/dist/assets/models/jupiter-c-first-stage.glb +0 -0
- package/dist/assets/models/jupiter-c-fourth-stage.glb +0 -0
- package/dist/assets/models/jupiter-c-tail.glb +0 -0
- package/dist/assets/models/jupiter-c-tub.glb +0 -0
- package/dist/assets/models/tiangong-hub.glb +0 -0
- package/dist/assets/models/tiangong-mengtian-arrays.glb +0 -0
- package/dist/assets/models/tiangong-mengtian.glb +0 -0
- package/dist/assets/models/tiangong-shenzhou-forward.glb +0 -0
- package/dist/assets/models/tiangong-shenzhou-nadir.glb +0 -0
- package/dist/assets/models/tiangong-tianhe-arrays.glb +0 -0
- package/dist/assets/models/tiangong-tianhe.glb +0 -0
- package/dist/assets/models/tiangong-tianzhou.glb +0 -0
- package/dist/assets/models/tiangong-wentian-arrays.glb +0 -0
- package/dist/assets/models/tiangong-wentian.glb +0 -0
- package/dist/assets/tiangong-tiangong-apart.painted.svg +1 -0
- package/dist/assets/tiangong-tiangong-apart.svg +1 -0
- package/dist/assets/tiangong-tiangong-apart.thick.svg +1 -0
- package/dist/assets/tiangong-tiangong-hub.glb +0 -0
- package/dist/assets/tiangong-tiangong-hub.painted.svg +1 -0
- package/dist/assets/tiangong-tiangong-hub.svg +1 -0
- package/dist/assets/tiangong-tiangong-hub.thick.svg +1 -0
- package/dist/assets/tiangong-tiangong-mengtian-arrays.glb +0 -0
- package/dist/assets/tiangong-tiangong-mengtian-arrays.painted.svg +1 -0
- package/dist/assets/tiangong-tiangong-mengtian-arrays.svg +1 -0
- package/dist/assets/tiangong-tiangong-mengtian-arrays.thick.svg +1 -0
- package/dist/assets/tiangong-tiangong-mengtian.glb +0 -0
- package/dist/assets/tiangong-tiangong-mengtian.painted.svg +1 -0
- package/dist/assets/tiangong-tiangong-mengtian.svg +1 -0
- package/dist/assets/tiangong-tiangong-mengtian.thick.svg +1 -0
- package/dist/assets/tiangong-tiangong-shenzhou-forward.glb +0 -0
- package/dist/assets/tiangong-tiangong-shenzhou-forward.painted.svg +1 -0
- package/dist/assets/tiangong-tiangong-shenzhou-forward.svg +1 -0
- package/dist/assets/tiangong-tiangong-shenzhou-forward.thick.svg +1 -0
- package/dist/assets/tiangong-tiangong-shenzhou-nadir.glb +0 -0
- package/dist/assets/tiangong-tiangong-shenzhou-nadir.painted.svg +1 -0
- package/dist/assets/tiangong-tiangong-shenzhou-nadir.svg +1 -0
- package/dist/assets/tiangong-tiangong-shenzhou-nadir.thick.svg +1 -0
- package/dist/assets/tiangong-tiangong-tianhe-arrays.glb +0 -0
- package/dist/assets/tiangong-tiangong-tianhe-arrays.painted.svg +1 -0
- package/dist/assets/tiangong-tiangong-tianhe-arrays.svg +1 -0
- package/dist/assets/tiangong-tiangong-tianhe-arrays.thick.svg +1 -0
- package/dist/assets/tiangong-tiangong-tianhe.glb +0 -0
- package/dist/assets/tiangong-tiangong-tianhe.painted.svg +1 -0
- package/dist/assets/tiangong-tiangong-tianhe.svg +1 -0
- package/dist/assets/tiangong-tiangong-tianhe.thick.svg +1 -0
- package/dist/assets/tiangong-tiangong-tianzhou.glb +0 -0
- package/dist/assets/tiangong-tiangong-tianzhou.painted.svg +1 -0
- package/dist/assets/tiangong-tiangong-tianzhou.svg +1 -0
- package/dist/assets/tiangong-tiangong-tianzhou.thick.svg +1 -0
- package/dist/assets/tiangong-tiangong-wentian-arrays.glb +0 -0
- package/dist/assets/tiangong-tiangong-wentian-arrays.painted.svg +1 -0
- package/dist/assets/tiangong-tiangong-wentian-arrays.svg +1 -0
- package/dist/assets/tiangong-tiangong-wentian-arrays.thick.svg +1 -0
- package/dist/assets/tiangong-tiangong-wentian.glb +0 -0
- package/dist/assets/tiangong-tiangong-wentian.painted.svg +1 -0
- package/dist/assets/tiangong-tiangong-wentian.svg +1 -0
- package/dist/assets/tiangong-tiangong-wentian.thick.svg +1 -0
- package/dist/assets/tiangong-tiangong.glb +0 -0
- package/dist/assets/tiangong-tiangong.painted.svg +1 -0
- package/dist/assets/tiangong-tiangong.svg +1 -0
- package/dist/assets/tiangong-tiangong.thick.svg +1 -0
- package/dist/buildbar.js +22 -5
- package/dist/data/credits.d.ts +18 -1
- package/dist/data/credits.js +20 -3
- package/dist/data/hubble.js +16 -6
- package/dist/data/iss.js +52 -5
- package/dist/data/jupiterc.js +11 -6
- package/dist/data/makers.d.ts +1 -0
- package/dist/data/makers.js +2 -1
- package/dist/data/sources.d.ts +160 -0
- package/dist/data/sources.js +20 -0
- package/dist/data/tiangong.d.ts +12 -0
- package/dist/data/tiangong.js +54 -0
- package/dist/element/orbitWorld.d.ts +5 -0
- package/dist/element/orbitWorld.js +46 -1
- package/dist/element/probe.d.ts +15 -0
- package/dist/element/probe.js +46 -0
- package/dist/element/scene.d.ts +6 -0
- package/dist/element/scene.js +25 -11
- package/dist/element.d.ts +2 -0
- package/dist/element.js +27 -20
- package/dist/launches/data.d.ts +2 -0
- package/dist/launches/data.js +4 -0
- package/dist/launches/index.d.ts +318 -0
- package/dist/launches/index.js +249 -0
- package/dist/launches/links.d.ts +43 -0
- package/dist/launches/links.js +40 -0
- package/dist/launches/source.d.ts +20 -0
- package/dist/launches/source.js +22 -0
- package/dist/model/hubble.js +51 -17
- package/dist/model/iss.js +109 -23
- package/dist/model/jupiterc.js +29 -11
- package/dist/model/registry.js +4 -2
- package/dist/model/tiangong.d.ts +2 -0
- package/dist/model/tiangong.js +109 -0
- package/dist/parts.d.ts +1 -1
- package/dist/rockets.js +52 -3
- package/dist/thrusters.js +4 -4
- package/package.json +11 -1
- 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/data/sources.d.ts
CHANGED
|
@@ -538,6 +538,166 @@ export declare const SOURCES: {
|
|
|
538
538
|
readonly read: "direct";
|
|
539
539
|
readonly licence: "CC BY-SA 4.0";
|
|
540
540
|
};
|
|
541
|
+
readonly "wikipedia-tiangong": {
|
|
542
|
+
readonly title: "Tiangong space station (the infobox and the module table)";
|
|
543
|
+
readonly publisher: "Wikipedia";
|
|
544
|
+
readonly url: "https://en.wikipedia.org/wiki/Tiangong_space_station";
|
|
545
|
+
readonly date: "2026-11-11";
|
|
546
|
+
readonly read: "direct";
|
|
547
|
+
readonly licence: "CC BY-SA 4.0";
|
|
548
|
+
};
|
|
549
|
+
readonly "wikipedia-tianhe": {
|
|
550
|
+
readonly title: "Tianhe core module (the infobox)";
|
|
551
|
+
readonly publisher: "Wikipedia";
|
|
552
|
+
readonly url: "https://en.wikipedia.org/wiki/Tianhe_core_module";
|
|
553
|
+
readonly date: "2026-11-11";
|
|
554
|
+
readonly read: "direct";
|
|
555
|
+
readonly licence: "CC BY-SA 4.0";
|
|
556
|
+
};
|
|
557
|
+
readonly "wikipedia-wentian": {
|
|
558
|
+
readonly title: "Wentian module (the infobox)";
|
|
559
|
+
readonly publisher: "Wikipedia";
|
|
560
|
+
readonly url: "https://en.wikipedia.org/wiki/Wentian_module";
|
|
561
|
+
readonly date: "2026-11-11";
|
|
562
|
+
readonly read: "direct";
|
|
563
|
+
readonly licence: "CC BY-SA 4.0";
|
|
564
|
+
};
|
|
565
|
+
readonly "wikipedia-mengtian": {
|
|
566
|
+
readonly title: "Mengtian module (the infobox)";
|
|
567
|
+
readonly publisher: "Wikipedia";
|
|
568
|
+
readonly url: "https://en.wikipedia.org/wiki/Mengtian";
|
|
569
|
+
readonly date: "2026-11-11";
|
|
570
|
+
readonly read: "direct";
|
|
571
|
+
readonly licence: "CC BY-SA 4.0";
|
|
572
|
+
};
|
|
573
|
+
readonly "wikipedia-shenzhou": {
|
|
574
|
+
readonly title: "Shenzhou (spacecraft) (the infobox)";
|
|
575
|
+
readonly publisher: "Wikipedia";
|
|
576
|
+
readonly url: "https://en.wikipedia.org/wiki/Shenzhou_(spacecraft)";
|
|
577
|
+
readonly date: "2026-11-11";
|
|
578
|
+
readonly read: "direct";
|
|
579
|
+
readonly licence: "CC BY-SA 4.0";
|
|
580
|
+
};
|
|
581
|
+
readonly "wikipedia-tianzhou": {
|
|
582
|
+
readonly title: "Tianzhou (spacecraft) (the infobox)";
|
|
583
|
+
readonly publisher: "Wikipedia";
|
|
584
|
+
readonly url: "https://en.wikipedia.org/wiki/Tianzhou_(spacecraft)";
|
|
585
|
+
readonly date: "2026-11-11";
|
|
586
|
+
readonly read: "direct";
|
|
587
|
+
readonly licence: "CC BY-SA 4.0";
|
|
588
|
+
};
|
|
589
|
+
readonly "wikipedia-zarya": {
|
|
590
|
+
readonly title: "Zarya (the infobox)";
|
|
591
|
+
readonly publisher: "Wikipedia";
|
|
592
|
+
readonly url: "https://en.wikipedia.org/wiki/Zarya_(ISS_module)";
|
|
593
|
+
readonly date: "2026-11-11";
|
|
594
|
+
readonly read: "direct";
|
|
595
|
+
readonly licence: "CC BY-SA 4.0";
|
|
596
|
+
};
|
|
597
|
+
readonly "wikipedia-unity": {
|
|
598
|
+
readonly title: "Unity (ISS module) (the infobox)";
|
|
599
|
+
readonly publisher: "Wikipedia";
|
|
600
|
+
readonly url: "https://en.wikipedia.org/wiki/Unity_(ISS_module)";
|
|
601
|
+
readonly date: "2026-11-11";
|
|
602
|
+
readonly read: "direct";
|
|
603
|
+
readonly licence: "CC BY-SA 4.0";
|
|
604
|
+
};
|
|
605
|
+
readonly "wikipedia-zvezda": {
|
|
606
|
+
readonly title: "Zvezda (ISS module) (the infobox)";
|
|
607
|
+
readonly publisher: "Wikipedia";
|
|
608
|
+
readonly url: "https://en.wikipedia.org/wiki/Zvezda_(ISS_module)";
|
|
609
|
+
readonly date: "2026-11-11";
|
|
610
|
+
readonly read: "direct";
|
|
611
|
+
readonly licence: "CC BY-SA 4.0";
|
|
612
|
+
};
|
|
613
|
+
readonly "wikipedia-destiny": {
|
|
614
|
+
readonly title: "Destiny (ISS module) (the infobox)";
|
|
615
|
+
readonly publisher: "Wikipedia";
|
|
616
|
+
readonly url: "https://en.wikipedia.org/wiki/Destiny_(ISS_module)";
|
|
617
|
+
readonly date: "2026-11-11";
|
|
618
|
+
readonly read: "direct";
|
|
619
|
+
readonly licence: "CC BY-SA 4.0";
|
|
620
|
+
};
|
|
621
|
+
readonly "wikipedia-harmony": {
|
|
622
|
+
readonly title: "Harmony (ISS module) (the infobox)";
|
|
623
|
+
readonly publisher: "Wikipedia";
|
|
624
|
+
readonly url: "https://en.wikipedia.org/wiki/Harmony_(ISS_module)";
|
|
625
|
+
readonly date: "2026-11-11";
|
|
626
|
+
readonly read: "direct";
|
|
627
|
+
readonly licence: "CC BY-SA 4.0";
|
|
628
|
+
};
|
|
629
|
+
readonly "wikipedia-columbus": {
|
|
630
|
+
readonly title: "Columbus (ISS module) (the infobox)";
|
|
631
|
+
readonly publisher: "Wikipedia";
|
|
632
|
+
readonly url: "https://en.wikipedia.org/wiki/Columbus_(ISS_module)";
|
|
633
|
+
readonly date: "2026-11-11";
|
|
634
|
+
readonly read: "direct";
|
|
635
|
+
readonly licence: "CC BY-SA 4.0";
|
|
636
|
+
};
|
|
637
|
+
readonly "wikipedia-kibo": {
|
|
638
|
+
readonly title: "Kibo (ISS module) (the infobox and the parts' sections)";
|
|
639
|
+
readonly publisher: "Wikipedia";
|
|
640
|
+
readonly url: "https://en.wikipedia.org/wiki/Kibo_(ISS_module)";
|
|
641
|
+
readonly date: "2026-11-11";
|
|
642
|
+
readonly read: "direct";
|
|
643
|
+
readonly licence: "CC BY-SA 4.0";
|
|
644
|
+
};
|
|
645
|
+
readonly "wikipedia-truss": {
|
|
646
|
+
readonly title: "Integrated Truss Structure (the segment table and the solar array wings)";
|
|
647
|
+
readonly publisher: "Wikipedia";
|
|
648
|
+
readonly url: "https://en.wikipedia.org/wiki/Integrated_Truss_Structure";
|
|
649
|
+
readonly date: "2026-11-11";
|
|
650
|
+
readonly read: "direct";
|
|
651
|
+
readonly licence: "CC BY-SA 4.0";
|
|
652
|
+
};
|
|
653
|
+
readonly "wikipedia-quest": {
|
|
654
|
+
readonly title: "Quest Joint Airlock (the infobox)";
|
|
655
|
+
readonly publisher: "Wikipedia";
|
|
656
|
+
readonly url: "https://en.wikipedia.org/wiki/Quest_Joint_Airlock";
|
|
657
|
+
readonly date: "2026-11-11";
|
|
658
|
+
readonly read: "direct";
|
|
659
|
+
readonly licence: "CC BY-SA 4.0";
|
|
660
|
+
};
|
|
661
|
+
readonly "wikipedia-poisk": {
|
|
662
|
+
readonly title: "Poisk (ISS module) (the infobox)";
|
|
663
|
+
readonly publisher: "Wikipedia";
|
|
664
|
+
readonly url: "https://en.wikipedia.org/wiki/Poisk_(ISS_module)";
|
|
665
|
+
readonly date: "2026-11-11";
|
|
666
|
+
readonly read: "direct";
|
|
667
|
+
readonly licence: "CC BY-SA 4.0";
|
|
668
|
+
};
|
|
669
|
+
readonly "wikipedia-rassvet": {
|
|
670
|
+
readonly title: "Rassvet (ISS module) (the infobox)";
|
|
671
|
+
readonly publisher: "Wikipedia";
|
|
672
|
+
readonly url: "https://en.wikipedia.org/wiki/Rassvet_(ISS_module)";
|
|
673
|
+
readonly date: "2026-11-11";
|
|
674
|
+
readonly read: "direct";
|
|
675
|
+
readonly licence: "CC BY-SA 4.0";
|
|
676
|
+
};
|
|
677
|
+
readonly "wikipedia-tranquility": {
|
|
678
|
+
readonly title: "Tranquility (ISS module) (the infobox)";
|
|
679
|
+
readonly publisher: "Wikipedia";
|
|
680
|
+
readonly url: "https://en.wikipedia.org/wiki/Tranquility_(ISS_module)";
|
|
681
|
+
readonly date: "2026-11-11";
|
|
682
|
+
readonly read: "direct";
|
|
683
|
+
readonly licence: "CC BY-SA 4.0";
|
|
684
|
+
};
|
|
685
|
+
readonly "wikipedia-cupola": {
|
|
686
|
+
readonly title: "Cupola (ISS module) (the infobox)";
|
|
687
|
+
readonly publisher: "Wikipedia";
|
|
688
|
+
readonly url: "https://en.wikipedia.org/wiki/Cupola_(ISS_module)";
|
|
689
|
+
readonly date: "2026-11-11";
|
|
690
|
+
readonly read: "direct";
|
|
691
|
+
readonly licence: "CC BY-SA 4.0";
|
|
692
|
+
};
|
|
693
|
+
readonly "wikipedia-leonardo": {
|
|
694
|
+
readonly title: "Leonardo (ISS module) (the infobox)";
|
|
695
|
+
readonly publisher: "Wikipedia";
|
|
696
|
+
readonly url: "https://en.wikipedia.org/wiki/Leonardo_(ISS_module)";
|
|
697
|
+
readonly date: "2026-11-11";
|
|
698
|
+
readonly read: "direct";
|
|
699
|
+
readonly licence: "CC BY-SA 4.0";
|
|
700
|
+
};
|
|
541
701
|
readonly "wikipedia-discovery": {
|
|
542
702
|
readonly title: "Space Shuttle Discovery (the infobox)";
|
|
543
703
|
readonly publisher: "Wikipedia";
|
package/dist/data/sources.js
CHANGED
|
@@ -76,6 +76,26 @@ export const SOURCES = {
|
|
|
76
76
|
"wikipedia-jupiter-c": { title: "Jupiter-C (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Jupiter-C", date: "2026-11-02", read: "direct", licence: "CC BY-SA 4.0" },
|
|
77
77
|
"wikipedia-iss": { title: "International Space Station (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/International_Space_Station", date: "2026-11-02", read: "direct", licence: "CC BY-SA 4.0" },
|
|
78
78
|
"wikipedia-hubble": { title: "Hubble Space Telescope (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Hubble_Space_Telescope", date: "2026-11-02", read: "direct", licence: "CC BY-SA 4.0" },
|
|
79
|
+
"wikipedia-tiangong": { title: "Tiangong space station (the infobox and the module table)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Tiangong_space_station", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
80
|
+
"wikipedia-tianhe": { title: "Tianhe core module (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Tianhe_core_module", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
81
|
+
"wikipedia-wentian": { title: "Wentian module (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Wentian_module", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
82
|
+
"wikipedia-mengtian": { title: "Mengtian module (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Mengtian", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
83
|
+
"wikipedia-shenzhou": { title: "Shenzhou (spacecraft) (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Shenzhou_(spacecraft)", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
84
|
+
"wikipedia-tianzhou": { title: "Tianzhou (spacecraft) (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Tianzhou_(spacecraft)", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
85
|
+
"wikipedia-zarya": { title: "Zarya (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Zarya_(ISS_module)", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
86
|
+
"wikipedia-unity": { title: "Unity (ISS module) (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Unity_(ISS_module)", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
87
|
+
"wikipedia-zvezda": { title: "Zvezda (ISS module) (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Zvezda_(ISS_module)", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
88
|
+
"wikipedia-destiny": { title: "Destiny (ISS module) (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Destiny_(ISS_module)", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
89
|
+
"wikipedia-harmony": { title: "Harmony (ISS module) (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Harmony_(ISS_module)", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
90
|
+
"wikipedia-columbus": { title: "Columbus (ISS module) (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Columbus_(ISS_module)", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
91
|
+
"wikipedia-kibo": { title: "Kibo (ISS module) (the infobox and the parts' sections)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Kibo_(ISS_module)", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
92
|
+
"wikipedia-truss": { title: "Integrated Truss Structure (the segment table and the solar array wings)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Integrated_Truss_Structure", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
93
|
+
"wikipedia-quest": { title: "Quest Joint Airlock (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Quest_Joint_Airlock", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
94
|
+
"wikipedia-poisk": { title: "Poisk (ISS module) (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Poisk_(ISS_module)", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
95
|
+
"wikipedia-rassvet": { title: "Rassvet (ISS module) (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Rassvet_(ISS_module)", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
96
|
+
"wikipedia-tranquility": { title: "Tranquility (ISS module) (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Tranquility_(ISS_module)", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
97
|
+
"wikipedia-cupola": { title: "Cupola (ISS module) (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Cupola_(ISS_module)", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
98
|
+
"wikipedia-leonardo": { title: "Leonardo (ISS module) (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Leonardo_(ISS_module)", date: "2026-11-11", read: "direct", licence: "CC BY-SA 4.0" },
|
|
79
99
|
"wikipedia-discovery": { title: "Space Shuttle Discovery (the infobox)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Space_Shuttle_Discovery", date: "2026-11-02", read: "direct", licence: "CC BY-SA 4.0" },
|
|
80
100
|
"wikipedia-falcon-heavy": { title: "Falcon Heavy", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Falcon_Heavy", date: "2026-10-31", read: "direct", licence: "CC BY-SA 4.0" },
|
|
81
101
|
"wikipedia-flight-5": { title: "Starship flight test 5 (its flight timeline, read as raw wikitext)", publisher: "Wikipedia", url: "https://en.wikipedia.org/wiki/Starship_flight_test_5", date: "2026-11-02", read: "direct", licence: "CC BY-SA 4.0" },
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Figure, type Variant } from "./types.ts";
|
|
2
|
+
export declare const TIANHE_WIDE: Figure;
|
|
3
|
+
export declare const LAB_WIDE: Figure;
|
|
4
|
+
export declare const SHENZHOU_WIDE: Figure;
|
|
5
|
+
export declare const TIANZHOU_WIDE: Figure;
|
|
6
|
+
export declare const LAB_LONG: Figure;
|
|
7
|
+
export declare const SHENZHOU_LONG: Figure;
|
|
8
|
+
export declare const SHENZHOU_WINGS: Figure;
|
|
9
|
+
export declare const TIANZHOU_WINGS: Figure;
|
|
10
|
+
/** The laboratories' wings, tip to tip: "over 55 m" in their articles, drawn as 55.6 m, the station's sourced length. */
|
|
11
|
+
export declare const WING_SPAN: Figure;
|
|
12
|
+
export declare const TIANGONG_VARIANTS: readonly Variant[];
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
// Tiangong, China's space station, as its article and its modules' articles give it: Tianhe, the core module, 16.6 m long and 4.2 m across with its docking node at its forward end; Wentian and Mengtian, the two
|
|
2
|
+
// laboratory modules, 17.9 m by 4.2 m, on the node's starboard and port sides; Shenzhou at the forward and nadir ports and Tianzhou at the aft. It stands on end here, Tianhe's axis up and its aft at the foot, as the ISS does.
|
|
3
|
+
import { blank } from "./types.js";
|
|
4
|
+
const S = "wikipedia-tiangong";
|
|
5
|
+
export const TIANHE_WIDE = { value: 4.2, source: "wikipedia-tianhe", note: "14 feet, its big cylinder." };
|
|
6
|
+
export const LAB_WIDE = { value: 4.2, source: "wikipedia-wentian", note: "14 feet." };
|
|
7
|
+
export const SHENZHOU_WIDE = { value: 2.8, source: "wikipedia-shenzhou" };
|
|
8
|
+
export const TIANZHOU_WIDE = { value: 3.35, source: "wikipedia-tianzhou", note: "11 feet." };
|
|
9
|
+
export const LAB_LONG = { value: 17.9, source: "wikipedia-wentian", note: "59 feet, its length: it lies out from the node, so it is its widest here, and its height here is its 4.2 m width." };
|
|
10
|
+
export const SHENZHOU_LONG = { value: 9.25, source: "wikipedia-shenzhou", note: "Its length: it lies out from the nadir port, so it is its widest here, and its height here is its wings' span." };
|
|
11
|
+
export const SHENZHOU_WINGS = { value: 17, source: "wikipedia-shenzhou", note: "Its two wings, tip to tip." };
|
|
12
|
+
export const TIANZHOU_WINGS = { value: 14.9, source: "wikipedia-tianzhou", note: "Its two wings, tip to tip: 49 feet." };
|
|
13
|
+
/** The laboratories' wings, tip to tip: "over 55 m" in their articles, drawn as 55.6 m, the station's sourced length. */
|
|
14
|
+
export const WING_SPAN = { value: 55.6, source: "wikipedia-wentian", note: "Each laboratory's two wings, tip to tip: its article says over 55 m, and 110 m² of cells each. Drawn at the station's sourced length." };
|
|
15
|
+
export const TIANGONG_VARIANTS = [
|
|
16
|
+
{
|
|
17
|
+
id: "tiangong",
|
|
18
|
+
rocket: "tiangong",
|
|
19
|
+
name: "Tiangong 天宮",
|
|
20
|
+
status: "flown",
|
|
21
|
+
firstWord: "First module",
|
|
22
|
+
firstFlight: { value: "2021-04-29", source: S, note: "Tianhe, on a Long March 5B. Wentian followed on 2022-07-24 and Mengtian on 2022-10-31." },
|
|
23
|
+
slots: ["tianhe", "hub", "shenzhou-forward", "tianzhou", "wentian", "mengtian", "tianhe-arrays", "wentian-arrays", "mengtian-arrays", "shenzhou-nadir"],
|
|
24
|
+
note: "w29572227's model, its flags and mark left out, in the painted look, one file a part, each module and craft at its own sourced size; this package's own plain shapes in the line looks, from the sourced lengths and widths. It stands with Tianhe's axis up and the laboratories across the front: height here is the laboratories' wings tip to tip, along that axis. The two Shenzhou and the Tianzhou are the model's visiting craft.",
|
|
25
|
+
facts: {
|
|
26
|
+
height: { value: 55.6, source: S, note: "182 feet, the length its article gives. Drawn as the laboratories' wings, tip to tip, along Tianhe's axis." },
|
|
27
|
+
diameter: { value: 39, source: S, note: "128 feet, the width its article gives: across the two laboratories." },
|
|
28
|
+
parts: {
|
|
29
|
+
tianhe: blank("Tianhe's body without its node: 12.2 m of the sourced 16.6 m, as the model divides them."),
|
|
30
|
+
hub: blank("Tianhe's docking node: 4.4 m of the sourced 16.6 m, as the model divides them."),
|
|
31
|
+
"shenzhou-forward": { value: 9.25, source: "wikipedia-shenzhou", note: "Its service, re-entry and orbital modules are 2.94 m, 2.5 m and 2.8 m." },
|
|
32
|
+
tianzhou: { value: 10.6, source: "wikipedia-tianzhou", note: "35 feet." },
|
|
33
|
+
wentian: blank("It lies out from the node: 17.9 m long (59 feet) and 4.2 m across, so its height here is its width, 4.2 m."),
|
|
34
|
+
mengtian: blank("It lies out from the node: 17.9 m long (59 feet) and 4.2 m across, so its height here is its width, 4.2 m."),
|
|
35
|
+
"tianhe-arrays": blank("Tianhe's two wings have no size in a source read here: they are the model's, at Tianhe's scale."),
|
|
36
|
+
"wentian-arrays": WING_SPAN,
|
|
37
|
+
"mengtian-arrays": WING_SPAN,
|
|
38
|
+
"shenzhou-nadir": blank("The same craft as at the forward port, 9.25 m long, lying out from the nadir port: its height here is its wings' span, 17 m."),
|
|
39
|
+
},
|
|
40
|
+
engines: {},
|
|
41
|
+
more: {
|
|
42
|
+
"tianhe-length": { value: 16.6, source: "wikipedia-tianhe", note: "54 feet, the core module with its node." },
|
|
43
|
+
mass: { value: "about 100,000 kg", source: S },
|
|
44
|
+
crew: { value: 3, source: S },
|
|
45
|
+
orbit: { value: "386 to 392 km, 41.47 degrees", source: S, note: "As the infobox gave it on the day it was read." },
|
|
46
|
+
"shenzhou-wings": SHENZHOU_WINGS,
|
|
47
|
+
"tianzhou-wings": TIANZHOU_WINGS,
|
|
48
|
+
"wentian-length": LAB_LONG,
|
|
49
|
+
"mengtian-length": { value: 17.9, source: "wikipedia-mengtian", note: "59 feet." },
|
|
50
|
+
"pressurised-volume": { value: 340, source: S, note: "Cubic metres." },
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
];
|
|
@@ -2,6 +2,11 @@ import { Group, Object3D } from "three";
|
|
|
2
2
|
import { type SkyShown } from "./solarGroups.ts";
|
|
3
3
|
/** Shows or hides the planets, the dwarf planets and the moons. The Earth under the craft stays. Belts and paths are the viewer's, because they also depend on how far the camera is. */
|
|
4
4
|
export declare function applySolarGroups(root: Object3D, groups: Pick<SkyShown, "planets" | "moons" | "dwarfs">): void;
|
|
5
|
+
/**
|
|
6
|
+
* Turns the Earth about its own axis by the time `seconds` of its own day (a sidereal day), and the cloud layer a little faster than the ground.
|
|
7
|
+
* Returns the ground's turn in degrees, kept under one turn.
|
|
8
|
+
*/
|
|
9
|
+
export declare function turnOrbit(group: Group, seconds: number): number;
|
|
5
10
|
/** Moves the Moon, the major moons and the sketch so they match `when`. The paths and belts were drawn around the Sun at the first instant, so the whole sketch shifts with the Earth. */
|
|
6
11
|
export declare function moveOrbit(group: Group, when: number): void;
|
|
7
12
|
/** The Earth under the craft, the Moon where it is today, and the stars behind both. `ready` runs when the Earth's picture has arrived. */
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// The compare page's Earth, its Moon, the major moons, and a star field. The craft stay at the origin, 400 km above the surface. Loaded only when a page asks for it.
|
|
2
2
|
import { BODIES, DWARF_IDS, heliocentric, PLANET_IDS } from "@johnmorrisdotca/wakusei-planets";
|
|
3
|
-
import { BufferAttribute, BufferGeometry, Group, InstancedMesh, LineLoop, LineBasicMaterial, Mesh, MeshBasicMaterial, Object3D, Points, PointsMaterial, SphereGeometry, SRGBColorSpace, TextureLoader } from "three";
|
|
3
|
+
import { BufferAttribute, BufferGeometry, Group, InstancedMesh, LineLoop, LineBasicMaterial, Mesh, MeshBasicMaterial, Object3D, Points, PointsMaterial, SphereGeometry, SRGBColorSpace, TextureLoader, Vector3 } from "three";
|
|
4
4
|
import { skyGroupOf } from "./solarGroups.js";
|
|
5
5
|
import { beltPlaces, bodyScene, earthCentre, majorMoons, moonScene, sceneOf } from "./solarPlace.js";
|
|
6
6
|
const STAR_R_M = 2e13;
|
|
@@ -143,12 +143,43 @@ export function applySolarGroups(root, groups) {
|
|
|
143
143
|
if (major)
|
|
144
144
|
major.visible = groups.moons;
|
|
145
145
|
}
|
|
146
|
+
/** How much faster the cloud layer goes round than the ground under it, as a fraction of the ground's turn. */
|
|
147
|
+
const CLOUD_DRIFT = 0.12;
|
|
148
|
+
const NEAR_SIDE = new Vector3(1, 0, 0);
|
|
149
|
+
const toEarth = new Vector3();
|
|
150
|
+
/** The Moon keeps its near side toward the Earth, so it is turned to face it wherever it stands. */
|
|
151
|
+
function faceEarth(moon) {
|
|
152
|
+
const [ex, ey, ez] = earthCentre();
|
|
153
|
+
toEarth.set(ex - moon.position.x, ey - moon.position.y, ez - moon.position.z);
|
|
154
|
+
if (toEarth.lengthSq() === 0)
|
|
155
|
+
return;
|
|
156
|
+
moon.quaternion.setFromUnitVectors(NEAR_SIDE, toEarth.normalize());
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Turns the Earth about its own axis by the time `seconds` of its own day (a sidereal day), and the cloud layer a little faster than the ground.
|
|
160
|
+
* Returns the ground's turn in degrees, kept under one turn.
|
|
161
|
+
*/
|
|
162
|
+
export function turnOrbit(group, seconds) {
|
|
163
|
+
const earth = group.getObjectByName("earth");
|
|
164
|
+
if (!earth)
|
|
165
|
+
return 0;
|
|
166
|
+
const angle = (seconds * 2 * Math.PI) / (Math.abs(BODIES.earth.rotationHours) * 3600) * (BODIES.earth.rotationHours < 0 ? -1 : 1);
|
|
167
|
+
earth.rotation.y += angle;
|
|
168
|
+
const clouds = earth.getObjectByName("earth-clouds");
|
|
169
|
+
if (clouds)
|
|
170
|
+
clouds.rotation.y += angle * CLOUD_DRIFT;
|
|
171
|
+
const moon = group.getObjectByName("moon");
|
|
172
|
+
if (moon)
|
|
173
|
+
faceEarth(moon);
|
|
174
|
+
return ((((earth.rotation.y * 180) / Math.PI) % 360) + 360) % 360;
|
|
175
|
+
}
|
|
146
176
|
/** Moves the Moon, the major moons and the sketch so they match `when`. The paths and belts were drawn around the Sun at the first instant, so the whole sketch shifts with the Earth. */
|
|
147
177
|
export function moveOrbit(group, when) {
|
|
148
178
|
const moon = group.getObjectByName("moon");
|
|
149
179
|
if (moon) {
|
|
150
180
|
const [x, y, z] = moonScene(when);
|
|
151
181
|
moon.position.set(x, y, z);
|
|
182
|
+
faceEarth(moon);
|
|
152
183
|
}
|
|
153
184
|
const moons = group.getObjectByName("major-moons");
|
|
154
185
|
if (moons instanceof InstancedMesh) {
|
|
@@ -193,6 +224,7 @@ export function orbitWorld(ready, when = Date.now()) {
|
|
|
193
224
|
const moon = new Mesh(new SphereGeometry(moonR, 48, 32), new MeshBasicMaterial({ color: "#c4bfb4" }));
|
|
194
225
|
moon.name = "moon";
|
|
195
226
|
moon.position.set(mx, my, mz);
|
|
227
|
+
faceEarth(moon);
|
|
196
228
|
const sketch = solarSketch(when);
|
|
197
229
|
const moons = moonMesh(when);
|
|
198
230
|
const planets = planetGroup(when);
|
|
@@ -210,6 +242,18 @@ export function orbitWorld(ready, when = Date.now()) {
|
|
|
210
242
|
ready();
|
|
211
243
|
});
|
|
212
244
|
};
|
|
245
|
+
// The cloud layer is its own shell a little above the ground, drawn from the cloud picture's brightness, so it can turn at its own pace.
|
|
246
|
+
const clouds = new Mesh(new SphereGeometry(earthR * 1.004, 96, 64), new MeshBasicMaterial({ color: "#ffffff", transparent: true, opacity: 0.8, depthWrite: false }));
|
|
247
|
+
clouds.name = "earth-clouds";
|
|
248
|
+
// hidden until its picture has arrived: without it the shell would be a flat white globe, and it stays out if the picture never loads
|
|
249
|
+
clouds.visible = false;
|
|
250
|
+
earth.add(clouds);
|
|
251
|
+
loader.load(new URL("clouds-1024.webp", base).href, (map) => {
|
|
252
|
+
const material = clouds.material;
|
|
253
|
+
material.alphaMap = map;
|
|
254
|
+
material.needsUpdate = true;
|
|
255
|
+
clouds.visible = true;
|
|
256
|
+
});
|
|
213
257
|
paint("day-2048.webp", earth);
|
|
214
258
|
paint("moon-2048.webp", moon);
|
|
215
259
|
return {
|
|
@@ -222,6 +266,7 @@ export function orbitWorld(ready, when = Date.now()) {
|
|
|
222
266
|
const list = Array.isArray(material) ? material : material ? [material] : [];
|
|
223
267
|
for (const one of list) {
|
|
224
268
|
one.map?.dispose();
|
|
269
|
+
one.alphaMap?.dispose();
|
|
225
270
|
one.dispose();
|
|
226
271
|
}
|
|
227
272
|
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** What one look at the browser's WebGL said. */
|
|
2
|
+
export interface GlProbe {
|
|
3
|
+
/** Whether a WebGL context can be made at all. */
|
|
4
|
+
works: boolean;
|
|
5
|
+
/** Whether the context draws in software (SwiftShader, llvmpipe, softpipe), where smooth edges cost a frame. */
|
|
6
|
+
software: boolean;
|
|
7
|
+
}
|
|
8
|
+
/** How many test contexts this page has made: 1 once the answer is known, 0 before it is asked for. */
|
|
9
|
+
export declare function probeCount(): number;
|
|
10
|
+
/**
|
|
11
|
+
* Says whether WebGL works here and whether it draws in software. The first call makes one test context and releases it at once; every later call, from any element or viewer, gets the same answer without making another.
|
|
12
|
+
*
|
|
13
|
+
* @returns The kept answer.
|
|
14
|
+
*/
|
|
15
|
+
export declare function glProbe(): GlProbe;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// What the browser's WebGL is, asked once per page. A test context in software drawing takes seconds of the main thread, so the answer is kept for every element and every viewer on the page, and the context is let go the moment it has answered.
|
|
2
|
+
let answer = null;
|
|
3
|
+
let asked = 0;
|
|
4
|
+
/** How many test contexts this page has made: 1 once the answer is known, 0 before it is asked for. */
|
|
5
|
+
export function probeCount() {
|
|
6
|
+
return asked;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Says whether WebGL works here and whether it draws in software. The first call makes one test context and releases it at once; every later call, from any element or viewer, gets the same answer without making another.
|
|
10
|
+
*
|
|
11
|
+
* @returns The kept answer.
|
|
12
|
+
*/
|
|
13
|
+
export function glProbe() {
|
|
14
|
+
if (answer)
|
|
15
|
+
return answer;
|
|
16
|
+
asked++;
|
|
17
|
+
let works = false;
|
|
18
|
+
let software = false;
|
|
19
|
+
let canvas = null;
|
|
20
|
+
try {
|
|
21
|
+
canvas = document.createElement("canvas");
|
|
22
|
+
const two = canvas.getContext("webgl2");
|
|
23
|
+
const gl = two ?? canvas.getContext("webgl");
|
|
24
|
+
works = Boolean(gl);
|
|
25
|
+
if (gl) {
|
|
26
|
+
try {
|
|
27
|
+
const info = gl.getExtension("WEBGL_debug_renderer_info");
|
|
28
|
+
software = /swiftshader|llvmpipe|softpipe/i.test(info ? String(gl.getParameter(info.UNMASKED_RENDERER_WEBGL)) : "");
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
// The name is only a hint for smooth edges.
|
|
32
|
+
}
|
|
33
|
+
gl.getExtension("WEBGL_lose_context")?.loseContext();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
works = false;
|
|
38
|
+
}
|
|
39
|
+
if (canvas) {
|
|
40
|
+
// A canvas of no size lets its drawing buffer go with it.
|
|
41
|
+
canvas.width = 0;
|
|
42
|
+
canvas.height = 0;
|
|
43
|
+
}
|
|
44
|
+
answer = { works, software };
|
|
45
|
+
return answer;
|
|
46
|
+
}
|
package/dist/element/scene.d.ts
CHANGED
|
@@ -203,6 +203,10 @@ export declare class RocketViewer {
|
|
|
203
203
|
private skyGroups;
|
|
204
204
|
private skyWhen;
|
|
205
205
|
private moveSky;
|
|
206
|
+
/** Seconds of the Earth's own day that pass in each real second; 0 holds it still. */
|
|
207
|
+
private worldRate;
|
|
208
|
+
private worldAt;
|
|
209
|
+
private turnWorld;
|
|
206
210
|
private paintSkyGroups;
|
|
207
211
|
constructor(holder: HTMLElement, options: ViewerOptions);
|
|
208
212
|
private homeAngle;
|
|
@@ -223,6 +227,8 @@ export declare class RocketViewer {
|
|
|
223
227
|
setPaths(on: boolean): void;
|
|
224
228
|
/** Shows or hides each sky group. The craft marks are the page's; this only remembers that choice on the canvas. */
|
|
225
229
|
setGroups(groups: SkyShown): void;
|
|
230
|
+
/** How fast the Earth under the craft turns: seconds of its own day for each real second. 0 holds it still, and so does a reader who prefers less motion. */
|
|
231
|
+
setWorldTurn(rate: number): void;
|
|
226
232
|
/** Puts the Moon, the major moons and the belts at `ms`. */
|
|
227
233
|
setWhen(ms: number): void;
|
|
228
234
|
private showSketch;
|
package/dist/element/scene.js
CHANGED
|
@@ -31,6 +31,7 @@ import { placeNameLabels } from "./namePlace.js";
|
|
|
31
31
|
import { plinthGroup } from "./plinth.js";
|
|
32
32
|
import { PartPlumes, PlumeKit } from "./plumes.js";
|
|
33
33
|
import { ThrusterLayer } from "./thrusterLayer.js";
|
|
34
|
+
import { glProbe } from "./probe.js";
|
|
34
35
|
import { craftJets, endQuads } from "../thrusters.js";
|
|
35
36
|
/** The ships whose lamps turn the sun down in the Lit look. Kit modules stay in daylight. */
|
|
36
37
|
const NIGHT_SHIPS = new Set(["fleet-ship-01", "fleet-kyotori", "fleet-drone", "fleet-ship-03", "fleet-ship-ariake", "fleet-02", "fleet-02-original", "fleet-kaminari", "fleet-emiake", "fleet-romaryu"]);
|
|
@@ -55,15 +56,8 @@ const COMPILE_MS = 4000;
|
|
|
55
56
|
/** A change of craft, section or Fit eases the camera for this long, even in scale. */
|
|
56
57
|
const SIZE_EASE_MS = 800;
|
|
57
58
|
const autoRotateOf = (spin) => (spin.seconds <= 0 ? 0 : (60 / spin.seconds) * (spin.way === "cw" ? -1 : 1));
|
|
58
|
-
/** A real graphics card keeps smooth edges. Software drawing spends the frame on them, and a heavy ship then misses a frame of the wait. */
|
|
59
|
-
const smoothEdges = () =>
|
|
60
|
-
const canvas = document.createElement("canvas");
|
|
61
|
-
const gl = canvas.getContext("webgl2");
|
|
62
|
-
const info = gl?.getExtension("WEBGL_debug_renderer_info");
|
|
63
|
-
const name = info && gl ? String(gl.getParameter(info.UNMASKED_RENDERER_WEBGL)) : "";
|
|
64
|
-
gl?.getExtension("WEBGL_lose_context")?.loseContext();
|
|
65
|
-
return !/swiftshader|llvmpipe|softpipe/i.test(name);
|
|
66
|
-
};
|
|
59
|
+
/** A real graphics card keeps smooth edges. Software drawing spends the frame on them, and a heavy ship then misses a frame of the wait. The page's one WebGL probe says which this is. */
|
|
60
|
+
const smoothEdges = () => !glProbe().software;
|
|
67
61
|
const LINE_VERTEX = /* glsl */ `
|
|
68
62
|
varying vec3 vNormal;
|
|
69
63
|
varying vec2 vUv;
|
|
@@ -303,6 +297,10 @@ export class RocketViewer {
|
|
|
303
297
|
skyGroups = { planets: true, moons: true, dwarfs: true, belts: true, craft: true };
|
|
304
298
|
skyWhen = Date.now();
|
|
305
299
|
moveSky = null;
|
|
300
|
+
/** Seconds of the Earth's own day that pass in each real second; 0 holds it still. */
|
|
301
|
+
worldRate = 0;
|
|
302
|
+
worldAt = 0;
|
|
303
|
+
turnWorld = null;
|
|
306
304
|
paintSkyGroups = null;
|
|
307
305
|
constructor(holder, options) {
|
|
308
306
|
this.holder = holder;
|
|
@@ -467,6 +465,12 @@ export class RocketViewer {
|
|
|
467
465
|
this.showSketch();
|
|
468
466
|
this.wake();
|
|
469
467
|
}
|
|
468
|
+
/** How fast the Earth under the craft turns: seconds of its own day for each real second. 0 holds it still, and so does a reader who prefers less motion. */
|
|
469
|
+
setWorldTurn(rate) {
|
|
470
|
+
this.worldRate = Number.isFinite(rate) ? rate : 0;
|
|
471
|
+
this.worldAt = 0;
|
|
472
|
+
this.wake();
|
|
473
|
+
}
|
|
470
474
|
/** Puts the Moon, the major moons and the belts at `ms`. */
|
|
471
475
|
setWhen(ms) {
|
|
472
476
|
if (!Number.isFinite(ms))
|
|
@@ -503,7 +507,7 @@ export class RocketViewer {
|
|
|
503
507
|
if (this.orbitGone || this.scene.getObjectByName("orbit-world"))
|
|
504
508
|
return;
|
|
505
509
|
this.orbitGone = () => { };
|
|
506
|
-
void import("./orbitWorld.js").then(({ applySolarGroups, moveOrbit, orbitWorld }) => {
|
|
510
|
+
void import("./orbitWorld.js").then(({ applySolarGroups, moveOrbit, orbitWorld, turnOrbit }) => {
|
|
507
511
|
if (this.disposed)
|
|
508
512
|
return;
|
|
509
513
|
const world = orbitWorld(() => {
|
|
@@ -515,6 +519,7 @@ export class RocketViewer {
|
|
|
515
519
|
this.moonNode = world.group.getObjectByName("moon") ?? null;
|
|
516
520
|
this.orbitGone = world.dispose;
|
|
517
521
|
this.moveSky = (ms) => moveOrbit(world.group, ms);
|
|
522
|
+
this.turnWorld = (seconds) => turnOrbit(world.group, seconds);
|
|
518
523
|
this.paintSkyGroups = (groups) => applySolarGroups(world.group, groups);
|
|
519
524
|
this.paintSkyGroups(this.skyGroups);
|
|
520
525
|
this.canvas.dataset.globe = this.orbitOn ? "earth" : "off";
|
|
@@ -2903,6 +2908,15 @@ export class RocketViewer {
|
|
|
2903
2908
|
this.swarm?.step(now / 1000);
|
|
2904
2909
|
this.needsDraw = true;
|
|
2905
2910
|
}
|
|
2911
|
+
const worldTurning = this.orbitOn && this.turnWorld !== null && this.worldRate !== 0 && !this.options.reducedMotion;
|
|
2912
|
+
if (worldTurning && this.turnWorld && now - this.worldAt >= MOTION_GAP_MS) {
|
|
2913
|
+
// a gap longer than a few frames is the page being hidden or busy, not time the Earth should catch up on
|
|
2914
|
+
const seconds = this.worldAt === 0 ? MOTION_GAP_MS / 1000 : Math.min(0.1, (now - this.worldAt) / 1000);
|
|
2915
|
+
this.worldAt = now;
|
|
2916
|
+
this.canvas.dataset.worldTurn = this.turnWorld(seconds * this.worldRate).toFixed(3);
|
|
2917
|
+
this.needsDraw = true;
|
|
2918
|
+
}
|
|
2919
|
+
this.canvas.dataset.worldTurning = worldTurning ? "true" : "false";
|
|
2906
2920
|
const pulsing = this.hasPulse && this.lightsMode !== "off" && !this.options.reducedMotion;
|
|
2907
2921
|
if (pulsing && now - this.lampDrawn >= MOTION_GAP_MS) {
|
|
2908
2922
|
this.lampDrawn = now;
|
|
@@ -3007,7 +3021,7 @@ export class RocketViewer {
|
|
|
3007
3021
|
const drifting = this.drifting();
|
|
3008
3022
|
const jetting = this.thrusterChoice === "station-keeping" && !this.options.reducedMotion && awake || (this.thrusters?.puffCount() ?? 0) > 0;
|
|
3009
3023
|
const inspectingOn = this.inspectCount > 0 && this.inspectPlaying && this.progressAt === null && !this.options.reducedMotion;
|
|
3010
|
-
if (!this.frame && ((ambient && this.controls.autoRotate) || changed || this.pose || this.needsDraw || Math.abs(dA) > 1e-5 || flaming || flying || motioning || welding || pulsing || drifting || jetting || inspectingOn || this.ghost || this.paintFades.length > 0))
|
|
3024
|
+
if (!this.frame && ((ambient && this.controls.autoRotate) || changed || this.pose || this.needsDraw || Math.abs(dA) > 1e-5 || flaming || flying || motioning || welding || worldTurning || pulsing || drifting || jetting || inspectingOn || this.ghost || this.paintFades.length > 0))
|
|
3011
3025
|
this.frame = requestAnimationFrame(this.tick);
|
|
3012
3026
|
this.inTick = false;
|
|
3013
3027
|
};
|
package/dist/element.d.ts
CHANGED
|
@@ -65,6 +65,8 @@ export declare class UchusenRocket extends HTMLBase {
|
|
|
65
65
|
private stateNow;
|
|
66
66
|
private shownAt;
|
|
67
67
|
private starting;
|
|
68
|
+
/** Whether this element has asked the page's WebGL answer since it started watching. */
|
|
69
|
+
private glAsked;
|
|
68
70
|
private key;
|
|
69
71
|
private driven;
|
|
70
72
|
private placeFrame;
|