@johnmorrisdotca/uchusen-rockets 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (891) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/LICENSES/ODbL-1.0.txt +540 -0
  3. package/NOTICE.md +56 -6
  4. package/README.md +49 -14
  5. package/dist/assets/apollo-soyuz-apollo-soyuz-apart.painted.svg +1 -0
  6. package/dist/assets/apollo-soyuz-apollo-soyuz-apart.svg +1 -0
  7. package/dist/assets/apollo-soyuz-apollo-soyuz-apart.thick.svg +1 -0
  8. package/dist/assets/apollo-soyuz-apollo-soyuz-csm.glb +0 -0
  9. package/dist/assets/apollo-soyuz-apollo-soyuz-csm.painted.svg +1 -0
  10. package/dist/assets/apollo-soyuz-apollo-soyuz-csm.svg +1 -0
  11. package/dist/assets/apollo-soyuz-apollo-soyuz-csm.thick.svg +1 -0
  12. package/dist/assets/apollo-soyuz-apollo-soyuz-docking-module.glb +0 -0
  13. package/dist/assets/apollo-soyuz-apollo-soyuz-docking-module.painted.svg +1 -0
  14. package/dist/assets/apollo-soyuz-apollo-soyuz-docking-module.svg +1 -0
  15. package/dist/assets/apollo-soyuz-apollo-soyuz-docking-module.thick.svg +1 -0
  16. package/dist/assets/apollo-soyuz-apollo-soyuz-soyuz.glb +0 -0
  17. package/dist/assets/apollo-soyuz-apollo-soyuz-soyuz.painted.svg +1 -0
  18. package/dist/assets/apollo-soyuz-apollo-soyuz-soyuz.svg +1 -0
  19. package/dist/assets/apollo-soyuz-apollo-soyuz-soyuz.thick.svg +1 -0
  20. package/dist/assets/apollo-soyuz-apollo-soyuz.glb +0 -0
  21. package/dist/assets/apollo-soyuz-apollo-soyuz.painted.svg +1 -0
  22. package/dist/assets/apollo-soyuz-apollo-soyuz.svg +1 -0
  23. package/dist/assets/apollo-soyuz-apollo-soyuz.thick.svg +1 -0
  24. package/dist/assets/dragon-cargo-dragon-2-apart.painted.svg +1 -0
  25. package/dist/assets/dragon-cargo-dragon-2-apart.svg +1 -0
  26. package/dist/assets/dragon-cargo-dragon-2-apart.thick.svg +1 -0
  27. package/dist/assets/dragon-cargo-dragon-2-capsule.glb +0 -0
  28. package/dist/assets/dragon-cargo-dragon-2-capsule.painted.svg +1 -0
  29. package/dist/assets/dragon-cargo-dragon-2-capsule.svg +1 -0
  30. package/dist/assets/dragon-cargo-dragon-2-capsule.thick.svg +1 -0
  31. package/dist/assets/dragon-cargo-dragon-2-trunk.glb +0 -0
  32. package/dist/assets/dragon-cargo-dragon-2-trunk.painted.svg +1 -0
  33. package/dist/assets/dragon-cargo-dragon-2-trunk.svg +1 -0
  34. package/dist/assets/dragon-cargo-dragon-2-trunk.thick.svg +1 -0
  35. package/dist/assets/dragon-cargo-dragon-2.glb +0 -0
  36. package/dist/assets/dragon-cargo-dragon-2.painted.svg +1 -0
  37. package/dist/assets/dragon-cargo-dragon-2.svg +1 -0
  38. package/dist/assets/dragon-cargo-dragon-2.thick.svg +1 -0
  39. package/dist/assets/dragon-crew-dragon-inside.glb +0 -0
  40. package/dist/assets/dragon-crew-dragon-inside.painted.svg +1 -0
  41. package/dist/assets/dragon-crew-dragon-inside.svg +1 -0
  42. package/dist/assets/dragon-crew-dragon-inside.thick.svg +1 -0
  43. package/dist/assets/dragon-dragon-1-apart.painted.svg +1 -1
  44. package/dist/assets/dragon-dragon-1-apart.svg +1 -1
  45. package/dist/assets/dragon-dragon-1-apart.thick.svg +1 -1
  46. package/dist/assets/dragon-dragon-1-capsule.painted.svg +1 -1
  47. package/dist/assets/dragon-dragon-1-capsule.svg +1 -1
  48. package/dist/assets/dragon-dragon-1-capsule.thick.svg +1 -1
  49. package/dist/assets/dragon-dragon-1-trunk.painted.svg +1 -1
  50. package/dist/assets/dragon-dragon-1-trunk.svg +1 -1
  51. package/dist/assets/dragon-dragon-1-trunk.thick.svg +1 -1
  52. package/dist/assets/dragon-dragon-1.painted.svg +1 -1
  53. package/dist/assets/dragon-dragon-1.svg +1 -1
  54. package/dist/assets/dragon-dragon-1.thick.svg +1 -1
  55. package/dist/assets/dragon-dragon-2-apart.painted.svg +1 -1
  56. package/dist/assets/dragon-dragon-2-apart.svg +1 -1
  57. package/dist/assets/dragon-dragon-2-apart.thick.svg +1 -1
  58. package/dist/assets/dragon-dragon-2-capsule.painted.svg +1 -1
  59. package/dist/assets/dragon-dragon-2-capsule.svg +1 -1
  60. package/dist/assets/dragon-dragon-2-capsule.thick.svg +1 -1
  61. package/dist/assets/dragon-dragon-2-trunk.painted.svg +1 -1
  62. package/dist/assets/dragon-dragon-2-trunk.svg +1 -1
  63. package/dist/assets/dragon-dragon-2-trunk.thick.svg +1 -1
  64. package/dist/assets/dragon-dragon-2.painted.svg +1 -1
  65. package/dist/assets/dragon-dragon-2.svg +1 -1
  66. package/dist/assets/dragon-dragon-2.thick.svg +1 -1
  67. package/dist/assets/droneship-asog-apart.painted.svg +1 -0
  68. package/dist/assets/droneship-asog-apart.svg +1 -0
  69. package/dist/assets/droneship-asog-apart.thick.svg +1 -0
  70. package/dist/assets/droneship-asog-deck.glb +0 -0
  71. package/dist/assets/droneship-asog-deck.painted.svg +1 -0
  72. package/dist/assets/droneship-asog-deck.svg +1 -0
  73. package/dist/assets/droneship-asog-deck.thick.svg +1 -0
  74. package/dist/assets/droneship-asog-landed.glb +0 -0
  75. package/dist/assets/droneship-asog-landed.painted.svg +1 -0
  76. package/dist/assets/droneship-asog-landed.svg +1 -0
  77. package/dist/assets/droneship-asog-landed.thick.svg +1 -0
  78. package/dist/assets/droneship-asog.glb +0 -0
  79. package/dist/assets/droneship-asog.painted.svg +1 -0
  80. package/dist/assets/droneship-asog.svg +1 -0
  81. package/dist/assets/droneship-asog.thick.svg +1 -0
  82. package/dist/assets/droneship-jrti-apart.painted.svg +1 -0
  83. package/dist/assets/droneship-jrti-apart.svg +1 -0
  84. package/dist/assets/droneship-jrti-apart.thick.svg +1 -0
  85. package/dist/assets/droneship-jrti-deck.glb +0 -0
  86. package/dist/assets/droneship-jrti-deck.painted.svg +1 -0
  87. package/dist/assets/droneship-jrti-deck.svg +1 -0
  88. package/dist/assets/droneship-jrti-deck.thick.svg +1 -0
  89. package/dist/assets/droneship-jrti-landed.glb +0 -0
  90. package/dist/assets/droneship-jrti-landed.painted.svg +1 -0
  91. package/dist/assets/droneship-jrti-landed.svg +1 -0
  92. package/dist/assets/droneship-jrti-landed.thick.svg +1 -0
  93. package/dist/assets/droneship-jrti.glb +0 -0
  94. package/dist/assets/droneship-jrti.painted.svg +1 -0
  95. package/dist/assets/droneship-jrti.svg +1 -0
  96. package/dist/assets/droneship-jrti.thick.svg +1 -0
  97. package/dist/assets/droneship-ocisly-apart.painted.svg +1 -0
  98. package/dist/assets/droneship-ocisly-apart.svg +1 -0
  99. package/dist/assets/droneship-ocisly-apart.thick.svg +1 -0
  100. package/dist/assets/droneship-ocisly-deck.glb +0 -0
  101. package/dist/assets/droneship-ocisly-deck.painted.svg +1 -0
  102. package/dist/assets/droneship-ocisly-deck.svg +1 -0
  103. package/dist/assets/droneship-ocisly-deck.thick.svg +1 -0
  104. package/dist/assets/droneship-ocisly-landed.glb +0 -0
  105. package/dist/assets/droneship-ocisly-landed.painted.svg +1 -0
  106. package/dist/assets/droneship-ocisly-landed.svg +1 -0
  107. package/dist/assets/droneship-ocisly-landed.thick.svg +1 -0
  108. package/dist/assets/droneship-ocisly.glb +0 -0
  109. package/dist/assets/droneship-ocisly.painted.svg +1 -0
  110. package/dist/assets/droneship-ocisly.svg +1 -0
  111. package/dist/assets/droneship-ocisly.thick.svg +1 -0
  112. package/dist/assets/electron-electron-adapter.glb +0 -0
  113. package/dist/assets/electron-electron-adapter.painted.svg +1 -0
  114. package/dist/assets/electron-electron-adapter.svg +1 -0
  115. package/dist/assets/electron-electron-adapter.thick.svg +1 -0
  116. package/dist/assets/electron-electron-apart.painted.svg +1 -0
  117. package/dist/assets/electron-electron-apart.svg +1 -0
  118. package/dist/assets/electron-electron-apart.thick.svg +1 -0
  119. package/dist/assets/electron-electron-fairing.glb +0 -0
  120. package/dist/assets/electron-electron-fairing.painted.svg +1 -0
  121. package/dist/assets/electron-electron-fairing.svg +1 -0
  122. package/dist/assets/electron-electron-fairing.thick.svg +1 -0
  123. package/dist/assets/electron-electron-first-stage.glb +0 -0
  124. package/dist/assets/electron-electron-first-stage.painted.svg +1 -0
  125. package/dist/assets/electron-electron-first-stage.svg +1 -0
  126. package/dist/assets/electron-electron-first-stage.thick.svg +1 -0
  127. package/dist/assets/electron-electron-second-stage.glb +0 -0
  128. package/dist/assets/electron-electron-second-stage.painted.svg +1 -0
  129. package/dist/assets/electron-electron-second-stage.svg +1 -0
  130. package/dist/assets/electron-electron-second-stage.thick.svg +1 -0
  131. package/dist/assets/electron-electron.glb +0 -0
  132. package/dist/assets/electron-electron.painted.svg +1 -0
  133. package/dist/assets/electron-electron.svg +1 -0
  134. package/dist/assets/electron-electron.thick.svg +1 -0
  135. package/dist/assets/falcon-1-falcon-1-apart.painted.svg +1 -0
  136. package/dist/assets/falcon-1-falcon-1-apart.svg +1 -0
  137. package/dist/assets/falcon-1-falcon-1-apart.thick.svg +1 -0
  138. package/dist/assets/falcon-1-falcon-1-fairing.glb +0 -0
  139. package/dist/assets/falcon-1-falcon-1-fairing.painted.svg +1 -0
  140. package/dist/assets/falcon-1-falcon-1-fairing.svg +1 -0
  141. package/dist/assets/falcon-1-falcon-1-fairing.thick.svg +1 -0
  142. package/dist/assets/falcon-1-falcon-1-first-stage.glb +0 -0
  143. package/dist/assets/falcon-1-falcon-1-first-stage.painted.svg +1 -0
  144. package/dist/assets/falcon-1-falcon-1-first-stage.svg +1 -0
  145. package/dist/assets/falcon-1-falcon-1-first-stage.thick.svg +1 -0
  146. package/dist/assets/falcon-1-falcon-1-second-stage.glb +0 -0
  147. package/dist/assets/falcon-1-falcon-1-second-stage.painted.svg +1 -0
  148. package/dist/assets/falcon-1-falcon-1-second-stage.svg +1 -0
  149. package/dist/assets/falcon-1-falcon-1-second-stage.thick.svg +1 -0
  150. package/dist/assets/falcon-1-falcon-1.glb +0 -0
  151. package/dist/assets/falcon-1-falcon-1.painted.svg +1 -0
  152. package/dist/assets/falcon-1-falcon-1.svg +1 -0
  153. package/dist/assets/falcon-1-falcon-1.thick.svg +1 -0
  154. package/dist/assets/falcon-1-falcon-1e-apart.painted.svg +1 -0
  155. package/dist/assets/falcon-1-falcon-1e-apart.svg +1 -0
  156. package/dist/assets/falcon-1-falcon-1e-apart.thick.svg +1 -0
  157. package/dist/assets/falcon-1-falcon-1e-fairing.glb +0 -0
  158. package/dist/assets/falcon-1-falcon-1e-fairing.painted.svg +1 -0
  159. package/dist/assets/falcon-1-falcon-1e-fairing.svg +1 -0
  160. package/dist/assets/falcon-1-falcon-1e-fairing.thick.svg +1 -0
  161. package/dist/assets/falcon-1-falcon-1e-first-stage.glb +0 -0
  162. package/dist/assets/falcon-1-falcon-1e-first-stage.painted.svg +1 -0
  163. package/dist/assets/falcon-1-falcon-1e-first-stage.svg +1 -0
  164. package/dist/assets/falcon-1-falcon-1e-first-stage.thick.svg +1 -0
  165. package/dist/assets/falcon-1-falcon-1e-second-stage.glb +0 -0
  166. package/dist/assets/falcon-1-falcon-1e-second-stage.painted.svg +1 -0
  167. package/dist/assets/falcon-1-falcon-1e-second-stage.svg +1 -0
  168. package/dist/assets/falcon-1-falcon-1e-second-stage.thick.svg +1 -0
  169. package/dist/assets/falcon-1-falcon-1e.glb +0 -0
  170. package/dist/assets/falcon-1-falcon-1e.painted.svg +1 -0
  171. package/dist/assets/falcon-1-falcon-1e.svg +1 -0
  172. package/dist/assets/falcon-1-falcon-1e.thick.svg +1 -0
  173. package/dist/assets/falcon-9-block-5-apart.painted.svg +1 -1
  174. package/dist/assets/falcon-9-block-5-apart.svg +1 -1
  175. package/dist/assets/falcon-9-block-5-apart.thick.svg +1 -1
  176. package/dist/assets/falcon-9-block-5-dragon-2-apart.painted.svg +1 -1
  177. package/dist/assets/falcon-9-block-5-dragon-2-apart.svg +1 -1
  178. package/dist/assets/falcon-9-block-5-dragon-2-apart.thick.svg +1 -1
  179. package/dist/assets/falcon-9-block-5-dragon-2-capsule.painted.svg +1 -1
  180. package/dist/assets/falcon-9-block-5-dragon-2-capsule.svg +1 -1
  181. package/dist/assets/falcon-9-block-5-dragon-2-capsule.thick.svg +1 -1
  182. package/dist/assets/falcon-9-block-5-dragon-2-first-stage.painted.svg +1 -1
  183. package/dist/assets/falcon-9-block-5-dragon-2-first-stage.svg +1 -1
  184. package/dist/assets/falcon-9-block-5-dragon-2-first-stage.thick.svg +1 -1
  185. package/dist/assets/falcon-9-block-5-dragon-2-second-stage.painted.svg +1 -1
  186. package/dist/assets/falcon-9-block-5-dragon-2-second-stage.svg +1 -1
  187. package/dist/assets/falcon-9-block-5-dragon-2-second-stage.thick.svg +1 -1
  188. package/dist/assets/falcon-9-block-5-dragon-2-trunk.painted.svg +1 -1
  189. package/dist/assets/falcon-9-block-5-dragon-2-trunk.svg +1 -1
  190. package/dist/assets/falcon-9-block-5-dragon-2-trunk.thick.svg +1 -1
  191. package/dist/assets/falcon-9-block-5-dragon-2.painted.svg +1 -1
  192. package/dist/assets/falcon-9-block-5-dragon-2.svg +1 -1
  193. package/dist/assets/falcon-9-block-5-dragon-2.thick.svg +1 -1
  194. package/dist/assets/falcon-9-block-5-fairing.painted.svg +1 -1
  195. package/dist/assets/falcon-9-block-5-fairing.svg +1 -1
  196. package/dist/assets/falcon-9-block-5-fairing.thick.svg +1 -1
  197. package/dist/assets/falcon-9-block-5-first-stage.painted.svg +1 -1
  198. package/dist/assets/falcon-9-block-5-first-stage.svg +1 -1
  199. package/dist/assets/falcon-9-block-5-first-stage.thick.svg +1 -1
  200. package/dist/assets/falcon-9-block-5-second-stage.painted.svg +1 -1
  201. package/dist/assets/falcon-9-block-5-second-stage.svg +1 -1
  202. package/dist/assets/falcon-9-block-5-second-stage.thick.svg +1 -1
  203. package/dist/assets/falcon-9-block-5.painted.svg +1 -1
  204. package/dist/assets/falcon-9-block-5.svg +1 -1
  205. package/dist/assets/falcon-9-block-5.thick.svg +1 -1
  206. package/dist/assets/falcon-9-ft-apart.painted.svg +1 -1
  207. package/dist/assets/falcon-9-ft-apart.svg +1 -1
  208. package/dist/assets/falcon-9-ft-apart.thick.svg +1 -1
  209. package/dist/assets/falcon-9-ft-fairing.painted.svg +1 -1
  210. package/dist/assets/falcon-9-ft-fairing.svg +1 -1
  211. package/dist/assets/falcon-9-ft-fairing.thick.svg +1 -1
  212. package/dist/assets/falcon-9-ft-first-stage.painted.svg +1 -1
  213. package/dist/assets/falcon-9-ft-first-stage.svg +1 -1
  214. package/dist/assets/falcon-9-ft-first-stage.thick.svg +1 -1
  215. package/dist/assets/falcon-9-ft-second-stage.painted.svg +1 -1
  216. package/dist/assets/falcon-9-ft-second-stage.svg +1 -1
  217. package/dist/assets/falcon-9-ft-second-stage.thick.svg +1 -1
  218. package/dist/assets/falcon-9-ft.painted.svg +1 -1
  219. package/dist/assets/falcon-9-ft.svg +1 -1
  220. package/dist/assets/falcon-9-ft.thick.svg +1 -1
  221. package/dist/assets/falcon-9-v1.0-apart.painted.svg +1 -1
  222. package/dist/assets/falcon-9-v1.0-apart.svg +1 -1
  223. package/dist/assets/falcon-9-v1.0-apart.thick.svg +1 -1
  224. package/dist/assets/falcon-9-v1.0-fairing.painted.svg +1 -1
  225. package/dist/assets/falcon-9-v1.0-fairing.svg +1 -1
  226. package/dist/assets/falcon-9-v1.0-fairing.thick.svg +1 -1
  227. package/dist/assets/falcon-9-v1.0-first-stage.painted.svg +1 -1
  228. package/dist/assets/falcon-9-v1.0-first-stage.svg +1 -1
  229. package/dist/assets/falcon-9-v1.0-first-stage.thick.svg +1 -1
  230. package/dist/assets/falcon-9-v1.0-second-stage.painted.svg +1 -1
  231. package/dist/assets/falcon-9-v1.0-second-stage.svg +1 -1
  232. package/dist/assets/falcon-9-v1.0-second-stage.thick.svg +1 -1
  233. package/dist/assets/falcon-9-v1.0.painted.svg +1 -1
  234. package/dist/assets/falcon-9-v1.0.svg +1 -1
  235. package/dist/assets/falcon-9-v1.0.thick.svg +1 -1
  236. package/dist/assets/falcon-9-v1.1-apart.painted.svg +1 -1
  237. package/dist/assets/falcon-9-v1.1-apart.svg +1 -1
  238. package/dist/assets/falcon-9-v1.1-apart.thick.svg +1 -1
  239. package/dist/assets/falcon-9-v1.1-fairing.painted.svg +1 -1
  240. package/dist/assets/falcon-9-v1.1-fairing.svg +1 -1
  241. package/dist/assets/falcon-9-v1.1-fairing.thick.svg +1 -1
  242. package/dist/assets/falcon-9-v1.1-first-stage.painted.svg +1 -1
  243. package/dist/assets/falcon-9-v1.1-first-stage.svg +1 -1
  244. package/dist/assets/falcon-9-v1.1-first-stage.thick.svg +1 -1
  245. package/dist/assets/falcon-9-v1.1-second-stage.painted.svg +1 -1
  246. package/dist/assets/falcon-9-v1.1-second-stage.svg +1 -1
  247. package/dist/assets/falcon-9-v1.1-second-stage.thick.svg +1 -1
  248. package/dist/assets/falcon-9-v1.1.painted.svg +1 -1
  249. package/dist/assets/falcon-9-v1.1.svg +1 -1
  250. package/dist/assets/falcon-9-v1.1.thick.svg +1 -1
  251. package/dist/assets/falcon-heavy-falcon-heavy-apart.painted.svg +1 -1
  252. package/dist/assets/falcon-heavy-falcon-heavy-apart.svg +1 -1
  253. package/dist/assets/falcon-heavy-falcon-heavy-apart.thick.svg +1 -1
  254. package/dist/assets/falcon-heavy-falcon-heavy-centre.painted.svg +1 -1
  255. package/dist/assets/falcon-heavy-falcon-heavy-centre.svg +1 -1
  256. package/dist/assets/falcon-heavy-falcon-heavy-centre.thick.svg +1 -1
  257. package/dist/assets/falcon-heavy-falcon-heavy-side-left.painted.svg +1 -1
  258. package/dist/assets/falcon-heavy-falcon-heavy-side-left.svg +1 -1
  259. package/dist/assets/falcon-heavy-falcon-heavy-side-left.thick.svg +1 -1
  260. package/dist/assets/falcon-heavy-falcon-heavy-side-right.painted.svg +1 -1
  261. package/dist/assets/falcon-heavy-falcon-heavy-side-right.svg +1 -1
  262. package/dist/assets/falcon-heavy-falcon-heavy-side-right.thick.svg +1 -1
  263. package/dist/assets/falcon-heavy-falcon-heavy.painted.svg +1 -1
  264. package/dist/assets/falcon-heavy-falcon-heavy.svg +1 -1
  265. package/dist/assets/falcon-heavy-falcon-heavy.thick.svg +1 -1
  266. package/dist/assets/gemini-gemini-adapter.glb +0 -0
  267. package/dist/assets/gemini-gemini-adapter.painted.svg +1 -0
  268. package/dist/assets/gemini-gemini-adapter.svg +1 -0
  269. package/dist/assets/gemini-gemini-adapter.thick.svg +1 -0
  270. package/dist/assets/gemini-gemini-apart.painted.svg +1 -0
  271. package/dist/assets/gemini-gemini-apart.svg +1 -0
  272. package/dist/assets/gemini-gemini-apart.thick.svg +1 -0
  273. package/dist/assets/gemini-gemini-capsule.glb +0 -0
  274. package/dist/assets/gemini-gemini-capsule.painted.svg +1 -0
  275. package/dist/assets/gemini-gemini-capsule.svg +1 -0
  276. package/dist/assets/gemini-gemini-capsule.thick.svg +1 -0
  277. package/dist/assets/gemini-gemini.glb +0 -0
  278. package/dist/assets/gemini-gemini.painted.svg +1 -0
  279. package/dist/assets/gemini-gemini.svg +1 -0
  280. package/dist/assets/gemini-gemini.thick.svg +1 -0
  281. package/dist/assets/grasshopper-grasshopper.painted.svg +1 -1
  282. package/dist/assets/grasshopper-grasshopper.svg +1 -1
  283. package/dist/assets/grasshopper-grasshopper.thick.svg +1 -1
  284. package/dist/assets/hubble-hubble.glb +0 -0
  285. package/dist/assets/hubble-hubble.painted.svg +1 -0
  286. package/dist/assets/hubble-hubble.svg +1 -0
  287. package/dist/assets/hubble-hubble.thick.svg +1 -0
  288. package/dist/assets/iss-iss.glb +0 -0
  289. package/dist/assets/iss-iss.painted.svg +1 -0
  290. package/dist/assets/iss-iss.svg +1 -0
  291. package/dist/assets/iss-iss.thick.svg +1 -0
  292. package/dist/assets/jupiter-c-jupiter-c.glb +0 -0
  293. package/dist/assets/jupiter-c-jupiter-c.painted.svg +1 -0
  294. package/dist/assets/jupiter-c-jupiter-c.svg +1 -0
  295. package/dist/assets/jupiter-c-jupiter-c.thick.svg +1 -0
  296. package/dist/assets/landing-zone-lz-1-apart.painted.svg +1 -0
  297. package/dist/assets/landing-zone-lz-1-apart.svg +1 -0
  298. package/dist/assets/landing-zone-lz-1-apart.thick.svg +1 -0
  299. package/dist/assets/landing-zone-lz-1-landed.glb +0 -0
  300. package/dist/assets/landing-zone-lz-1-landed.painted.svg +1 -0
  301. package/dist/assets/landing-zone-lz-1-landed.svg +1 -0
  302. package/dist/assets/landing-zone-lz-1-landed.thick.svg +1 -0
  303. package/dist/assets/landing-zone-lz-1-pad.glb +0 -0
  304. package/dist/assets/landing-zone-lz-1-pad.painted.svg +1 -0
  305. package/dist/assets/landing-zone-lz-1-pad.svg +1 -0
  306. package/dist/assets/landing-zone-lz-1-pad.thick.svg +1 -0
  307. package/dist/assets/landing-zone-lz-1.glb +0 -0
  308. package/dist/assets/landing-zone-lz-1.painted.svg +1 -0
  309. package/dist/assets/landing-zone-lz-1.svg +1 -0
  310. package/dist/assets/landing-zone-lz-1.thick.svg +1 -0
  311. package/dist/assets/landing-zone-lz-4-apart.painted.svg +1 -0
  312. package/dist/assets/landing-zone-lz-4-apart.svg +1 -0
  313. package/dist/assets/landing-zone-lz-4-apart.thick.svg +1 -0
  314. package/dist/assets/landing-zone-lz-4-landed.glb +0 -0
  315. package/dist/assets/landing-zone-lz-4-landed.painted.svg +1 -0
  316. package/dist/assets/landing-zone-lz-4-landed.svg +1 -0
  317. package/dist/assets/landing-zone-lz-4-landed.thick.svg +1 -0
  318. package/dist/assets/landing-zone-lz-4-pad.glb +0 -0
  319. package/dist/assets/landing-zone-lz-4-pad.painted.svg +1 -0
  320. package/dist/assets/landing-zone-lz-4-pad.svg +1 -0
  321. package/dist/assets/landing-zone-lz-4-pad.thick.svg +1 -0
  322. package/dist/assets/landing-zone-lz-4.glb +0 -0
  323. package/dist/assets/landing-zone-lz-4.painted.svg +1 -0
  324. package/dist/assets/landing-zone-lz-4.svg +1 -0
  325. package/dist/assets/landing-zone-lz-4.thick.svg +1 -0
  326. package/dist/assets/launch-tower-catch-apart.painted.svg +1 -0
  327. package/dist/assets/launch-tower-catch-apart.svg +1 -0
  328. package/dist/assets/launch-tower-catch-apart.thick.svg +1 -0
  329. package/dist/assets/launch-tower-catch-arms.glb +0 -0
  330. package/dist/assets/launch-tower-catch-arms.painted.svg +1 -0
  331. package/dist/assets/launch-tower-catch-arms.svg +1 -0
  332. package/dist/assets/launch-tower-catch-arms.thick.svg +1 -0
  333. package/dist/assets/launch-tower-catch-booster.glb +0 -0
  334. package/dist/assets/launch-tower-catch-booster.painted.svg +1 -0
  335. package/dist/assets/launch-tower-catch-booster.svg +1 -0
  336. package/dist/assets/launch-tower-catch-booster.thick.svg +1 -0
  337. package/dist/assets/launch-tower-catch-mount.glb +0 -0
  338. package/dist/assets/launch-tower-catch-mount.painted.svg +1 -0
  339. package/dist/assets/launch-tower-catch-mount.svg +1 -0
  340. package/dist/assets/launch-tower-catch-mount.thick.svg +1 -0
  341. package/dist/assets/launch-tower-catch-tower.glb +0 -0
  342. package/dist/assets/launch-tower-catch-tower.painted.svg +1 -0
  343. package/dist/assets/launch-tower-catch-tower.svg +1 -0
  344. package/dist/assets/launch-tower-catch-tower.thick.svg +1 -0
  345. package/dist/assets/launch-tower-catch.glb +0 -0
  346. package/dist/assets/launch-tower-catch.painted.svg +1 -0
  347. package/dist/assets/launch-tower-catch.svg +1 -0
  348. package/dist/assets/launch-tower-catch.thick.svg +1 -0
  349. package/dist/assets/launch-tower-stack-apart.painted.svg +1 -0
  350. package/dist/assets/launch-tower-stack-apart.svg +1 -0
  351. package/dist/assets/launch-tower-stack-apart.thick.svg +1 -0
  352. package/dist/assets/launch-tower-stack-arms.glb +0 -0
  353. package/dist/assets/launch-tower-stack-arms.painted.svg +1 -0
  354. package/dist/assets/launch-tower-stack-arms.svg +1 -0
  355. package/dist/assets/launch-tower-stack-arms.thick.svg +1 -0
  356. package/dist/assets/launch-tower-stack-booster.glb +0 -0
  357. package/dist/assets/launch-tower-stack-booster.painted.svg +1 -0
  358. package/dist/assets/launch-tower-stack-booster.svg +1 -0
  359. package/dist/assets/launch-tower-stack-booster.thick.svg +1 -0
  360. package/dist/assets/launch-tower-stack-mount.glb +0 -0
  361. package/dist/assets/launch-tower-stack-mount.painted.svg +1 -0
  362. package/dist/assets/launch-tower-stack-mount.svg +1 -0
  363. package/dist/assets/launch-tower-stack-mount.thick.svg +1 -0
  364. package/dist/assets/launch-tower-stack-ship.glb +0 -0
  365. package/dist/assets/launch-tower-stack-ship.painted.svg +1 -0
  366. package/dist/assets/launch-tower-stack-ship.svg +1 -0
  367. package/dist/assets/launch-tower-stack-ship.thick.svg +1 -0
  368. package/dist/assets/launch-tower-stack-tower.glb +0 -0
  369. package/dist/assets/launch-tower-stack-tower.painted.svg +1 -0
  370. package/dist/assets/launch-tower-stack-tower.svg +1 -0
  371. package/dist/assets/launch-tower-stack-tower.thick.svg +1 -0
  372. package/dist/assets/launch-tower-stack.glb +0 -0
  373. package/dist/assets/launch-tower-stack.painted.svg +1 -0
  374. package/dist/assets/launch-tower-stack.svg +1 -0
  375. package/dist/assets/launch-tower-stack.thick.svg +1 -0
  376. package/dist/assets/launch-tower-tower-apart.painted.svg +1 -0
  377. package/dist/assets/launch-tower-tower-apart.svg +1 -0
  378. package/dist/assets/launch-tower-tower-apart.thick.svg +1 -0
  379. package/dist/assets/launch-tower-tower-arms.glb +0 -0
  380. package/dist/assets/launch-tower-tower-arms.painted.svg +1 -0
  381. package/dist/assets/launch-tower-tower-arms.svg +1 -0
  382. package/dist/assets/launch-tower-tower-arms.thick.svg +1 -0
  383. package/dist/assets/launch-tower-tower-mount.glb +0 -0
  384. package/dist/assets/launch-tower-tower-mount.painted.svg +1 -0
  385. package/dist/assets/launch-tower-tower-mount.svg +1 -0
  386. package/dist/assets/launch-tower-tower-mount.thick.svg +1 -0
  387. package/dist/assets/launch-tower-tower-tower.glb +0 -0
  388. package/dist/assets/launch-tower-tower-tower.painted.svg +1 -0
  389. package/dist/assets/launch-tower-tower-tower.svg +1 -0
  390. package/dist/assets/launch-tower-tower-tower.thick.svg +1 -0
  391. package/dist/assets/launch-tower-tower.glb +0 -0
  392. package/dist/assets/launch-tower-tower.painted.svg +1 -0
  393. package/dist/assets/launch-tower-tower.svg +1 -0
  394. package/dist/assets/launch-tower-tower.thick.svg +1 -0
  395. package/dist/assets/lunar-module-lunar-module-apart.painted.svg +1 -0
  396. package/dist/assets/lunar-module-lunar-module-apart.svg +1 -0
  397. package/dist/assets/lunar-module-lunar-module-apart.thick.svg +1 -0
  398. package/dist/assets/lunar-module-lunar-module-ascent.glb +0 -0
  399. package/dist/assets/lunar-module-lunar-module-ascent.painted.svg +1 -0
  400. package/dist/assets/lunar-module-lunar-module-ascent.svg +1 -0
  401. package/dist/assets/lunar-module-lunar-module-ascent.thick.svg +1 -0
  402. package/dist/assets/lunar-module-lunar-module-descent.glb +0 -0
  403. package/dist/assets/lunar-module-lunar-module-descent.painted.svg +1 -0
  404. package/dist/assets/lunar-module-lunar-module-descent.svg +1 -0
  405. package/dist/assets/lunar-module-lunar-module-descent.thick.svg +1 -0
  406. package/dist/assets/lunar-module-lunar-module.glb +0 -0
  407. package/dist/assets/lunar-module-lunar-module.painted.svg +1 -0
  408. package/dist/assets/lunar-module-lunar-module.svg +1 -0
  409. package/dist/assets/lunar-module-lunar-module.thick.svg +1 -0
  410. package/dist/assets/mercury-friendship-7.glb +0 -0
  411. package/dist/assets/mercury-friendship-7.painted.svg +1 -0
  412. package/dist/assets/mercury-friendship-7.svg +1 -0
  413. package/dist/assets/mercury-friendship-7.thick.svg +1 -0
  414. package/dist/assets/models/apollo-soyuz-csm.glb +0 -0
  415. package/dist/assets/models/apollo-soyuz-docking-module.glb +0 -0
  416. package/dist/assets/models/apollo-soyuz-soyuz.glb +0 -0
  417. package/dist/assets/models/gemini-adapter.glb +0 -0
  418. package/dist/assets/models/gemini-capsule.glb +0 -0
  419. package/dist/assets/models/hubble-telescope.glb +0 -0
  420. package/dist/assets/models/iss-station.glb +0 -0
  421. package/dist/assets/models/jupiter-c-vehicle.glb +0 -0
  422. package/dist/assets/models/lunar-module-ascent.glb +0 -0
  423. package/dist/assets/models/lunar-module-descent.glb +0 -0
  424. package/dist/assets/models/mercury-capsule.glb +0 -0
  425. package/dist/assets/models/space-shuttle-discovery-orbiter.glb +0 -0
  426. package/dist/assets/models/space-shuttle-stack-external-tank.glb +0 -0
  427. package/dist/assets/models/space-shuttle-stack-orbiter.glb +0 -0
  428. package/dist/assets/models/space-shuttle-stack-srb.glb +0 -0
  429. package/dist/assets/new-glenn-7x2-apart.painted.svg +1 -0
  430. package/dist/assets/new-glenn-7x2-apart.svg +1 -0
  431. package/dist/assets/new-glenn-7x2-apart.thick.svg +1 -0
  432. package/dist/assets/new-glenn-7x2-fairing.glb +0 -0
  433. package/dist/assets/new-glenn-7x2-fairing.painted.svg +1 -0
  434. package/dist/assets/new-glenn-7x2-fairing.svg +1 -0
  435. package/dist/assets/new-glenn-7x2-fairing.thick.svg +1 -0
  436. package/dist/assets/new-glenn-7x2-first-stage.glb +0 -0
  437. package/dist/assets/new-glenn-7x2-first-stage.painted.svg +1 -0
  438. package/dist/assets/new-glenn-7x2-first-stage.svg +1 -0
  439. package/dist/assets/new-glenn-7x2-first-stage.thick.svg +1 -0
  440. package/dist/assets/new-glenn-7x2-second-stage.glb +0 -0
  441. package/dist/assets/new-glenn-7x2-second-stage.painted.svg +1 -0
  442. package/dist/assets/new-glenn-7x2-second-stage.svg +1 -0
  443. package/dist/assets/new-glenn-7x2-second-stage.thick.svg +1 -0
  444. package/dist/assets/new-glenn-7x2.glb +0 -0
  445. package/dist/assets/new-glenn-7x2.painted.svg +1 -0
  446. package/dist/assets/new-glenn-7x2.svg +1 -0
  447. package/dist/assets/new-glenn-7x2.thick.svg +1 -0
  448. package/dist/assets/parts/flap-aft.painted.svg +1 -1
  449. package/dist/assets/parts/flap-aft.svg +1 -1
  450. package/dist/assets/parts/flap-aft.thick.svg +1 -1
  451. package/dist/assets/parts/flap-forward.painted.svg +1 -1
  452. package/dist/assets/parts/flap-forward.svg +1 -1
  453. package/dist/assets/parts/flap-forward.thick.svg +1 -1
  454. package/dist/assets/parts/grid-fin-four.painted.svg +1 -1
  455. package/dist/assets/parts/grid-fin-four.svg +1 -1
  456. package/dist/assets/parts/grid-fin-four.thick.svg +1 -1
  457. package/dist/assets/parts/grid-fin-three.painted.svg +1 -1
  458. package/dist/assets/parts/grid-fin-three.svg +1 -1
  459. package/dist/assets/parts/grid-fin-three.thick.svg +1 -1
  460. package/dist/assets/parts/merlin-sea-level.painted.svg +1 -1
  461. package/dist/assets/parts/merlin-sea-level.svg +1 -1
  462. package/dist/assets/parts/merlin-sea-level.thick.svg +1 -1
  463. package/dist/assets/parts/raptor-sea-level.painted.svg +1 -1
  464. package/dist/assets/parts/raptor-sea-level.svg +1 -1
  465. package/dist/assets/parts/raptor-sea-level.thick.svg +1 -1
  466. package/dist/assets/parts/raptor-vacuum.painted.svg +1 -1
  467. package/dist/assets/parts/raptor-vacuum.svg +1 -1
  468. package/dist/assets/parts/raptor-vacuum.thick.svg +1 -1
  469. package/dist/assets/saturn-v-saturn-v-adapter.glb +0 -0
  470. package/dist/assets/saturn-v-saturn-v-adapter.painted.svg +1 -0
  471. package/dist/assets/saturn-v-saturn-v-adapter.svg +1 -0
  472. package/dist/assets/saturn-v-saturn-v-adapter.thick.svg +1 -0
  473. package/dist/assets/saturn-v-saturn-v-apart.painted.svg +1 -0
  474. package/dist/assets/saturn-v-saturn-v-apart.svg +1 -0
  475. package/dist/assets/saturn-v-saturn-v-apart.thick.svg +1 -0
  476. package/dist/assets/saturn-v-saturn-v-capsule.glb +0 -0
  477. package/dist/assets/saturn-v-saturn-v-capsule.painted.svg +1 -0
  478. package/dist/assets/saturn-v-saturn-v-capsule.svg +1 -0
  479. package/dist/assets/saturn-v-saturn-v-capsule.thick.svg +1 -0
  480. package/dist/assets/saturn-v-saturn-v-escape-tower.glb +0 -0
  481. package/dist/assets/saturn-v-saturn-v-escape-tower.painted.svg +1 -0
  482. package/dist/assets/saturn-v-saturn-v-escape-tower.svg +1 -0
  483. package/dist/assets/saturn-v-saturn-v-escape-tower.thick.svg +1 -0
  484. package/dist/assets/saturn-v-saturn-v-first-stage.glb +0 -0
  485. package/dist/assets/saturn-v-saturn-v-first-stage.painted.svg +1 -0
  486. package/dist/assets/saturn-v-saturn-v-first-stage.svg +1 -0
  487. package/dist/assets/saturn-v-saturn-v-first-stage.thick.svg +1 -0
  488. package/dist/assets/saturn-v-saturn-v-second-stage.glb +0 -0
  489. package/dist/assets/saturn-v-saturn-v-second-stage.painted.svg +1 -0
  490. package/dist/assets/saturn-v-saturn-v-second-stage.svg +1 -0
  491. package/dist/assets/saturn-v-saturn-v-second-stage.thick.svg +1 -0
  492. package/dist/assets/saturn-v-saturn-v-service-module.glb +0 -0
  493. package/dist/assets/saturn-v-saturn-v-service-module.painted.svg +1 -0
  494. package/dist/assets/saturn-v-saturn-v-service-module.svg +1 -0
  495. package/dist/assets/saturn-v-saturn-v-service-module.thick.svg +1 -0
  496. package/dist/assets/saturn-v-saturn-v-third-stage.glb +0 -0
  497. package/dist/assets/saturn-v-saturn-v-third-stage.painted.svg +1 -0
  498. package/dist/assets/saturn-v-saturn-v-third-stage.svg +1 -0
  499. package/dist/assets/saturn-v-saturn-v-third-stage.thick.svg +1 -0
  500. package/dist/assets/saturn-v-saturn-v.glb +0 -0
  501. package/dist/assets/saturn-v-saturn-v.painted.svg +1 -0
  502. package/dist/assets/saturn-v-saturn-v.svg +1 -0
  503. package/dist/assets/saturn-v-saturn-v.thick.svg +1 -0
  504. package/dist/assets/sls-block-1-apart.painted.svg +1 -0
  505. package/dist/assets/sls-block-1-apart.svg +1 -0
  506. package/dist/assets/sls-block-1-apart.thick.svg +1 -0
  507. package/dist/assets/sls-block-1-capsule.glb +0 -0
  508. package/dist/assets/sls-block-1-capsule.painted.svg +1 -0
  509. package/dist/assets/sls-block-1-capsule.svg +1 -0
  510. package/dist/assets/sls-block-1-capsule.thick.svg +1 -0
  511. package/dist/assets/sls-block-1-escape-tower.glb +0 -0
  512. package/dist/assets/sls-block-1-escape-tower.painted.svg +1 -0
  513. package/dist/assets/sls-block-1-escape-tower.svg +1 -0
  514. package/dist/assets/sls-block-1-escape-tower.thick.svg +1 -0
  515. package/dist/assets/sls-block-1-first-stage.glb +0 -0
  516. package/dist/assets/sls-block-1-first-stage.painted.svg +1 -0
  517. package/dist/assets/sls-block-1-first-stage.svg +1 -0
  518. package/dist/assets/sls-block-1-first-stage.thick.svg +1 -0
  519. package/dist/assets/sls-block-1-service-module.glb +0 -0
  520. package/dist/assets/sls-block-1-service-module.painted.svg +1 -0
  521. package/dist/assets/sls-block-1-service-module.svg +1 -0
  522. package/dist/assets/sls-block-1-service-module.thick.svg +1 -0
  523. package/dist/assets/sls-block-1-srb-left.glb +0 -0
  524. package/dist/assets/sls-block-1-srb-left.painted.svg +1 -0
  525. package/dist/assets/sls-block-1-srb-left.svg +1 -0
  526. package/dist/assets/sls-block-1-srb-left.thick.svg +1 -0
  527. package/dist/assets/sls-block-1-srb-right.glb +0 -0
  528. package/dist/assets/sls-block-1-srb-right.painted.svg +1 -0
  529. package/dist/assets/sls-block-1-srb-right.svg +1 -0
  530. package/dist/assets/sls-block-1-srb-right.thick.svg +1 -0
  531. package/dist/assets/sls-block-1-upper-stage.glb +0 -0
  532. package/dist/assets/sls-block-1-upper-stage.painted.svg +1 -0
  533. package/dist/assets/sls-block-1-upper-stage.svg +1 -0
  534. package/dist/assets/sls-block-1-upper-stage.thick.svg +1 -0
  535. package/dist/assets/sls-block-1.glb +0 -0
  536. package/dist/assets/sls-block-1.painted.svg +1 -0
  537. package/dist/assets/sls-block-1.svg +1 -0
  538. package/dist/assets/sls-block-1.thick.svg +1 -0
  539. package/dist/assets/soyuz-soyuz-2-apart.painted.svg +1 -0
  540. package/dist/assets/soyuz-soyuz-2-apart.svg +1 -0
  541. package/dist/assets/soyuz-soyuz-2-apart.thick.svg +1 -0
  542. package/dist/assets/soyuz-soyuz-2-booster-1.glb +0 -0
  543. package/dist/assets/soyuz-soyuz-2-booster-1.painted.svg +1 -0
  544. package/dist/assets/soyuz-soyuz-2-booster-1.svg +1 -0
  545. package/dist/assets/soyuz-soyuz-2-booster-1.thick.svg +1 -0
  546. package/dist/assets/soyuz-soyuz-2-booster-2.glb +0 -0
  547. package/dist/assets/soyuz-soyuz-2-booster-2.painted.svg +1 -0
  548. package/dist/assets/soyuz-soyuz-2-booster-2.svg +1 -0
  549. package/dist/assets/soyuz-soyuz-2-booster-2.thick.svg +1 -0
  550. package/dist/assets/soyuz-soyuz-2-booster-3.glb +0 -0
  551. package/dist/assets/soyuz-soyuz-2-booster-3.painted.svg +1 -0
  552. package/dist/assets/soyuz-soyuz-2-booster-3.svg +1 -0
  553. package/dist/assets/soyuz-soyuz-2-booster-3.thick.svg +1 -0
  554. package/dist/assets/soyuz-soyuz-2-booster-4.glb +0 -0
  555. package/dist/assets/soyuz-soyuz-2-booster-4.painted.svg +1 -0
  556. package/dist/assets/soyuz-soyuz-2-booster-4.svg +1 -0
  557. package/dist/assets/soyuz-soyuz-2-booster-4.thick.svg +1 -0
  558. package/dist/assets/soyuz-soyuz-2-fairing.glb +0 -0
  559. package/dist/assets/soyuz-soyuz-2-fairing.painted.svg +1 -0
  560. package/dist/assets/soyuz-soyuz-2-fairing.svg +1 -0
  561. package/dist/assets/soyuz-soyuz-2-fairing.thick.svg +1 -0
  562. package/dist/assets/soyuz-soyuz-2-first-stage.glb +0 -0
  563. package/dist/assets/soyuz-soyuz-2-first-stage.painted.svg +1 -0
  564. package/dist/assets/soyuz-soyuz-2-first-stage.svg +1 -0
  565. package/dist/assets/soyuz-soyuz-2-first-stage.thick.svg +1 -0
  566. package/dist/assets/soyuz-soyuz-2-third-stage.glb +0 -0
  567. package/dist/assets/soyuz-soyuz-2-third-stage.painted.svg +1 -0
  568. package/dist/assets/soyuz-soyuz-2-third-stage.svg +1 -0
  569. package/dist/assets/soyuz-soyuz-2-third-stage.thick.svg +1 -0
  570. package/dist/assets/soyuz-soyuz-2.glb +0 -0
  571. package/dist/assets/soyuz-soyuz-2.painted.svg +1 -0
  572. package/dist/assets/soyuz-soyuz-2.svg +1 -0
  573. package/dist/assets/soyuz-soyuz-2.thick.svg +1 -0
  574. package/dist/assets/space-shuttle-discovery.glb +0 -0
  575. package/dist/assets/space-shuttle-discovery.painted.svg +1 -0
  576. package/dist/assets/space-shuttle-discovery.svg +1 -0
  577. package/dist/assets/space-shuttle-discovery.thick.svg +1 -0
  578. package/dist/assets/space-shuttle-stack-apart.painted.svg +1 -0
  579. package/dist/assets/space-shuttle-stack-apart.svg +1 -0
  580. package/dist/assets/space-shuttle-stack-apart.thick.svg +1 -0
  581. package/dist/assets/space-shuttle-stack-external-tank.glb +0 -0
  582. package/dist/assets/space-shuttle-stack-external-tank.painted.svg +1 -0
  583. package/dist/assets/space-shuttle-stack-external-tank.svg +1 -0
  584. package/dist/assets/space-shuttle-stack-external-tank.thick.svg +1 -0
  585. package/dist/assets/space-shuttle-stack-orbiter.glb +0 -0
  586. package/dist/assets/space-shuttle-stack-orbiter.painted.svg +1 -0
  587. package/dist/assets/space-shuttle-stack-orbiter.svg +1 -0
  588. package/dist/assets/space-shuttle-stack-orbiter.thick.svg +1 -0
  589. package/dist/assets/space-shuttle-stack-srb-left.glb +0 -0
  590. package/dist/assets/space-shuttle-stack-srb-left.painted.svg +1 -0
  591. package/dist/assets/space-shuttle-stack-srb-left.svg +1 -0
  592. package/dist/assets/space-shuttle-stack-srb-left.thick.svg +1 -0
  593. package/dist/assets/space-shuttle-stack-srb-right.glb +0 -0
  594. package/dist/assets/space-shuttle-stack-srb-right.painted.svg +1 -0
  595. package/dist/assets/space-shuttle-stack-srb-right.svg +1 -0
  596. package/dist/assets/space-shuttle-stack-srb-right.thick.svg +1 -0
  597. package/dist/assets/space-shuttle-stack.glb +0 -0
  598. package/dist/assets/space-shuttle-stack.painted.svg +1 -0
  599. package/dist/assets/space-shuttle-stack.svg +1 -0
  600. package/dist/assets/space-shuttle-stack.thick.svg +1 -0
  601. package/dist/assets/starbase-build-site-apart.painted.svg +1 -0
  602. package/dist/assets/starbase-build-site-apart.svg +1 -0
  603. package/dist/assets/starbase-build-site-apart.thick.svg +1 -0
  604. package/dist/assets/starbase-build-site-garden.glb +0 -0
  605. package/dist/assets/starbase-build-site-garden.painted.svg +1 -0
  606. package/dist/assets/starbase-build-site-garden.svg +1 -0
  607. package/dist/assets/starbase-build-site-garden.thick.svg +1 -0
  608. package/dist/assets/starbase-build-site-ground.glb +0 -0
  609. package/dist/assets/starbase-build-site-ground.painted.svg +1 -0
  610. package/dist/assets/starbase-build-site-ground.svg +1 -0
  611. package/dist/assets/starbase-build-site-ground.thick.svg +1 -0
  612. package/dist/assets/starbase-build-site-mega-bays.glb +0 -0
  613. package/dist/assets/starbase-build-site-mega-bays.painted.svg +1 -0
  614. package/dist/assets/starbase-build-site-mega-bays.svg +1 -0
  615. package/dist/assets/starbase-build-site-mega-bays.thick.svg +1 -0
  616. package/dist/assets/starbase-build-site-sign.glb +0 -0
  617. package/dist/assets/starbase-build-site-sign.painted.svg +1 -0
  618. package/dist/assets/starbase-build-site-sign.svg +1 -0
  619. package/dist/assets/starbase-build-site-sign.thick.svg +1 -0
  620. package/dist/assets/starbase-build-site-starfactory.glb +0 -0
  621. package/dist/assets/starbase-build-site-starfactory.painted.svg +1 -0
  622. package/dist/assets/starbase-build-site-starfactory.svg +1 -0
  623. package/dist/assets/starbase-build-site-starfactory.thick.svg +1 -0
  624. package/dist/assets/starbase-build-site.glb +0 -0
  625. package/dist/assets/starbase-build-site.painted.svg +1 -0
  626. package/dist/assets/starbase-build-site.svg +1 -0
  627. package/dist/assets/starbase-build-site.thick.svg +1 -0
  628. package/dist/assets/starbase-city-apart.painted.svg +1 -0
  629. package/dist/assets/starbase-city-apart.svg +1 -0
  630. package/dist/assets/starbase-city-apart.thick.svg +1 -0
  631. package/dist/assets/starbase-city-garden.glb +0 -0
  632. package/dist/assets/starbase-city-garden.painted.svg +1 -0
  633. package/dist/assets/starbase-city-garden.svg +1 -0
  634. package/dist/assets/starbase-city-garden.thick.svg +1 -0
  635. package/dist/assets/starbase-city-ground.glb +0 -0
  636. package/dist/assets/starbase-city-ground.painted.svg +1 -0
  637. package/dist/assets/starbase-city-ground.svg +1 -0
  638. package/dist/assets/starbase-city-ground.thick.svg +1 -0
  639. package/dist/assets/starbase-city-mega-bays.glb +0 -0
  640. package/dist/assets/starbase-city-mega-bays.painted.svg +1 -0
  641. package/dist/assets/starbase-city-mega-bays.svg +1 -0
  642. package/dist/assets/starbase-city-mega-bays.thick.svg +1 -0
  643. package/dist/assets/starbase-city-on-pad.glb +0 -0
  644. package/dist/assets/starbase-city-on-pad.painted.svg +1 -0
  645. package/dist/assets/starbase-city-on-pad.svg +1 -0
  646. package/dist/assets/starbase-city-on-pad.thick.svg +1 -0
  647. package/dist/assets/starbase-city-pads.glb +0 -0
  648. package/dist/assets/starbase-city-pads.painted.svg +1 -0
  649. package/dist/assets/starbase-city-pads.svg +1 -0
  650. package/dist/assets/starbase-city-pads.thick.svg +1 -0
  651. package/dist/assets/starbase-city-sign.glb +0 -0
  652. package/dist/assets/starbase-city-sign.painted.svg +1 -0
  653. package/dist/assets/starbase-city-sign.svg +1 -0
  654. package/dist/assets/starbase-city-sign.thick.svg +1 -0
  655. package/dist/assets/starbase-city-starfactory.glb +0 -0
  656. package/dist/assets/starbase-city-starfactory.painted.svg +1 -0
  657. package/dist/assets/starbase-city-starfactory.svg +1 -0
  658. package/dist/assets/starbase-city-starfactory.thick.svg +1 -0
  659. package/dist/assets/starbase-city-tank-farm.glb +0 -0
  660. package/dist/assets/starbase-city-tank-farm.painted.svg +1 -0
  661. package/dist/assets/starbase-city-tank-farm.svg +1 -0
  662. package/dist/assets/starbase-city-tank-farm.thick.svg +1 -0
  663. package/dist/assets/starbase-city-village.glb +0 -0
  664. package/dist/assets/starbase-city-village.painted.svg +1 -0
  665. package/dist/assets/starbase-city-village.svg +1 -0
  666. package/dist/assets/starbase-city-village.thick.svg +1 -0
  667. package/dist/assets/starbase-city.glb +0 -0
  668. package/dist/assets/starbase-city.painted.svg +1 -0
  669. package/dist/assets/starbase-city.svg +1 -0
  670. package/dist/assets/starbase-city.thick.svg +1 -0
  671. package/dist/assets/starbase-launch-site-apart.painted.svg +1 -0
  672. package/dist/assets/starbase-launch-site-apart.svg +1 -0
  673. package/dist/assets/starbase-launch-site-apart.thick.svg +1 -0
  674. package/dist/assets/starbase-launch-site-ground.glb +0 -0
  675. package/dist/assets/starbase-launch-site-ground.painted.svg +1 -0
  676. package/dist/assets/starbase-launch-site-ground.svg +1 -0
  677. package/dist/assets/starbase-launch-site-ground.thick.svg +1 -0
  678. package/dist/assets/starbase-launch-site-on-pad.glb +0 -0
  679. package/dist/assets/starbase-launch-site-on-pad.painted.svg +1 -0
  680. package/dist/assets/starbase-launch-site-on-pad.svg +1 -0
  681. package/dist/assets/starbase-launch-site-on-pad.thick.svg +1 -0
  682. package/dist/assets/starbase-launch-site-pads.glb +0 -0
  683. package/dist/assets/starbase-launch-site-pads.painted.svg +1 -0
  684. package/dist/assets/starbase-launch-site-pads.svg +1 -0
  685. package/dist/assets/starbase-launch-site-pads.thick.svg +1 -0
  686. package/dist/assets/starbase-launch-site-tank-farm.glb +0 -0
  687. package/dist/assets/starbase-launch-site-tank-farm.painted.svg +1 -0
  688. package/dist/assets/starbase-launch-site-tank-farm.svg +1 -0
  689. package/dist/assets/starbase-launch-site-tank-farm.thick.svg +1 -0
  690. package/dist/assets/starbase-launch-site.glb +0 -0
  691. package/dist/assets/starbase-launch-site.painted.svg +1 -0
  692. package/dist/assets/starbase-launch-site.svg +1 -0
  693. package/dist/assets/starbase-launch-site.thick.svg +1 -0
  694. package/dist/assets/starship-2019.painted.svg +1 -1
  695. package/dist/assets/starship-2019.svg +1 -1
  696. package/dist/assets/starship-2019.thick.svg +1 -1
  697. package/dist/assets/starship-v1-apart.painted.svg +1 -1
  698. package/dist/assets/starship-v1-apart.svg +1 -1
  699. package/dist/assets/starship-v1-apart.thick.svg +1 -1
  700. package/dist/assets/starship-v1-booster.painted.svg +1 -1
  701. package/dist/assets/starship-v1-booster.svg +1 -1
  702. package/dist/assets/starship-v1-booster.thick.svg +1 -1
  703. package/dist/assets/starship-v1-flight1-apart.painted.svg +1 -1
  704. package/dist/assets/starship-v1-flight1-apart.svg +1 -1
  705. package/dist/assets/starship-v1-flight1-apart.thick.svg +1 -1
  706. package/dist/assets/starship-v1-flight1-booster.painted.svg +1 -1
  707. package/dist/assets/starship-v1-flight1-booster.svg +1 -1
  708. package/dist/assets/starship-v1-flight1-booster.thick.svg +1 -1
  709. package/dist/assets/starship-v1-flight1-ship.painted.svg +1 -1
  710. package/dist/assets/starship-v1-flight1-ship.svg +1 -1
  711. package/dist/assets/starship-v1-flight1-ship.thick.svg +1 -1
  712. package/dist/assets/starship-v1-flight1.painted.svg +1 -1
  713. package/dist/assets/starship-v1-flight1.svg +1 -1
  714. package/dist/assets/starship-v1-flight1.thick.svg +1 -1
  715. package/dist/assets/starship-v1-ship.painted.svg +1 -1
  716. package/dist/assets/starship-v1-ship.svg +1 -1
  717. package/dist/assets/starship-v1-ship.thick.svg +1 -1
  718. package/dist/assets/starship-v1.painted.svg +1 -1
  719. package/dist/assets/starship-v1.svg +1 -1
  720. package/dist/assets/starship-v1.thick.svg +1 -1
  721. package/dist/assets/starship-v2-apart.painted.svg +1 -1
  722. package/dist/assets/starship-v2-apart.svg +1 -1
  723. package/dist/assets/starship-v2-apart.thick.svg +1 -1
  724. package/dist/assets/starship-v2-booster.painted.svg +1 -1
  725. package/dist/assets/starship-v2-booster.svg +1 -1
  726. package/dist/assets/starship-v2-booster.thick.svg +1 -1
  727. package/dist/assets/starship-v2-ship.painted.svg +1 -1
  728. package/dist/assets/starship-v2-ship.svg +1 -1
  729. package/dist/assets/starship-v2-ship.thick.svg +1 -1
  730. package/dist/assets/starship-v2.painted.svg +1 -1
  731. package/dist/assets/starship-v2.svg +1 -1
  732. package/dist/assets/starship-v2.thick.svg +1 -1
  733. package/dist/assets/starship-v3-apart.painted.svg +1 -1
  734. package/dist/assets/starship-v3-apart.svg +1 -1
  735. package/dist/assets/starship-v3-apart.thick.svg +1 -1
  736. package/dist/assets/starship-v3-booster.painted.svg +1 -1
  737. package/dist/assets/starship-v3-booster.svg +1 -1
  738. package/dist/assets/starship-v3-booster.thick.svg +1 -1
  739. package/dist/assets/starship-v3-ship.painted.svg +1 -1
  740. package/dist/assets/starship-v3-ship.svg +1 -1
  741. package/dist/assets/starship-v3-ship.thick.svg +1 -1
  742. package/dist/assets/starship-v3.painted.svg +1 -1
  743. package/dist/assets/starship-v3.svg +1 -1
  744. package/dist/assets/starship-v3.thick.svg +1 -1
  745. package/dist/assets/starship-v4-apart.painted.svg +1 -1
  746. package/dist/assets/starship-v4-apart.svg +1 -1
  747. package/dist/assets/starship-v4-apart.thick.svg +1 -1
  748. package/dist/assets/starship-v4-booster.painted.svg +1 -1
  749. package/dist/assets/starship-v4-booster.svg +1 -1
  750. package/dist/assets/starship-v4-booster.thick.svg +1 -1
  751. package/dist/assets/starship-v4-ship.painted.svg +1 -1
  752. package/dist/assets/starship-v4-ship.svg +1 -1
  753. package/dist/assets/starship-v4-ship.thick.svg +1 -1
  754. package/dist/assets/starship-v4.painted.svg +1 -1
  755. package/dist/assets/starship-v4.svg +1 -1
  756. package/dist/assets/starship-v4.thick.svg +1 -1
  757. package/dist/attrs.d.ts +27 -0
  758. package/dist/attrs.js +31 -0
  759. package/dist/build/index.d.ts +7 -2
  760. package/dist/build/index.js +28 -4
  761. package/dist/build/lineup.js +14 -4
  762. package/dist/builder.d.ts +22 -0
  763. package/dist/builder.js +103 -0
  764. package/dist/data/apollosoyuz.d.ts +6 -0
  765. package/dist/data/apollosoyuz.js +28 -0
  766. package/dist/data/credits.d.ts +19 -1
  767. package/dist/data/credits.js +30 -1
  768. package/dist/data/dragon.js +35 -0
  769. package/dist/data/electron.d.ts +2 -0
  770. package/dist/data/electron.js +23 -0
  771. package/dist/data/falcon.js +2 -2
  772. package/dist/data/falcon1.d.ts +4 -0
  773. package/dist/data/falcon1.js +51 -0
  774. package/dist/data/flight-log.d.ts +18 -0
  775. package/dist/data/flight-log.js +23 -0
  776. package/dist/data/flights.d.ts +49 -0
  777. package/dist/data/flights.js +177 -0
  778. package/dist/data/gemini.d.ts +3 -0
  779. package/dist/data/gemini.js +22 -0
  780. package/dist/data/hubble.d.ts +3 -0
  781. package/dist/data/hubble.js +23 -0
  782. package/dist/data/iss.d.ts +5 -0
  783. package/dist/data/iss.js +25 -0
  784. package/dist/data/jupiterc.d.ts +3 -0
  785. package/dist/data/jupiterc.js +22 -0
  786. package/dist/data/landing.d.ts +3 -0
  787. package/dist/data/landing.js +51 -0
  788. package/dist/data/lunarmodule.d.ts +4 -0
  789. package/dist/data/lunarmodule.js +27 -0
  790. package/dist/data/makers.d.ts +16 -0
  791. package/dist/data/makers.js +29 -0
  792. package/dist/data/mercury.d.ts +3 -0
  793. package/dist/data/mercury.js +22 -0
  794. package/dist/data/newglenn.d.ts +2 -0
  795. package/dist/data/newglenn.js +23 -0
  796. package/dist/data/saturn.d.ts +2 -0
  797. package/dist/data/saturn.js +32 -0
  798. package/dist/data/shuttle.d.ts +5 -0
  799. package/dist/data/shuttle.js +52 -0
  800. package/dist/data/sls.d.ts +4 -0
  801. package/dist/data/sls.js +36 -0
  802. package/dist/data/sources.d.ts +348 -2
  803. package/dist/data/sources.js +45 -1
  804. package/dist/data/soyuz.d.ts +3 -0
  805. package/dist/data/soyuz.js +33 -0
  806. package/dist/data/starbase.d.ts +2 -0
  807. package/dist/data/starbase.js +30 -0
  808. package/dist/data/tower.d.ts +3 -0
  809. package/dist/data/tower.js +26 -0
  810. package/dist/data/types.d.ts +7 -1
  811. package/dist/draw/plume.d.ts +8 -0
  812. package/dist/draw/plume.js +71 -0
  813. package/dist/draw/svg.d.ts +1 -1
  814. package/dist/draw/svg.js +3 -3
  815. package/dist/element/ground.d.ts +15 -0
  816. package/dist/element/ground.js +95 -0
  817. package/dist/element/plumes.d.ts +38 -0
  818. package/dist/element/plumes.js +208 -0
  819. package/dist/element/scene.d.ts +39 -5
  820. package/dist/element/scene.js +250 -7
  821. package/dist/element.d.ts +50 -1
  822. package/dist/element.js +201 -13
  823. package/dist/embed.d.ts +26 -0
  824. package/dist/embed.js +135 -0
  825. package/dist/engines.d.ts +44 -0
  826. package/dist/engines.js +79 -0
  827. package/dist/fit.d.ts +2 -0
  828. package/dist/fit.js +4 -3
  829. package/dist/flight.d.ts +67 -0
  830. package/dist/flight.js +124 -0
  831. package/dist/flightbar.d.ts +22 -0
  832. package/dist/flightbar.js +176 -0
  833. package/dist/index.d.ts +17 -0
  834. package/dist/index.js +9 -0
  835. package/dist/layout.js +1 -1
  836. package/dist/looks.d.ts +1 -1
  837. package/dist/looks.js +2 -0
  838. package/dist/model/apollosoyuz.d.ts +2 -0
  839. package/dist/model/apollosoyuz.js +46 -0
  840. package/dist/model/dragoninside.d.ts +2 -0
  841. package/dist/model/dragoninside.js +67 -0
  842. package/dist/model/electron.d.ts +2 -0
  843. package/dist/model/electron.js +35 -0
  844. package/dist/model/falcon.d.ts +2 -0
  845. package/dist/model/falcon.js +4 -0
  846. package/dist/model/falcon1.d.ts +2 -0
  847. package/dist/model/falcon1.js +53 -0
  848. package/dist/model/gemini.d.ts +2 -0
  849. package/dist/model/gemini.js +28 -0
  850. package/dist/model/hubble.d.ts +2 -0
  851. package/dist/model/hubble.js +28 -0
  852. package/dist/model/iss.d.ts +2 -0
  853. package/dist/model/iss.js +32 -0
  854. package/dist/model/jupiterc.d.ts +2 -0
  855. package/dist/model/jupiterc.js +24 -0
  856. package/dist/model/kit.d.ts +36 -0
  857. package/dist/model/kit.js +95 -0
  858. package/dist/model/landing.d.ts +3 -0
  859. package/dist/model/landing.js +81 -0
  860. package/dist/model/lunarmodule.d.ts +2 -0
  861. package/dist/model/lunarmodule.js +43 -0
  862. package/dist/model/materials.d.ts +42 -0
  863. package/dist/model/materials.js +7 -0
  864. package/dist/model/mercury.d.ts +2 -0
  865. package/dist/model/mercury.js +19 -0
  866. package/dist/model/newglenn.d.ts +2 -0
  867. package/dist/model/newglenn.js +43 -0
  868. package/dist/model/pieces.d.ts +2 -0
  869. package/dist/model/pieces.js +2 -2
  870. package/dist/model/registry.js +63 -0
  871. package/dist/model/saturn.d.ts +2 -0
  872. package/dist/model/saturn.js +122 -0
  873. package/dist/model/shuttle.d.ts +2 -0
  874. package/dist/model/shuttle.js +111 -0
  875. package/dist/model/sls.d.ts +2 -0
  876. package/dist/model/sls.js +83 -0
  877. package/dist/model/soyuz.d.ts +2 -0
  878. package/dist/model/soyuz.js +75 -0
  879. package/dist/model/stacks.d.ts +39 -0
  880. package/dist/model/stacks.js +1 -0
  881. package/dist/model/starbase.d.ts +2 -0
  882. package/dist/model/starbase.js +108 -0
  883. package/dist/model/tower.d.ts +6 -0
  884. package/dist/model/tower.js +89 -0
  885. package/dist/parts.d.ts +3 -2
  886. package/dist/react.d.ts +14 -6
  887. package/dist/rockets.d.ts +5 -0
  888. package/dist/rockets.js +78 -7
  889. package/dist/spin.d.ts +11 -0
  890. package/dist/spin.js +11 -0
  891. package/package.json +93 -18
package/dist/element.js CHANGED
@@ -2,18 +2,22 @@
2
2
  // crossfading in over it; drag to turn, keyboard, tilt on phones, a slow spin, reduced motion; the drawing stays on no WebGL, Save-Data or any failure. Importing this file defines the elements. three.js is
3
3
  // loaded only when a 3D view is wanted, and a licensed model only when the painted look asks for one.
4
4
  import { build, FitError } from "./build/index.js";
5
+ import { bellsOf, enginesWanted, pickBells } from "./engines.js";
6
+ import { engineChart } from "./draw/plume.js";
7
+ import { burnsOf, FlightClock, flightOf, frameAt, phaseAt, phasePosition } from "./flight.js";
8
+ import { defineUchusenFlight, UchusenFlight } from "./flightbar.js";
5
9
  import { lineupSvg } from "./build/lineup.js";
6
10
  import { CROSSFADE_MS, REDUCED_FADE_MS, revealDelay } from "./crossfade.js";
7
11
  import { cleanView, turnedBy, VIEWS } from "./framing.js";
8
12
  import { cleanShow } from "./layout.js";
9
13
  import { cleanLook } from "./looks.js";
10
- import { ROCKETS } from "./rockets.js";
14
+ import { ROCKETS, SLOT_NAMES } from "./rockets.js";
11
15
  import { tiltMode, tiltTurn } from "./tilt.js";
16
+ import { spinOf } from "./spin.js";
12
17
  const HTMLBase = typeof HTMLElement === "undefined" ? class {
13
18
  } : HTMLElement;
14
19
  /** A view out of sight keeps its WebGL canvas this long before letting it go (a browser allows only a few at a time). */
15
20
  const RELEASE_MS = 30_000;
16
- const DEFAULT_SPIN = { seconds: 180, way: "cw" };
17
21
  /** The drawing, followed along a turn, is made again at most this often. */
18
22
  const PLACE_MS = 50;
19
23
  let assetBase = null;
@@ -83,7 +87,7 @@ function whyNot(mode) {
83
87
  return "";
84
88
  }
85
89
  export class UchusenRocket extends HTMLBase {
86
- static observedAttributes = ["rocket", "variant", "show", "look", "view", "build", "mode", "assets", "spin", "way", "label"];
90
+ static observedAttributes = ["rocket", "variant", "show", "look", "view", "build", "mode", "assets", "spin", "way", "label", "engines", "phase"];
87
91
  descriptionValue = null;
88
92
  picture = null;
89
93
  holder = null;
@@ -106,6 +110,13 @@ export class UchusenRocket extends HTMLBase {
106
110
  onScreen = true;
107
111
  drawn = { key: "", box: [0, 0, 1, 1] };
108
112
  tiltCleanups = [];
113
+ clock = null;
114
+ flightFrame = 0;
115
+ flightLast = 0;
116
+ flightDrawn = -1;
117
+ noted = { index: -1, at: 0 };
118
+ phaseSeen = null;
119
+ flightSeen = null;
109
120
  /** What is showing now. */
110
121
  get state() {
111
122
  return this.stateNow;
@@ -173,15 +184,22 @@ export class UchusenRocket extends HTMLBase {
173
184
  seen = () => {
174
185
  if (!document.hidden && this.stale)
175
186
  this.place();
187
+ this.kickFlight();
176
188
  };
189
+ /** A reader who changes the setting while the page is open is followed at once. */
190
+ motionChanged = () => this.queue();
191
+ motion = null;
177
192
  connectedCallback() {
178
193
  if (!this.shadowRoot)
179
194
  adopt(this.attachShadow({ mode: "open" }), CSS, rocketSheet);
180
195
  document.addEventListener("visibilitychange", this.seen);
196
+ this.motion = typeof matchMedia === "function" ? matchMedia("(prefers-reduced-motion: reduce)") : null;
197
+ this.motion?.addEventListener("change", this.motionChanged);
181
198
  this.queue();
182
199
  }
183
200
  disconnectedCallback() {
184
201
  document.removeEventListener("visibilitychange", this.seen);
202
+ this.motion?.removeEventListener("change", this.motionChanged);
185
203
  this.teardown();
186
204
  this.key = "";
187
205
  }
@@ -190,15 +208,16 @@ export class UchusenRocket extends HTMLBase {
190
208
  return;
191
209
  if (name === "spin" || name === "way")
192
210
  this.viewer?.setSpin(this.spin());
193
- else
211
+ else {
212
+ // choosing what to show leaves the flight
213
+ if (name === "show")
214
+ this.endFlight();
194
215
  this.queue();
216
+ }
195
217
  }
196
218
  // ---------------------------------------------------------------------------------------------------------------------------------
197
219
  spin() {
198
- const raw = this.getAttribute("spin");
199
- const named = { off: 0, slow: 180, medium: 67, fast: 20 };
200
- const seconds = raw === null ? DEFAULT_SPIN.seconds : (named[raw] ?? (Number.isFinite(Number(raw)) ? Math.max(0, Number(raw)) : DEFAULT_SPIN.seconds));
201
- return { seconds, way: this.getAttribute("way") === "ccw" ? "ccw" : "cw" };
220
+ return spinOf(this.getAttribute("spin"), this.getAttribute("way"));
202
221
  }
203
222
  descriptionNow() {
204
223
  if (this.descriptionValue)
@@ -233,6 +252,8 @@ export class UchusenRocket extends HTMLBase {
233
252
  window.clearTimeout(this.releaseTimer);
234
253
  window.clearTimeout(this.revealTimer);
235
254
  window.cancelAnimationFrame(this.placeFrame);
255
+ window.cancelAnimationFrame(this.flightFrame);
256
+ this.flightFrame = 0;
236
257
  this.stopTilt();
237
258
  this.viewer?.dispose();
238
259
  this.viewer = null;
@@ -257,6 +278,129 @@ export class UchusenRocket extends HTMLBase {
257
278
  const viewName = cleanView(this.getAttribute("view"));
258
279
  return { look, show, viewName, angle: VIEWS[viewName] };
259
280
  }
281
+ // ---------------------------------------------------------------------------------------------------------------------------------
282
+ // the flight
283
+ /** The flight a page gives for what is showing, or null: a custom build never has one. */
284
+ get flight() {
285
+ const report = this.builtNow?.report;
286
+ return report && !report.custom && report.variant ? flightOf(report.variant.rocket, report.variant.id) : null;
287
+ }
288
+ /** Where the timeline is: `active` once it has been started or moved, until `endFlight`. */
289
+ get flightState() {
290
+ const clock = this.clock;
291
+ const flight = this.flight;
292
+ return { active: clock !== null, playing: clock?.playing ?? false, ended: clock?.ended ?? false, position: clock?.position ?? 0, phase: clock ? phaseAt(clock.flight, clock.position).phase.id : (flight?.phases[0].id ?? "") };
293
+ }
294
+ /** Plays the flight from where it is. It stands still out of sight, and does not play at all for a reader who asked for reduced motion: `seek` still moves it, by hand. */
295
+ play() {
296
+ const flight = this.flight;
297
+ if (!flight || media("(prefers-reduced-motion: reduce)"))
298
+ return;
299
+ this.clock ??= new FlightClock(flight);
300
+ this.clock.play();
301
+ this.flightMoved();
302
+ }
303
+ pause() {
304
+ this.clock?.pause();
305
+ this.flightMoved();
306
+ }
307
+ /** Moves the timeline to a place, where 0 is the first phase, 1 the next and so on: `2.5` is half way from the third to the fourth. */
308
+ seek(position) {
309
+ const flight = this.flight;
310
+ if (!flight)
311
+ return;
312
+ this.clock ??= new FlightClock(flight);
313
+ this.clock.seek(position);
314
+ this.flightMoved();
315
+ }
316
+ /** Leaves the flight: the rocket as it was. */
317
+ endFlight() {
318
+ if (!this.clock)
319
+ return;
320
+ this.clock = null;
321
+ this.phaseSeen = null;
322
+ window.cancelAnimationFrame(this.flightFrame);
323
+ this.flightFrame = 0;
324
+ this.viewer?.setFlight(null);
325
+ this.place();
326
+ this.mark();
327
+ this.noteFlight(true);
328
+ }
329
+ /** For each part with engines, which burn: at a named phase, where the timeline is, or else as the attributes have them. */
330
+ engineCharts(phaseId = null) {
331
+ const built = this.builtNow;
332
+ if (!built)
333
+ return [];
334
+ const flight = this.flight;
335
+ const fromPhase = phaseId && flight ? flight.phases.find((phase) => phase.id === phaseId) : null;
336
+ const phase = fromPhase ?? (this.clock ? phaseAt(this.clock.flight, this.clock.position).phase : null);
337
+ const burns = phase ? burnsOf(phase) : null;
338
+ return built.parts.flatMap((part) => {
339
+ const bells = bellsOf(part.pieces);
340
+ if (bells.length === 0)
341
+ return [];
342
+ const fired = pickBells(bells, burns ? (burns[part.slot] ?? 0) : this.engineLights() ? bells.length : 0);
343
+ const name = SLOT_NAMES[part.slot] ?? part.slot;
344
+ const figure = phase?.burns[part.slot]?.engines;
345
+ const words = `${name}: ${figure && figure.value === null ? `${fired.length} drawn, no source says how many` : `${fired.length} of ${bells.length}`}`;
346
+ return [{ slot: part.slot, burning: fired.length, total: bells.length, words, svg: engineChart(bells, fired, words) }];
347
+ });
348
+ }
349
+ flightMoved() {
350
+ if (this.clock)
351
+ this.viewer?.setFlight(this.clock);
352
+ if (this.viewer)
353
+ this.noteFlight(true);
354
+ else {
355
+ this.place();
356
+ this.noteFlight(true);
357
+ this.kickFlight();
358
+ }
359
+ this.mark();
360
+ }
361
+ /** With no 3D view the drawing follows the timeline, by one frame request at a time, at most 20 drawings a second, never out of sight. */
362
+ kickFlight() {
363
+ if (this.viewer || this.flightFrame || !this.clock?.playing || !this.onScreen || document.hidden)
364
+ return;
365
+ this.flightLast = 0;
366
+ this.flightFrame = window.requestAnimationFrame(this.flightStep);
367
+ }
368
+ flightStep = (time) => {
369
+ this.flightFrame = 0;
370
+ const clock = this.clock;
371
+ if (!clock?.playing || this.viewer || !this.onScreen || document.hidden)
372
+ return;
373
+ if (this.flightLast)
374
+ clock.advance(Math.min(0.1, (time - this.flightLast) / 1000));
375
+ this.flightLast = time;
376
+ if (phaseAt(clock.flight, clock.position).index !== this.flightDrawn) {
377
+ this.flightDrawn = phaseAt(clock.flight, clock.position).index;
378
+ this.place();
379
+ }
380
+ this.noteFlight(!clock.playing);
381
+ if (clock.playing)
382
+ this.flightFrame = window.requestAnimationFrame(this.flightStep);
383
+ };
384
+ /** Tells the page where the timeline is: at once for a new phase or a stop, otherwise at most 8 times a second. */
385
+ noteFlight(now = false) {
386
+ const clock = this.clock;
387
+ const index = clock ? phaseAt(clock.flight, clock.position).index : -1;
388
+ const time = performance.now();
389
+ if (!now && index === this.noted.index && time - this.noted.at < 125)
390
+ return;
391
+ this.noted = { index, at: time };
392
+ this.dataset.phase = this.flightState.active ? this.flightState.phase : "";
393
+ this.emit("uchusen-flight", this.flightState);
394
+ }
395
+ /** Whether the engines are lit: `engines="on"`, and never for a reader who asked for reduced motion. */
396
+ engineLights() {
397
+ return enginesWanted(this.getAttribute("engines"), media("(prefers-reduced-motion: reduce)"));
398
+ }
399
+ /** Hands the 3D view what the attributes say about the engines, and its reader's motion setting. */
400
+ lightViewer(viewer) {
401
+ viewer.setReduced(media("(prefers-reduced-motion: reduce)"));
402
+ viewer.setEngines(this.engineLights() ? "full" : null);
403
+ }
260
404
  update() {
261
405
  const description = this.descriptionNow();
262
406
  const key = JSON.stringify(description);
@@ -275,9 +419,31 @@ export class UchusenRocket extends HTMLBase {
275
419
  if (!this.picture)
276
420
  this.renderShell();
277
421
  void this.applyRocket();
422
+ this.settleFlight();
278
423
  return;
279
424
  }
280
425
  this.applySettings();
426
+ this.settleFlight();
427
+ }
428
+ /** After a change: a timeline of another rocket ends, and the `phase` attribute moves it. */
429
+ settleFlight() {
430
+ const flight = this.flight;
431
+ if (this.clock && this.clock.flight.id !== flight?.id)
432
+ this.endFlight();
433
+ if ((flight?.id ?? null) !== this.flightSeen) {
434
+ this.flightSeen = flight?.id ?? null;
435
+ this.phaseSeen = null;
436
+ this.noteFlight(true);
437
+ }
438
+ const asked = this.getAttribute("phase");
439
+ if (asked !== this.phaseSeen) {
440
+ this.phaseSeen = asked;
441
+ const place = flight ? phasePosition(flight, asked) : null;
442
+ if (place !== null)
443
+ this.seek(place);
444
+ else if (asked === null)
445
+ this.endFlight();
446
+ }
281
447
  }
282
448
  renderShell() {
283
449
  const root = this.shadowRoot;
@@ -306,15 +472,18 @@ export class UchusenRocket extends HTMLBase {
306
472
  redraw() {
307
473
  if (!this.builtNow || !this.drawing)
308
474
  return;
309
- const { look, show, angle } = this.settings(this.builtNow);
475
+ const { look, show: chosen, angle } = this.settings(this.builtNow);
476
+ const flying = this.clock ? frameAt(this.clock.flight, this.clock.position, this.builtNow.parts.map((part) => ({ slot: part.slot, baseY: 0 })), 1) : null;
477
+ const show = flying ? (flying.separated ? "apart" : "together") : chosen;
310
478
  // when a 3D view is showing, a drawing of the same angle is ready behind it
311
479
  const from = this.driven ? turnedBy(angle, this.driven.yaw, this.driven.tilt) : (this.viewer?.currentAngle() ?? angle);
312
480
  const label = this.getAttribute("label") ?? this.builtNow.report.label;
313
- const key = `${this.key}|${look}|${show}|${from.az.toFixed(2)}|${from.el.toFixed(2)}|${label}`;
481
+ const lit = flying ? (media("(prefers-reduced-motion: reduce)") ? false : flying.burns) : this.engineLights();
482
+ const key = `${this.key}|${look}|${show}|${from.az.toFixed(2)}|${from.el.toFixed(2)}|${label}|${flying ? flying.index : ""}|${JSON.stringify(lit)}`;
314
483
  let node = this.drawing.firstElementChild;
315
484
  if (key !== this.drawn.key || !node) {
316
485
  const template = document.createElement("template");
317
- template.innerHTML = this.builtNow.svg({ look, show, view: from });
486
+ template.innerHTML = this.builtNow.svg({ look, show, view: from, engines: lit });
318
487
  node = template.content.firstElementChild;
319
488
  if (!node)
320
489
  return;
@@ -337,6 +506,8 @@ export class UchusenRocket extends HTMLBase {
337
506
  return;
338
507
  const { look, show, viewName } = this.settings(this.builtNow);
339
508
  this.dataset.look = look;
509
+ this.dataset.engines = this.engineLights() ? "on" : "off";
510
+ this.dataset.flight = this.flight?.id ?? "";
340
511
  this.dataset.show = show;
341
512
  this.dataset.viewAngle = viewName;
342
513
  this.dataset.variant = this.builtNow.report.variant?.id ?? "";
@@ -354,6 +525,8 @@ export class UchusenRocket extends HTMLBase {
354
525
  const from = viewName !== this.lastView || this.driven ? angle : this.viewer.currentAngle();
355
526
  this.lastView = viewName;
356
527
  await this.viewer.load(this.builtNow, show, look, from);
528
+ if (this.viewer)
529
+ this.lightViewer(this.viewer);
357
530
  this.emit("uchusen-change", { report: this.builtNow.report });
358
531
  }
359
532
  }
@@ -366,6 +539,7 @@ export class UchusenRocket extends HTMLBase {
366
539
  if (this.viewer) {
367
540
  this.viewer.setLook(look);
368
541
  this.viewer.setShow(show);
542
+ this.lightViewer(this.viewer);
369
543
  if (viewName !== this.lastView)
370
544
  this.viewer.setAngle(angle, true);
371
545
  this.viewer.setHome(angle);
@@ -387,6 +561,8 @@ export class UchusenRocket extends HTMLBase {
387
561
  this.onScreen = seen.isIntersecting;
388
562
  if (seen.isIntersecting && this.stale)
389
563
  this.place();
564
+ if (seen.isIntersecting)
565
+ this.kickFlight();
390
566
  if (reason)
391
567
  return;
392
568
  if (seen.isIntersecting) {
@@ -404,6 +580,7 @@ export class UchusenRocket extends HTMLBase {
404
580
  this.viewer?.dispose();
405
581
  this.viewer = null;
406
582
  this.stopTilt();
583
+ this.kickFlight();
407
584
  if (generation === this.generation) {
408
585
  this.setState("picture");
409
586
  if (this.driven)
@@ -422,6 +599,7 @@ export class UchusenRocket extends HTMLBase {
422
599
  this.stopTilt();
423
600
  this.viewer?.dispose();
424
601
  this.viewer = null;
602
+ this.kickFlight();
425
603
  this.setState("fallback", why);
426
604
  this.emit("uchusen-fallback", { reason: why });
427
605
  }
@@ -448,16 +626,25 @@ export class UchusenRocket extends HTMLBase {
448
626
  this.dataset.painted = state;
449
627
  this.emit("uchusen-painted", { state });
450
628
  },
629
+ onFlight: () => this.noteFlight(!this.clock?.playing),
451
630
  });
452
631
  this.viewer = made;
632
+ window.cancelAnimationFrame(this.flightFrame);
633
+ this.flightFrame = 0;
634
+ if (this.clock)
635
+ made.setFlight(this.clock);
453
636
  if (this.driven)
454
637
  made.drive(this.driven);
455
638
  made.setVisible(true);
456
639
  const { look, show, viewName, angle } = this.settings(this.builtNow ?? built);
457
640
  this.lastView = viewName;
458
641
  await made.load(this.builtNow ?? built, show, look, angle);
459
- if (generation !== this.generation)
642
+ if (generation !== this.generation || this.viewer !== made)
460
643
  return;
644
+ const now = this.settings(this.builtNow ?? built);
645
+ if (now.show !== show)
646
+ made.setShow(now.show);
647
+ this.lightViewer(made);
461
648
  made.setSpin(this.spin());
462
649
  const wait = revealDelay(this.shownAt, performance.now(), reduced);
463
650
  this.revealTimer = window.setTimeout(() => {
@@ -575,6 +762,7 @@ export function defineUchusenRocket() {
575
762
  customElements.define("uchusen-rocket", UchusenRocket);
576
763
  if (!customElements.get("uchusen-lineup"))
577
764
  customElements.define("uchusen-lineup", UchusenLineup);
765
+ defineUchusenFlight();
578
766
  }
579
767
  defineUchusenRocket();
580
- export { ROCKETS };
768
+ export { ROCKETS, UchusenFlight };
@@ -0,0 +1,26 @@
1
+ import { type RocketOptions } from "./attrs.ts";
2
+ export declare const EMBED_KINDS: readonly ["element", "iframe", "module", "svg", "data", "link"];
3
+ export type EmbedKind = (typeof EMBED_KINDS)[number];
4
+ export interface EmbedSettings {
5
+ /** The address of the published demo, where `embed.html` is. */
6
+ site?: string;
7
+ /** The CDN or package path the element is loaded from. */
8
+ cdn?: string;
9
+ }
10
+ export declare const SITE = "https://johnmorrisdotca.github.io/uchusen-rockets/";
11
+ export declare const CDN = "https://cdn.jsdelivr.net/npm/@johnmorrisdotca/uchusen-rockets@0";
12
+ /** The three.js a page with no bundler takes from the CDN: the version this package is built and tested with. */
13
+ export declare const THREE_VERSION = "0.186.1";
14
+ /** What an embed asks of the page around it, in words: a line for the demo to show. */
15
+ export declare function embedNote(kind: EmbedKind, options: RocketOptions): string;
16
+ /**
17
+ * The CC BY line for a painted rocket, generated from the parts that are showing.
18
+ * Empty when the look is not painted, or when those parts are this package's own paint.
19
+ */
20
+ export declare function paintedCredit(options: RocketOptions): string;
21
+ /**
22
+ * The shipped picture of these options, under the package's `dist/assets/`: `starship-v3.svg`, `falcon-9-block-5-apart.thick.svg`. These are drawn from the default view, with no flames. Null for a custom build, which has no file, or a variant, part or look that does not exist.
23
+ */
24
+ export declare function assetPathOf(options: RocketOptions): string | null;
25
+ /** The text of one embed. The `module` one imports the package; the `data` one is a `data:image/svg+xml` address for an `<img>`. */
26
+ export declare function embedCode(options: RocketOptions, kind?: EmbedKind, settings?: EmbedSettings): string;
package/dist/embed.js ADDED
@@ -0,0 +1,135 @@
1
+ // `embedCode`: the text to put a rocket in a page, in each of the six ways: the custom element from a CDN, an iframe of `embed.html`, a JavaScript module, the SVG itself, a data address, and a link to the shipped picture.
2
+ // A painted rocket's credit is generated from the parts that show, and every painted form carries it.
3
+ import { build } from "./build/index.js";
4
+ import { creditLine } from "./data/credits.js";
5
+ import { check } from "./fit.js";
6
+ import { cleanView } from "./framing.js";
7
+ import { cleanShow, showsOf } from "./layout.js";
8
+ import { cleanLook, DEFAULT_LOOK } from "./looks.js";
9
+ import { attributesFromOptions, rocketToParams } from "./attrs.js";
10
+ export const EMBED_KINDS = ["element", "iframe", "module", "svg", "data", "link"];
11
+ export const SITE = "https://johnmorrisdotca.github.io/uchusen-rockets/";
12
+ export const CDN = "https://cdn.jsdelivr.net/npm/@johnmorrisdotca/uchusen-rockets@0";
13
+ /** The three.js a page with no bundler takes from the CDN: the version this package is built and tested with. */
14
+ export const THREE_VERSION = "0.186.1";
15
+ const THREE_CDN = `https://cdn.jsdelivr.net/npm/three@${THREE_VERSION}`;
16
+ const IMPORT_MAP = `<script type="importmap">\n { "imports": { "three": "${THREE_CDN}/build/three.module.js", "three/addons/": "${THREE_CDN}/examples/jsm/" } }\n</script>`;
17
+ const esc = (value) => value.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
18
+ const EMPTY_SVG = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 480 640" width="480" height="640" role="img"></svg>`;
19
+ function descriptionOf(options) {
20
+ if (options.build) {
21
+ try {
22
+ const parsed = JSON.parse(options.build);
23
+ if (parsed && typeof parsed === "object" && typeof parsed.rocket === "string") {
24
+ return {
25
+ rocket: parsed.rocket,
26
+ ...(typeof parsed.variant === "string" ? { variant: parsed.variant } : {}),
27
+ ...(parsed.parts && typeof parsed.parts === "object" ? { parts: parsed.parts } : {}),
28
+ };
29
+ }
30
+ }
31
+ catch {
32
+ // a build that is not JSON falls through to the named rocket
33
+ }
34
+ }
35
+ return { rocket: options.rocket ?? "starship", ...(options.variant ? { variant: options.variant } : {}) };
36
+ }
37
+ /** What an embed asks of the page around it, in words: a line for the demo to show. */
38
+ export function embedNote(kind, options) {
39
+ const notes = {
40
+ element: "One script from the CDN and the tag. The import map names three.js, for the 3D view; a page with a bundler needs neither, only the package.",
41
+ iframe: "No script of your own. It draws the drawing at once, and the 3D view when the browser can. Add flight=1 to the address for the flight's controls.",
42
+ module: "The drawing from a script of your own, with no three.js.",
43
+ svg: "The drawing itself: nothing to load. Paste it in a page or save it as a file.",
44
+ data: "The drawing as an address, for an image tag or a stylesheet.",
45
+ link: options.view && options.view !== "three-quarter" ? "A link to the file in the package. Those show the three-quarter view, with no flames: use the SVG or data tab for this view." : "A link to the file in the package. Those show the three-quarter view, with no flames.",
46
+ };
47
+ return notes[kind];
48
+ }
49
+ /**
50
+ * The CC BY line for a painted rocket, generated from the parts that are showing.
51
+ * Empty when the look is not painted, or when those parts are this package's own paint.
52
+ */
53
+ export function paintedCredit(options) {
54
+ if (cleanLook(options.look) !== "painted")
55
+ return "";
56
+ const report = check(descriptionOf(options));
57
+ if (!report.ok)
58
+ return "";
59
+ const show = options.show;
60
+ const names = new Set(report.parts.filter(({ slot }) => !show || show === "together" || show === "apart" || show === slot).map(({ part }) => part.name));
61
+ return report.credits
62
+ .map((credit) => {
63
+ const used = credit.usedFor.filter((name) => names.has(name));
64
+ return used.length === 0 ? "" : `${used.join(", ")}: ${creditLine(credit.id)}`;
65
+ })
66
+ .filter((line) => line !== "")
67
+ .join("\n");
68
+ }
69
+ /**
70
+ * The shipped picture of these options, under the package's `dist/assets/`: `starship-v3.svg`, `falcon-9-block-5-apart.thick.svg`. These are drawn from the default view, with no flames. Null for a custom build, which has no file, or a variant, part or look that does not exist.
71
+ */
72
+ export function assetPathOf(options) {
73
+ if (options.build)
74
+ return null;
75
+ const description = descriptionOf(options);
76
+ const report = check(description);
77
+ if (!report.ok || !report.variant || report.custom)
78
+ return null;
79
+ const slots = report.parts.map(({ slot }) => slot);
80
+ const shows = showsOf(slots);
81
+ const show = cleanShow(options.show, slots);
82
+ if (!shows.includes(show))
83
+ return null;
84
+ const look = cleanLook(options.look);
85
+ return `${report.variant.rocket}-${report.variant.id}${show === shows[0] ? "" : `-${show}`}${look === DEFAULT_LOOK ? "" : `.${look}`}.svg`;
86
+ }
87
+ function svgOptionsOf(options) {
88
+ return {
89
+ look: cleanLook(options.look),
90
+ view: cleanView(options.view),
91
+ ...(options.show ? { show: options.show } : {}),
92
+ ...(options.engines === "on" ? { engines: true } : {}),
93
+ };
94
+ }
95
+ function drawingOf(options) {
96
+ try {
97
+ const drawn = build(descriptionOf(options)).svg(svgOptionsOf(options));
98
+ const credit = paintedCredit(options);
99
+ return credit === "" ? drawn : drawn.replace("</svg>", `<desc>${esc(credit)}</desc></svg>`);
100
+ }
101
+ catch {
102
+ return EMPTY_SVG;
103
+ }
104
+ }
105
+ const creditHtml = (credit) => (credit === "" ? "" : `\n<p>${esc(credit).replaceAll("\n", "<br>\n")}</p>`);
106
+ /** The text of one embed. The `module` one imports the package; the `data` one is a `data:image/svg+xml` address for an `<img>`. */
107
+ export function embedCode(options, kind = "element", settings = {}) {
108
+ const site = settings.site ?? SITE;
109
+ const cdn = settings.cdn ?? CDN;
110
+ const credit = paintedCredit(options);
111
+ if (kind === "svg")
112
+ return drawingOf(options);
113
+ if (kind === "data")
114
+ return `data:image/svg+xml;charset=utf-8,${encodeURIComponent(drawingOf(options))}`;
115
+ if (kind === "link") {
116
+ const path = assetPathOf(options);
117
+ const alt = esc(options.label ?? "Rocket");
118
+ const src = path === null ? `data:image/svg+xml;charset=utf-8,${encodeURIComponent(drawingOf(options))}` : `${cdn}/dist/assets/${path}`;
119
+ return `<img src="${esc(src)}" alt="${alt}" width="480" height="640" loading="lazy">${creditHtml(credit)}`;
120
+ }
121
+ if (kind === "iframe") {
122
+ const query = rocketToParams(options).toString();
123
+ const src = `${site}embed.html${query === "" ? "" : `?${query}`}`;
124
+ const title = options.label ?? "Rocket";
125
+ return `<iframe\n src="${esc(src)}"\n title="${esc(title)}"\n loading="lazy"\n style="width:100%;max-width:480px;aspect-ratio:3 / 4;border:0"\n></iframe>${creditHtml(credit)}`;
126
+ }
127
+ if (kind === "module") {
128
+ const description = descriptionOf(options);
129
+ const svgOptions = svgOptionsOf(options);
130
+ const caption = credit === "" ? "" : `\ndocument.querySelector("#credit").textContent = ${JSON.stringify(credit)};`;
131
+ return `// In a page with <div id="rocket"></div>${credit === "" ? "" : ' and <p id="credit"></p>'}.\nimport { build } from "${cdn}/dist/build/index.js";\n// or, from npm: import { build } from "@johnmorrisdotca/uchusen-rockets/build";\n\nconst rocket = build(${JSON.stringify(description, null, 2)});\ndocument.querySelector("#rocket").innerHTML = rocket.svg(${JSON.stringify(svgOptions)});${caption}`;
132
+ }
133
+ const attrs = Object.entries(attributesFromOptions(options)).map(([name, value]) => `${name}="${esc(value)}"`);
134
+ return `${IMPORT_MAP}\n<script type="module" src="${cdn}/dist/element.js"></script>\n\n<uchusen-rocket${attrs.length === 0 ? "" : `\n ${attrs.join("\n ")}`}\n></uchusen-rocket>${creditHtml(credit)}`;
135
+ }
@@ -0,0 +1,44 @@
1
+ import type { Piece } from "./model/pieces.ts";
2
+ /** How many exit-radii a drawn flame reaches, and the most any reaches in metres. A picture, not a measured length. */
3
+ export declare const PLUME_EXITS = 34;
4
+ export declare const PLUME_MOST_M = 26;
5
+ /** How many shock diamonds a flame shows near the ground. A picture. */
6
+ export declare const PLUME_DIAMONDS = 6;
7
+ /** With no one touching anything, a flame stops moving after this long and nothing draws: a lit rocket at rest costs the same as a dark one. */
8
+ export declare const FLAME_SETTLE_MS = 15000;
9
+ /** A flame that only flickers is drawn at most this often. A turn or a move still draws once a frame. */
10
+ export declare const FLAME_GAP_MS = 33;
11
+ export declare function plumeLength(exit: number): number;
12
+ /** `on` asks for them, and a reader who asked for reduced motion has them off whatever the page says. Anything else, or nothing, is off. */
13
+ export declare function enginesWanted(attribute: string | null, reduced: boolean): boolean;
14
+ export interface Bell {
15
+ x: number;
16
+ z: number;
17
+ /** Height of the mouth, in the part's own metres. */
18
+ y: number;
19
+ /** Exit radius, metres. */
20
+ exit: number;
21
+ }
22
+ /** One bell for every engine the pieces already draw. The mouth is the first point of the bell. */
23
+ export declare function bellsOf(pieces: readonly Piece[]): Bell[];
24
+ export interface LitBell extends Bell {
25
+ slot: string;
26
+ }
27
+ /**
28
+ * The engines that are alight at full thrust. Stacked, only the parts on the ground or beside the stack, as an orbiter is: a ship's engines are buried in the booster.
29
+ * Apart, or one part on its own, every bell that part draws. A part whose engines no source tells of (`dark`, a stage that has landed) draws no flame.
30
+ */
31
+ export declare function litBells(parts: readonly {
32
+ slot: string;
33
+ atY: number;
34
+ shown: boolean;
35
+ pieces: readonly Piece[];
36
+ beside?: boolean;
37
+ dark?: boolean;
38
+ }[], together: boolean): LitBell[];
39
+ /** The bells grouped by how far they are from the part's axis, innermost ring first, and each ring in order round the axis. */
40
+ export declare function ringsOf(bells: readonly Bell[]): Bell[][];
41
+ /**
42
+ * Which `count` engines burn: from the middle out, and a ring that is only partly used has them evenly round it, so three of a Falcon 9's nine are the middle one and two opposite. A source says how many; where they stand is this rule.
43
+ */
44
+ export declare function pickBells(bells: readonly Bell[], count: number): Bell[];
@@ -0,0 +1,79 @@
1
+ /** How many exit-radii a drawn flame reaches, and the most any reaches in metres. A picture, not a measured length. */
2
+ export const PLUME_EXITS = 34;
3
+ export const PLUME_MOST_M = 26;
4
+ /** How many shock diamonds a flame shows near the ground. A picture. */
5
+ export const PLUME_DIAMONDS = 6;
6
+ /** With no one touching anything, a flame stops moving after this long and nothing draws: a lit rocket at rest costs the same as a dark one. */
7
+ export const FLAME_SETTLE_MS = 15_000;
8
+ /** A flame that only flickers is drawn at most this often. A turn or a move still draws once a frame. */
9
+ export const FLAME_GAP_MS = 33;
10
+ export function plumeLength(exit) {
11
+ return Math.min(exit * PLUME_EXITS, PLUME_MOST_M);
12
+ }
13
+ /** `on` asks for them, and a reader who asked for reduced motion has them off whatever the page says. Anything else, or nothing, is off. */
14
+ export function enginesWanted(attribute, reduced) {
15
+ return attribute === "on" && !reduced;
16
+ }
17
+ /** One bell for every engine the pieces already draw. The mouth is the first point of the bell. */
18
+ export function bellsOf(pieces) {
19
+ const bells = [];
20
+ for (const piece of pieces) {
21
+ if (piece.kind !== "lathe" || piece.material !== "bell" || piece.profile.length === 0)
22
+ continue;
23
+ const [exit, y] = piece.profile[0];
24
+ const at = piece.at ?? [0, 0];
25
+ bells.push({ x: at[0], z: at[1], y, exit });
26
+ }
27
+ return bells;
28
+ }
29
+ /**
30
+ * The engines that are alight at full thrust. Stacked, only the parts on the ground or beside the stack, as an orbiter is: a ship's engines are buried in the booster.
31
+ * Apart, or one part on its own, every bell that part draws. A part whose engines no source tells of (`dark`, a stage that has landed) draws no flame.
32
+ */
33
+ export function litBells(parts, together) {
34
+ const shown = parts.filter((part) => part.shown);
35
+ if (shown.length === 0)
36
+ return [];
37
+ const floor = Math.min(...shown.map((part) => part.atY));
38
+ const bells = [];
39
+ for (const part of shown) {
40
+ if (part.dark || (together && part.atY > floor + 0.5 && !part.beside))
41
+ continue;
42
+ for (const bell of bellsOf(part.pieces))
43
+ bells.push({ ...bell, slot: part.slot });
44
+ }
45
+ return bells;
46
+ }
47
+ /** The bells grouped by how far they are from the part's axis, innermost ring first, and each ring in order round the axis. */
48
+ export function ringsOf(bells) {
49
+ const sorted = [...bells].sort((a, b) => Math.hypot(a.x, a.z) - Math.hypot(b.x, b.z));
50
+ const rings = [];
51
+ for (const bell of sorted) {
52
+ const last = rings[rings.length - 1];
53
+ if (last && Math.abs(Math.hypot(last[0].x, last[0].z) - Math.hypot(bell.x, bell.z)) < 0.05)
54
+ last.push(bell);
55
+ else
56
+ rings.push([bell]);
57
+ }
58
+ for (const ring of rings)
59
+ ring.sort((a, b) => Math.atan2(a.x, a.z) - Math.atan2(b.x, b.z));
60
+ return rings;
61
+ }
62
+ /**
63
+ * Which `count` engines burn: from the middle out, and a ring that is only partly used has them evenly round it, so three of a Falcon 9's nine are the middle one and two opposite. A source says how many; where they stand is this rule.
64
+ */
65
+ export function pickBells(bells, count) {
66
+ const wanted = Math.max(0, Math.min(bells.length, Math.floor(count)));
67
+ const out = [];
68
+ for (const ring of ringsOf(bells)) {
69
+ const left = wanted - out.length;
70
+ if (left <= 0)
71
+ break;
72
+ if (ring.length <= left)
73
+ out.push(...ring);
74
+ else
75
+ for (let i = 0; i < left; i++)
76
+ out.push(ring[Math.floor((i * ring.length) / left)]);
77
+ }
78
+ return out;
79
+ }
package/dist/fit.d.ts CHANGED
@@ -40,4 +40,6 @@ export interface FitReport {
40
40
  usedFor: readonly string[];
41
41
  })[];
42
42
  }
43
+ /** How far apart two joints may be in metres and still meet. */
44
+ export declare const JOINT_TOLERANCE = 0.1;
43
45
  export declare function check(description: Description): FitReport;