@johnmorrisdotca/uchusen-rockets 0.17.0 → 0.19.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.
Files changed (319) hide show
  1. package/CHANGELOG.md +30 -4
  2. package/NOTICE.md +22 -4
  3. package/README.md +15 -10
  4. package/dist/assets/hubble-hubble-aft-shroud.glb +0 -0
  5. package/dist/assets/hubble-hubble-aft-shroud.painted.svg +1 -0
  6. package/dist/assets/hubble-hubble-aft-shroud.svg +1 -0
  7. package/dist/assets/hubble-hubble-aft-shroud.thick.svg +1 -0
  8. package/dist/assets/hubble-hubble-antenna-far.glb +0 -0
  9. package/dist/assets/hubble-hubble-antenna-far.painted.svg +1 -0
  10. package/dist/assets/hubble-hubble-antenna-far.svg +1 -0
  11. package/dist/assets/hubble-hubble-antenna-far.thick.svg +1 -0
  12. package/dist/assets/hubble-hubble-antenna-near.glb +0 -0
  13. package/dist/assets/hubble-hubble-antenna-near.painted.svg +1 -0
  14. package/dist/assets/hubble-hubble-antenna-near.svg +1 -0
  15. package/dist/assets/hubble-hubble-antenna-near.thick.svg +1 -0
  16. package/dist/assets/hubble-hubble-apart.painted.svg +1 -0
  17. package/dist/assets/hubble-hubble-apart.svg +1 -0
  18. package/dist/assets/hubble-hubble-apart.thick.svg +1 -0
  19. package/dist/assets/hubble-hubble-aperture-door.glb +0 -0
  20. package/dist/assets/hubble-hubble-aperture-door.painted.svg +1 -0
  21. package/dist/assets/hubble-hubble-aperture-door.svg +1 -0
  22. package/dist/assets/hubble-hubble-aperture-door.thick.svg +1 -0
  23. package/dist/assets/hubble-hubble-array-left.glb +0 -0
  24. package/dist/assets/hubble-hubble-array-left.painted.svg +1 -0
  25. package/dist/assets/hubble-hubble-array-left.svg +1 -0
  26. package/dist/assets/hubble-hubble-array-left.thick.svg +1 -0
  27. package/dist/assets/hubble-hubble-array-right.glb +0 -0
  28. package/dist/assets/hubble-hubble-array-right.painted.svg +1 -0
  29. package/dist/assets/hubble-hubble-array-right.svg +1 -0
  30. package/dist/assets/hubble-hubble-array-right.thick.svg +1 -0
  31. package/dist/assets/hubble-hubble-equipment-section.glb +0 -0
  32. package/dist/assets/hubble-hubble-equipment-section.painted.svg +1 -0
  33. package/dist/assets/hubble-hubble-equipment-section.svg +1 -0
  34. package/dist/assets/hubble-hubble-equipment-section.thick.svg +1 -0
  35. package/dist/assets/hubble-hubble-forward-shell.glb +0 -0
  36. package/dist/assets/hubble-hubble-forward-shell.painted.svg +1 -0
  37. package/dist/assets/hubble-hubble-forward-shell.svg +1 -0
  38. package/dist/assets/hubble-hubble-forward-shell.thick.svg +1 -0
  39. package/dist/assets/hubble-hubble-light-shield.glb +0 -0
  40. package/dist/assets/hubble-hubble-light-shield.painted.svg +1 -0
  41. package/dist/assets/hubble-hubble-light-shield.svg +1 -0
  42. package/dist/assets/hubble-hubble-light-shield.thick.svg +1 -0
  43. package/dist/assets/hubble-hubble.glb +0 -0
  44. package/dist/assets/hubble-hubble.painted.svg +1 -1
  45. package/dist/assets/hubble-hubble.svg +1 -1
  46. package/dist/assets/hubble-hubble.thick.svg +1 -1
  47. package/dist/assets/iss-iss-airlock.glb +0 -0
  48. package/dist/assets/iss-iss-airlock.painted.svg +1 -0
  49. package/dist/assets/iss-iss-airlock.svg +1 -0
  50. package/dist/assets/iss-iss-airlock.thick.svg +1 -0
  51. package/dist/assets/iss-iss-apart.painted.svg +1 -0
  52. package/dist/assets/iss-iss-apart.svg +1 -0
  53. package/dist/assets/iss-iss-apart.thick.svg +1 -0
  54. package/dist/assets/iss-iss-arrays-p4.glb +0 -0
  55. package/dist/assets/iss-iss-arrays-p4.painted.svg +1 -0
  56. package/dist/assets/iss-iss-arrays-p4.svg +1 -0
  57. package/dist/assets/iss-iss-arrays-p4.thick.svg +1 -0
  58. package/dist/assets/iss-iss-arrays-p6.glb +0 -0
  59. package/dist/assets/iss-iss-arrays-p6.painted.svg +1 -0
  60. package/dist/assets/iss-iss-arrays-p6.svg +1 -0
  61. package/dist/assets/iss-iss-arrays-p6.thick.svg +1 -0
  62. package/dist/assets/iss-iss-arrays-s4.glb +0 -0
  63. package/dist/assets/iss-iss-arrays-s4.painted.svg +1 -0
  64. package/dist/assets/iss-iss-arrays-s4.svg +1 -0
  65. package/dist/assets/iss-iss-arrays-s4.thick.svg +1 -0
  66. package/dist/assets/iss-iss-arrays-s6.glb +0 -0
  67. package/dist/assets/iss-iss-arrays-s6.painted.svg +1 -0
  68. package/dist/assets/iss-iss-arrays-s6.svg +1 -0
  69. package/dist/assets/iss-iss-arrays-s6.thick.svg +1 -0
  70. package/dist/assets/iss-iss-columbus.glb +0 -0
  71. package/dist/assets/iss-iss-columbus.painted.svg +1 -0
  72. package/dist/assets/iss-iss-columbus.svg +1 -0
  73. package/dist/assets/iss-iss-columbus.thick.svg +1 -0
  74. package/dist/assets/iss-iss-destiny.glb +0 -0
  75. package/dist/assets/iss-iss-destiny.painted.svg +1 -0
  76. package/dist/assets/iss-iss-destiny.svg +1 -0
  77. package/dist/assets/iss-iss-destiny.thick.svg +1 -0
  78. package/dist/assets/iss-iss-harmony.glb +0 -0
  79. package/dist/assets/iss-iss-harmony.painted.svg +1 -0
  80. package/dist/assets/iss-iss-harmony.svg +1 -0
  81. package/dist/assets/iss-iss-harmony.thick.svg +1 -0
  82. package/dist/assets/iss-iss-kibo.glb +0 -0
  83. package/dist/assets/iss-iss-kibo.painted.svg +1 -0
  84. package/dist/assets/iss-iss-kibo.svg +1 -0
  85. package/dist/assets/iss-iss-kibo.thick.svg +1 -0
  86. package/dist/assets/iss-iss-radiators-port.glb +0 -0
  87. package/dist/assets/iss-iss-radiators-port.painted.svg +1 -0
  88. package/dist/assets/iss-iss-radiators-port.svg +1 -0
  89. package/dist/assets/iss-iss-radiators-port.thick.svg +1 -0
  90. package/dist/assets/iss-iss-radiators-starboard.glb +0 -0
  91. package/dist/assets/iss-iss-radiators-starboard.painted.svg +1 -0
  92. package/dist/assets/iss-iss-radiators-starboard.svg +1 -0
  93. package/dist/assets/iss-iss-radiators-starboard.thick.svg +1 -0
  94. package/dist/assets/iss-iss-soyuz-aft.glb +0 -0
  95. package/dist/assets/iss-iss-soyuz-aft.painted.svg +1 -0
  96. package/dist/assets/iss-iss-soyuz-aft.svg +1 -0
  97. package/dist/assets/iss-iss-soyuz-aft.thick.svg +1 -0
  98. package/dist/assets/iss-iss-soyuz-zarya-nadir.glb +0 -0
  99. package/dist/assets/iss-iss-soyuz-zarya-nadir.painted.svg +1 -0
  100. package/dist/assets/iss-iss-soyuz-zarya-nadir.svg +1 -0
  101. package/dist/assets/iss-iss-soyuz-zarya-nadir.thick.svg +1 -0
  102. package/dist/assets/iss-iss-soyuz-zvezda-nadir.glb +0 -0
  103. package/dist/assets/iss-iss-soyuz-zvezda-nadir.painted.svg +1 -0
  104. package/dist/assets/iss-iss-soyuz-zvezda-nadir.svg +1 -0
  105. package/dist/assets/iss-iss-soyuz-zvezda-nadir.thick.svg +1 -0
  106. package/dist/assets/iss-iss-soyuz-zvezda-zenith.glb +0 -0
  107. package/dist/assets/iss-iss-soyuz-zvezda-zenith.painted.svg +1 -0
  108. package/dist/assets/iss-iss-soyuz-zvezda-zenith.svg +1 -0
  109. package/dist/assets/iss-iss-soyuz-zvezda-zenith.thick.svg +1 -0
  110. package/dist/assets/iss-iss-truss-p1.glb +0 -0
  111. package/dist/assets/iss-iss-truss-p1.painted.svg +1 -0
  112. package/dist/assets/iss-iss-truss-p1.svg +1 -0
  113. package/dist/assets/iss-iss-truss-p1.thick.svg +1 -0
  114. package/dist/assets/iss-iss-truss-p3-p4.glb +0 -0
  115. package/dist/assets/iss-iss-truss-p3-p4.painted.svg +1 -0
  116. package/dist/assets/iss-iss-truss-p3-p4.svg +1 -0
  117. package/dist/assets/iss-iss-truss-p3-p4.thick.svg +1 -0
  118. package/dist/assets/iss-iss-truss-p5.glb +0 -0
  119. package/dist/assets/iss-iss-truss-p5.painted.svg +1 -0
  120. package/dist/assets/iss-iss-truss-p5.svg +1 -0
  121. package/dist/assets/iss-iss-truss-p5.thick.svg +1 -0
  122. package/dist/assets/iss-iss-truss-p6.glb +0 -0
  123. package/dist/assets/iss-iss-truss-p6.painted.svg +1 -0
  124. package/dist/assets/iss-iss-truss-p6.svg +1 -0
  125. package/dist/assets/iss-iss-truss-p6.thick.svg +1 -0
  126. package/dist/assets/iss-iss-truss-s0.glb +0 -0
  127. package/dist/assets/iss-iss-truss-s0.painted.svg +1 -0
  128. package/dist/assets/iss-iss-truss-s0.svg +1 -0
  129. package/dist/assets/iss-iss-truss-s0.thick.svg +1 -0
  130. package/dist/assets/iss-iss-truss-s1.glb +0 -0
  131. package/dist/assets/iss-iss-truss-s1.painted.svg +1 -0
  132. package/dist/assets/iss-iss-truss-s1.svg +1 -0
  133. package/dist/assets/iss-iss-truss-s1.thick.svg +1 -0
  134. package/dist/assets/iss-iss-truss-s3-s4.glb +0 -0
  135. package/dist/assets/iss-iss-truss-s3-s4.painted.svg +1 -0
  136. package/dist/assets/iss-iss-truss-s3-s4.svg +1 -0
  137. package/dist/assets/iss-iss-truss-s3-s4.thick.svg +1 -0
  138. package/dist/assets/iss-iss-truss-s5.glb +0 -0
  139. package/dist/assets/iss-iss-truss-s5.painted.svg +1 -0
  140. package/dist/assets/iss-iss-truss-s5.svg +1 -0
  141. package/dist/assets/iss-iss-truss-s5.thick.svg +1 -0
  142. package/dist/assets/iss-iss-truss-s6.glb +0 -0
  143. package/dist/assets/iss-iss-truss-s6.painted.svg +1 -0
  144. package/dist/assets/iss-iss-truss-s6.svg +1 -0
  145. package/dist/assets/iss-iss-truss-s6.thick.svg +1 -0
  146. package/dist/assets/iss-iss-unity.glb +0 -0
  147. package/dist/assets/iss-iss-unity.painted.svg +1 -0
  148. package/dist/assets/iss-iss-unity.svg +1 -0
  149. package/dist/assets/iss-iss-unity.thick.svg +1 -0
  150. package/dist/assets/iss-iss-zarya.glb +0 -0
  151. package/dist/assets/iss-iss-zarya.painted.svg +1 -0
  152. package/dist/assets/iss-iss-zarya.svg +1 -0
  153. package/dist/assets/iss-iss-zarya.thick.svg +1 -0
  154. package/dist/assets/iss-iss-zvezda.glb +0 -0
  155. package/dist/assets/iss-iss-zvezda.painted.svg +1 -0
  156. package/dist/assets/iss-iss-zvezda.svg +1 -0
  157. package/dist/assets/iss-iss-zvezda.thick.svg +1 -0
  158. package/dist/assets/iss-iss.glb +0 -0
  159. package/dist/assets/iss-iss.painted.svg +1 -1
  160. package/dist/assets/iss-iss.svg +1 -1
  161. package/dist/assets/iss-iss.thick.svg +1 -1
  162. package/dist/assets/jupiter-c-jupiter-c-apart.painted.svg +1 -0
  163. package/dist/assets/jupiter-c-jupiter-c-apart.svg +1 -0
  164. package/dist/assets/jupiter-c-jupiter-c-apart.thick.svg +1 -0
  165. package/dist/assets/jupiter-c-jupiter-c-first-stage.glb +0 -0
  166. package/dist/assets/jupiter-c-jupiter-c-first-stage.painted.svg +1 -0
  167. package/dist/assets/jupiter-c-jupiter-c-first-stage.svg +1 -0
  168. package/dist/assets/jupiter-c-jupiter-c-first-stage.thick.svg +1 -0
  169. package/dist/assets/jupiter-c-jupiter-c-fourth-stage.glb +0 -0
  170. package/dist/assets/jupiter-c-jupiter-c-fourth-stage.painted.svg +1 -0
  171. package/dist/assets/jupiter-c-jupiter-c-fourth-stage.svg +1 -0
  172. package/dist/assets/jupiter-c-jupiter-c-fourth-stage.thick.svg +1 -0
  173. package/dist/assets/jupiter-c-jupiter-c-tail.glb +0 -0
  174. package/dist/assets/jupiter-c-jupiter-c-tail.painted.svg +1 -0
  175. package/dist/assets/jupiter-c-jupiter-c-tail.svg +1 -0
  176. package/dist/assets/jupiter-c-jupiter-c-tail.thick.svg +1 -0
  177. package/dist/assets/jupiter-c-jupiter-c-tub.glb +0 -0
  178. package/dist/assets/jupiter-c-jupiter-c-tub.painted.svg +1 -0
  179. package/dist/assets/jupiter-c-jupiter-c-tub.svg +1 -0
  180. package/dist/assets/jupiter-c-jupiter-c-tub.thick.svg +1 -0
  181. package/dist/assets/jupiter-c-jupiter-c.glb +0 -0
  182. package/dist/assets/jupiter-c-jupiter-c.painted.svg +1 -1
  183. package/dist/assets/jupiter-c-jupiter-c.svg +1 -1
  184. package/dist/assets/jupiter-c-jupiter-c.thick.svg +1 -1
  185. package/dist/assets/models/hubble-aft-shroud.glb +0 -0
  186. package/dist/assets/models/hubble-antenna-far.glb +0 -0
  187. package/dist/assets/models/hubble-antenna-near.glb +0 -0
  188. package/dist/assets/models/hubble-aperture-door.glb +0 -0
  189. package/dist/assets/models/hubble-array-left.glb +0 -0
  190. package/dist/assets/models/hubble-array-right.glb +0 -0
  191. package/dist/assets/models/hubble-equipment-section.glb +0 -0
  192. package/dist/assets/models/hubble-forward-shell.glb +0 -0
  193. package/dist/assets/models/hubble-light-shield.glb +0 -0
  194. package/dist/assets/models/iss-airlock.glb +0 -0
  195. package/dist/assets/models/iss-arrays-p4.glb +0 -0
  196. package/dist/assets/models/iss-arrays-p6.glb +0 -0
  197. package/dist/assets/models/iss-arrays-s4.glb +0 -0
  198. package/dist/assets/models/iss-arrays-s6.glb +0 -0
  199. package/dist/assets/models/iss-columbus.glb +0 -0
  200. package/dist/assets/models/iss-destiny.glb +0 -0
  201. package/dist/assets/models/iss-harmony.glb +0 -0
  202. package/dist/assets/models/iss-kibo.glb +0 -0
  203. package/dist/assets/models/iss-radiators-port.glb +0 -0
  204. package/dist/assets/models/iss-radiators-starboard.glb +0 -0
  205. package/dist/assets/models/iss-soyuz-aft.glb +0 -0
  206. package/dist/assets/models/iss-soyuz-zarya-nadir.glb +0 -0
  207. package/dist/assets/models/iss-soyuz-zvezda-nadir.glb +0 -0
  208. package/dist/assets/models/iss-soyuz-zvezda-zenith.glb +0 -0
  209. package/dist/assets/models/iss-truss-p1.glb +0 -0
  210. package/dist/assets/models/iss-truss-p3-p4.glb +0 -0
  211. package/dist/assets/models/iss-truss-p5.glb +0 -0
  212. package/dist/assets/models/iss-truss-p6.glb +0 -0
  213. package/dist/assets/models/iss-truss-s0.glb +0 -0
  214. package/dist/assets/models/iss-truss-s1.glb +0 -0
  215. package/dist/assets/models/iss-truss-s3-s4.glb +0 -0
  216. package/dist/assets/models/iss-truss-s5.glb +0 -0
  217. package/dist/assets/models/iss-truss-s6.glb +0 -0
  218. package/dist/assets/models/iss-unity.glb +0 -0
  219. package/dist/assets/models/iss-zarya.glb +0 -0
  220. package/dist/assets/models/iss-zvezda.glb +0 -0
  221. package/dist/assets/models/jupiter-c-first-stage.glb +0 -0
  222. package/dist/assets/models/jupiter-c-fourth-stage.glb +0 -0
  223. package/dist/assets/models/jupiter-c-tail.glb +0 -0
  224. package/dist/assets/models/jupiter-c-tub.glb +0 -0
  225. package/dist/assets/models/tiangong-hub.glb +0 -0
  226. package/dist/assets/models/tiangong-mengtian-arrays.glb +0 -0
  227. package/dist/assets/models/tiangong-mengtian.glb +0 -0
  228. package/dist/assets/models/tiangong-shenzhou-forward.glb +0 -0
  229. package/dist/assets/models/tiangong-shenzhou-nadir.glb +0 -0
  230. package/dist/assets/models/tiangong-tianhe-arrays.glb +0 -0
  231. package/dist/assets/models/tiangong-tianhe.glb +0 -0
  232. package/dist/assets/models/tiangong-tianzhou.glb +0 -0
  233. package/dist/assets/models/tiangong-wentian-arrays.glb +0 -0
  234. package/dist/assets/models/tiangong-wentian.glb +0 -0
  235. package/dist/assets/tiangong-tiangong-apart.painted.svg +1 -0
  236. package/dist/assets/tiangong-tiangong-apart.svg +1 -0
  237. package/dist/assets/tiangong-tiangong-apart.thick.svg +1 -0
  238. package/dist/assets/tiangong-tiangong-hub.glb +0 -0
  239. package/dist/assets/tiangong-tiangong-hub.painted.svg +1 -0
  240. package/dist/assets/tiangong-tiangong-hub.svg +1 -0
  241. package/dist/assets/tiangong-tiangong-hub.thick.svg +1 -0
  242. package/dist/assets/tiangong-tiangong-mengtian-arrays.glb +0 -0
  243. package/dist/assets/tiangong-tiangong-mengtian-arrays.painted.svg +1 -0
  244. package/dist/assets/tiangong-tiangong-mengtian-arrays.svg +1 -0
  245. package/dist/assets/tiangong-tiangong-mengtian-arrays.thick.svg +1 -0
  246. package/dist/assets/tiangong-tiangong-mengtian.glb +0 -0
  247. package/dist/assets/tiangong-tiangong-mengtian.painted.svg +1 -0
  248. package/dist/assets/tiangong-tiangong-mengtian.svg +1 -0
  249. package/dist/assets/tiangong-tiangong-mengtian.thick.svg +1 -0
  250. package/dist/assets/tiangong-tiangong-shenzhou-forward.glb +0 -0
  251. package/dist/assets/tiangong-tiangong-shenzhou-forward.painted.svg +1 -0
  252. package/dist/assets/tiangong-tiangong-shenzhou-forward.svg +1 -0
  253. package/dist/assets/tiangong-tiangong-shenzhou-forward.thick.svg +1 -0
  254. package/dist/assets/tiangong-tiangong-shenzhou-nadir.glb +0 -0
  255. package/dist/assets/tiangong-tiangong-shenzhou-nadir.painted.svg +1 -0
  256. package/dist/assets/tiangong-tiangong-shenzhou-nadir.svg +1 -0
  257. package/dist/assets/tiangong-tiangong-shenzhou-nadir.thick.svg +1 -0
  258. package/dist/assets/tiangong-tiangong-tianhe-arrays.glb +0 -0
  259. package/dist/assets/tiangong-tiangong-tianhe-arrays.painted.svg +1 -0
  260. package/dist/assets/tiangong-tiangong-tianhe-arrays.svg +1 -0
  261. package/dist/assets/tiangong-tiangong-tianhe-arrays.thick.svg +1 -0
  262. package/dist/assets/tiangong-tiangong-tianhe.glb +0 -0
  263. package/dist/assets/tiangong-tiangong-tianhe.painted.svg +1 -0
  264. package/dist/assets/tiangong-tiangong-tianhe.svg +1 -0
  265. package/dist/assets/tiangong-tiangong-tianhe.thick.svg +1 -0
  266. package/dist/assets/tiangong-tiangong-tianzhou.glb +0 -0
  267. package/dist/assets/tiangong-tiangong-tianzhou.painted.svg +1 -0
  268. package/dist/assets/tiangong-tiangong-tianzhou.svg +1 -0
  269. package/dist/assets/tiangong-tiangong-tianzhou.thick.svg +1 -0
  270. package/dist/assets/tiangong-tiangong-wentian-arrays.glb +0 -0
  271. package/dist/assets/tiangong-tiangong-wentian-arrays.painted.svg +1 -0
  272. package/dist/assets/tiangong-tiangong-wentian-arrays.svg +1 -0
  273. package/dist/assets/tiangong-tiangong-wentian-arrays.thick.svg +1 -0
  274. package/dist/assets/tiangong-tiangong-wentian.glb +0 -0
  275. package/dist/assets/tiangong-tiangong-wentian.painted.svg +1 -0
  276. package/dist/assets/tiangong-tiangong-wentian.svg +1 -0
  277. package/dist/assets/tiangong-tiangong-wentian.thick.svg +1 -0
  278. package/dist/assets/tiangong-tiangong.glb +0 -0
  279. package/dist/assets/tiangong-tiangong.painted.svg +1 -0
  280. package/dist/assets/tiangong-tiangong.svg +1 -0
  281. package/dist/assets/tiangong-tiangong.thick.svg +1 -0
  282. package/dist/buildbar.js +22 -5
  283. package/dist/data/credits.d.ts +18 -1
  284. package/dist/data/credits.js +20 -3
  285. package/dist/data/hubble.js +16 -6
  286. package/dist/data/iss.js +52 -5
  287. package/dist/data/jupiterc.js +11 -6
  288. package/dist/data/makers.d.ts +1 -0
  289. package/dist/data/makers.js +2 -1
  290. package/dist/data/sources.d.ts +160 -0
  291. package/dist/data/sources.js +20 -0
  292. package/dist/data/tiangong.d.ts +12 -0
  293. package/dist/data/tiangong.js +54 -0
  294. package/dist/element/orbitWorld.d.ts +5 -0
  295. package/dist/element/orbitWorld.js +46 -1
  296. package/dist/element/scene.d.ts +6 -0
  297. package/dist/element/scene.js +22 -2
  298. package/dist/element.js +11 -2
  299. package/dist/launches/data.d.ts +2 -0
  300. package/dist/launches/data.js +4 -0
  301. package/dist/launches/index.d.ts +318 -0
  302. package/dist/launches/index.js +249 -0
  303. package/dist/launches/links.d.ts +43 -0
  304. package/dist/launches/links.js +40 -0
  305. package/dist/launches/source.d.ts +20 -0
  306. package/dist/launches/source.js +22 -0
  307. package/dist/model/hubble.js +51 -17
  308. package/dist/model/iss.js +109 -23
  309. package/dist/model/jupiterc.js +29 -11
  310. package/dist/model/registry.js +4 -2
  311. package/dist/model/tiangong.d.ts +2 -0
  312. package/dist/model/tiangong.js +109 -0
  313. package/dist/parts.d.ts +1 -1
  314. package/dist/rockets.js +52 -3
  315. package/dist/thrusters.js +4 -4
  316. package/package.json +12 -2
  317. package/dist/assets/models/hubble-telescope.glb +0 -0
  318. package/dist/assets/models/iss-station.glb +0 -0
  319. package/dist/assets/models/jupiter-c-vehicle.glb +0 -0
@@ -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";
@@ -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
  });
@@ -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;
@@ -303,6 +303,10 @@ export class RocketViewer {
303
303
  skyGroups = { planets: true, moons: true, dwarfs: true, belts: true, craft: true };
304
304
  skyWhen = Date.now();
305
305
  moveSky = null;
306
+ /** Seconds of the Earth's own day that pass in each real second; 0 holds it still. */
307
+ worldRate = 0;
308
+ worldAt = 0;
309
+ turnWorld = null;
306
310
  paintSkyGroups = null;
307
311
  constructor(holder, options) {
308
312
  this.holder = holder;
@@ -467,6 +471,12 @@ export class RocketViewer {
467
471
  this.showSketch();
468
472
  this.wake();
469
473
  }
474
+ /** 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. */
475
+ setWorldTurn(rate) {
476
+ this.worldRate = Number.isFinite(rate) ? rate : 0;
477
+ this.worldAt = 0;
478
+ this.wake();
479
+ }
470
480
  /** Puts the Moon, the major moons and the belts at `ms`. */
471
481
  setWhen(ms) {
472
482
  if (!Number.isFinite(ms))
@@ -503,7 +513,7 @@ export class RocketViewer {
503
513
  if (this.orbitGone || this.scene.getObjectByName("orbit-world"))
504
514
  return;
505
515
  this.orbitGone = () => { };
506
- void import("./orbitWorld.js").then(({ applySolarGroups, moveOrbit, orbitWorld }) => {
516
+ void import("./orbitWorld.js").then(({ applySolarGroups, moveOrbit, orbitWorld, turnOrbit }) => {
507
517
  if (this.disposed)
508
518
  return;
509
519
  const world = orbitWorld(() => {
@@ -515,6 +525,7 @@ export class RocketViewer {
515
525
  this.moonNode = world.group.getObjectByName("moon") ?? null;
516
526
  this.orbitGone = world.dispose;
517
527
  this.moveSky = (ms) => moveOrbit(world.group, ms);
528
+ this.turnWorld = (seconds) => turnOrbit(world.group, seconds);
518
529
  this.paintSkyGroups = (groups) => applySolarGroups(world.group, groups);
519
530
  this.paintSkyGroups(this.skyGroups);
520
531
  this.canvas.dataset.globe = this.orbitOn ? "earth" : "off";
@@ -2903,6 +2914,15 @@ export class RocketViewer {
2903
2914
  this.swarm?.step(now / 1000);
2904
2915
  this.needsDraw = true;
2905
2916
  }
2917
+ const worldTurning = this.orbitOn && this.turnWorld !== null && this.worldRate !== 0 && !this.options.reducedMotion;
2918
+ if (worldTurning && this.turnWorld && now - this.worldAt >= MOTION_GAP_MS) {
2919
+ // a gap longer than a few frames is the page being hidden or busy, not time the Earth should catch up on
2920
+ const seconds = this.worldAt === 0 ? MOTION_GAP_MS / 1000 : Math.min(0.1, (now - this.worldAt) / 1000);
2921
+ this.worldAt = now;
2922
+ this.canvas.dataset.worldTurn = this.turnWorld(seconds * this.worldRate).toFixed(3);
2923
+ this.needsDraw = true;
2924
+ }
2925
+ this.canvas.dataset.worldTurning = worldTurning ? "true" : "false";
2906
2926
  const pulsing = this.hasPulse && this.lightsMode !== "off" && !this.options.reducedMotion;
2907
2927
  if (pulsing && now - this.lampDrawn >= MOTION_GAP_MS) {
2908
2928
  this.lampDrawn = now;
@@ -3007,7 +3027,7 @@ export class RocketViewer {
3007
3027
  const drifting = this.drifting();
3008
3028
  const jetting = this.thrusterChoice === "station-keeping" && !this.options.reducedMotion && awake || (this.thrusters?.puffCount() ?? 0) > 0;
3009
3029
  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))
3030
+ 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
3031
  this.frame = requestAnimationFrame(this.tick);
3012
3032
  this.inTick = false;
3013
3033
  };
package/dist/element.js CHANGED
@@ -134,7 +134,7 @@ function whyNot(mode) {
134
134
  * ```
135
135
  */
136
136
  export class UchusenRocket extends HTMLBase {
137
- static observedAttributes = ["rocket", "variant", "show", "look", "view", "build", "mode", "assets", "spin", "way", "label", "engines", "lights", "thrusters", "phase", "motion", "labels", "inspector", "beside", "captions", "scale-note", "off-screen", "scale", "progress", "float", "names", "leave", "docked", "edges", "world", "form"];
137
+ static observedAttributes = ["rocket", "variant", "show", "look", "view", "build", "mode", "assets", "spin", "way", "label", "engines", "lights", "thrusters", "phase", "motion", "labels", "inspector", "beside", "captions", "scale-note", "off-screen", "scale", "progress", "float", "names", "leave", "docked", "edges", "world", "world-turn", "form"];
138
138
  descriptionValue = null;
139
139
  picture = null;
140
140
  holder = null;
@@ -361,6 +361,8 @@ export class UchusenRocket extends HTMLBase {
361
361
  this.viewer?.setEdges(after === "open");
362
362
  else if (name === "world")
363
363
  this.viewer?.setOrbit(after === "earth");
364
+ else if (name === "world-turn")
365
+ this.viewer?.setWorldTurn(Number(after));
364
366
  else if (name === "names")
365
367
  this.viewer?.setNameLabels(after !== "off");
366
368
  else if (name === "progress")
@@ -740,6 +742,10 @@ export class UchusenRocket extends HTMLBase {
740
742
  this.dataset.slots = this.builtNow.parts.map((part) => part.slot).join(",");
741
743
  this.dataset.form = this.descriptionNow().form ?? "stack";
742
744
  this.dataset.detail = this.detailFor(this.descriptionNow());
745
+ if (CARRIERS.has(this.descriptionNow().rocket))
746
+ this.dataset.docked = this.dockedFine ? "full" : "coarse";
747
+ else
748
+ delete this.dataset.docked;
743
749
  this.dataset.custom = String(this.builtNow.report.custom);
744
750
  }
745
751
  async applyRocket() {
@@ -802,10 +808,12 @@ export class UchusenRocket extends HTMLBase {
802
808
  upgradeDocked() {
803
809
  if (this.dockedFine)
804
810
  return true;
805
- if (!this.fine || !this.builtNow || !CARRIERS.has(this.descriptionNow().rocket))
811
+ if (!this.builtNow || !CARRIERS.has(this.descriptionNow().rocket))
806
812
  return false;
807
813
  const description = this.descriptionNow();
814
+ // A page that zooms the picture and leaves the camera where it is never brings the fine build in by distance, so the carrier is brought to its full build here too.
808
815
  this.dockedFine = true;
816
+ this.fine = true;
809
817
  try {
810
818
  this.builtNow = build(description, { detail: "full", dockedDetail: "full", ...this.besideOptions(description), scale: this.sizeNow(description), ...this.dockedOption() });
811
819
  }
@@ -978,6 +986,7 @@ export class UchusenRocket extends HTMLBase {
978
986
  });
979
987
  this.viewer = made;
980
988
  made.setOrbit(this.getAttribute("world") === "earth");
989
+ made.setWorldTurn(Number(this.getAttribute("world-turn")));
981
990
  if (this.pivotWanted)
982
991
  made.setPivot(this.pivotWanted.at, this.pivotWanted.label);
983
992
  if (this.pathsWanted !== null)
@@ -0,0 +1,2 @@
1
+ /** The packed log. */
2
+ export declare const PACKED_LAUNCHES: string;