@johnmorrisdotca/uchusen-rockets 0.2.2 → 0.4.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 (906) hide show
  1. package/CHANGELOG.md +55 -5
  2. package/LICENSES/ODbL-1.0.txt +540 -0
  3. package/NOTICE.md +56 -6
  4. package/README.md +288 -16
  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 +93 -0
  758. package/dist/attrs.js +86 -0
  759. package/dist/build/glb.d.ts +25 -0
  760. package/dist/build/glb.js +14 -0
  761. package/dist/build/index.d.ts +96 -6
  762. package/dist/build/index.js +83 -8
  763. package/dist/build/lineup.d.ts +56 -2
  764. package/dist/build/lineup.js +37 -6
  765. package/dist/builder.d.ts +68 -0
  766. package/dist/builder.js +116 -0
  767. package/dist/crossfade.d.ts +44 -2
  768. package/dist/crossfade.js +44 -2
  769. package/dist/data/apollosoyuz.d.ts +6 -0
  770. package/dist/data/apollosoyuz.js +28 -0
  771. package/dist/data/credits.d.ts +63 -2
  772. package/dist/data/credits.js +52 -2
  773. package/dist/data/dragon.js +35 -0
  774. package/dist/data/electron.d.ts +2 -0
  775. package/dist/data/electron.js +23 -0
  776. package/dist/data/falcon.js +2 -2
  777. package/dist/data/falcon1.d.ts +4 -0
  778. package/dist/data/falcon1.js +51 -0
  779. package/dist/data/flight-log.d.ts +50 -0
  780. package/dist/data/flight-log.js +44 -0
  781. package/dist/data/flights.d.ts +101 -0
  782. package/dist/data/flights.js +187 -0
  783. package/dist/data/gemini.d.ts +3 -0
  784. package/dist/data/gemini.js +22 -0
  785. package/dist/data/hubble.d.ts +3 -0
  786. package/dist/data/hubble.js +23 -0
  787. package/dist/data/iss.d.ts +5 -0
  788. package/dist/data/iss.js +25 -0
  789. package/dist/data/jupiterc.d.ts +3 -0
  790. package/dist/data/jupiterc.js +22 -0
  791. package/dist/data/landing.d.ts +3 -0
  792. package/dist/data/landing.js +51 -0
  793. package/dist/data/lunarmodule.d.ts +4 -0
  794. package/dist/data/lunarmodule.js +27 -0
  795. package/dist/data/makers.d.ts +37 -0
  796. package/dist/data/makers.js +39 -0
  797. package/dist/data/mercury.d.ts +3 -0
  798. package/dist/data/mercury.js +22 -0
  799. package/dist/data/newglenn.d.ts +2 -0
  800. package/dist/data/newglenn.js +23 -0
  801. package/dist/data/saturn.d.ts +2 -0
  802. package/dist/data/saturn.js +32 -0
  803. package/dist/data/shuttle.d.ts +5 -0
  804. package/dist/data/shuttle.js +52 -0
  805. package/dist/data/sls.d.ts +4 -0
  806. package/dist/data/sls.js +36 -0
  807. package/dist/data/sources.d.ts +380 -2
  808. package/dist/data/sources.js +55 -1
  809. package/dist/data/soyuz.d.ts +3 -0
  810. package/dist/data/soyuz.js +33 -0
  811. package/dist/data/starbase.d.ts +2 -0
  812. package/dist/data/starbase.js +30 -0
  813. package/dist/data/tower.d.ts +3 -0
  814. package/dist/data/tower.js +26 -0
  815. package/dist/data/types.d.ts +88 -2
  816. package/dist/data/types.js +26 -1
  817. package/dist/draw/plume.d.ts +8 -0
  818. package/dist/draw/plume.js +71 -0
  819. package/dist/draw/svg.d.ts +1 -1
  820. package/dist/draw/svg.js +3 -3
  821. package/dist/element/ground.d.ts +15 -0
  822. package/dist/element/ground.js +95 -0
  823. package/dist/element/plumes.d.ts +38 -0
  824. package/dist/element/plumes.js +208 -0
  825. package/dist/element/scene.d.ts +39 -5
  826. package/dist/element/scene.js +250 -7
  827. package/dist/element.d.ts +111 -4
  828. package/dist/element.js +251 -16
  829. package/dist/embed.d.ts +131 -0
  830. package/dist/embed.js +218 -0
  831. package/dist/engines.d.ts +126 -0
  832. package/dist/engines.js +150 -0
  833. package/dist/fit.d.ts +70 -0
  834. package/dist/fit.js +17 -3
  835. package/dist/flight.d.ts +192 -0
  836. package/dist/flight.js +237 -0
  837. package/dist/flightbar.d.ts +34 -0
  838. package/dist/flightbar.js +188 -0
  839. package/dist/framing.d.ts +182 -8
  840. package/dist/framing.js +127 -6
  841. package/dist/index.d.ts +17 -0
  842. package/dist/index.js +9 -0
  843. package/dist/layout.d.ts +65 -1
  844. package/dist/layout.js +44 -2
  845. package/dist/looks.d.ts +65 -2
  846. package/dist/looks.js +44 -1
  847. package/dist/model/apollosoyuz.d.ts +2 -0
  848. package/dist/model/apollosoyuz.js +46 -0
  849. package/dist/model/dragoninside.d.ts +2 -0
  850. package/dist/model/dragoninside.js +67 -0
  851. package/dist/model/electron.d.ts +2 -0
  852. package/dist/model/electron.js +35 -0
  853. package/dist/model/falcon.d.ts +2 -0
  854. package/dist/model/falcon.js +4 -0
  855. package/dist/model/falcon1.d.ts +2 -0
  856. package/dist/model/falcon1.js +53 -0
  857. package/dist/model/gemini.d.ts +2 -0
  858. package/dist/model/gemini.js +28 -0
  859. package/dist/model/hubble.d.ts +2 -0
  860. package/dist/model/hubble.js +28 -0
  861. package/dist/model/iss.d.ts +2 -0
  862. package/dist/model/iss.js +32 -0
  863. package/dist/model/jupiterc.d.ts +2 -0
  864. package/dist/model/jupiterc.js +24 -0
  865. package/dist/model/kit.d.ts +36 -0
  866. package/dist/model/kit.js +95 -0
  867. package/dist/model/landing.d.ts +3 -0
  868. package/dist/model/landing.js +81 -0
  869. package/dist/model/lunarmodule.d.ts +2 -0
  870. package/dist/model/lunarmodule.js +43 -0
  871. package/dist/model/materials.d.ts +74 -0
  872. package/dist/model/materials.js +17 -0
  873. package/dist/model/mercury.d.ts +2 -0
  874. package/dist/model/mercury.js +19 -0
  875. package/dist/model/newglenn.d.ts +2 -0
  876. package/dist/model/newglenn.js +43 -0
  877. package/dist/model/pieces.d.ts +2 -0
  878. package/dist/model/pieces.js +2 -2
  879. package/dist/model/registry.d.ts +22 -0
  880. package/dist/model/registry.js +85 -0
  881. package/dist/model/saturn.d.ts +2 -0
  882. package/dist/model/saturn.js +122 -0
  883. package/dist/model/shuttle.d.ts +2 -0
  884. package/dist/model/shuttle.js +111 -0
  885. package/dist/model/sls.d.ts +2 -0
  886. package/dist/model/sls.js +83 -0
  887. package/dist/model/soyuz.d.ts +2 -0
  888. package/dist/model/soyuz.js +75 -0
  889. package/dist/model/stacks.d.ts +39 -0
  890. package/dist/model/stacks.js +1 -0
  891. package/dist/model/starbase.d.ts +2 -0
  892. package/dist/model/starbase.js +108 -0
  893. package/dist/model/tower.d.ts +6 -0
  894. package/dist/model/tower.js +89 -0
  895. package/dist/parts.d.ts +36 -3
  896. package/dist/pixels.d.ts +44 -4
  897. package/dist/pixels.js +44 -4
  898. package/dist/react.d.ts +38 -6
  899. package/dist/react.js +13 -0
  900. package/dist/rockets.d.ts +96 -3
  901. package/dist/rockets.js +136 -9
  902. package/dist/spin.d.ts +66 -0
  903. package/dist/spin.js +44 -0
  904. package/dist/tilt.d.ts +48 -4
  905. package/dist/tilt.js +26 -4
  906. package/package.json +99 -19
@@ -0,0 +1,33 @@
1
+ // Soyuz-2 as its article gives it. Its fairing has no length here: it is what the whole leaves above the third stage.
2
+ import { blank } from "./types.js";
3
+ const S = "wikipedia-soyuz-2";
4
+ const m = (value, source, extra = {}) => ({ value, source, ...extra });
5
+ const said = (value, source, extra = {}) => ({ value, source, ...extra });
6
+ const BOOSTER = m(19.6, S, { note: "Block B, V, G and D." });
7
+ export const SOYUZ_BOOSTER_DIAMETER = m(2.68, S);
8
+ export const SOYUZ_VARIANTS = [
9
+ {
10
+ id: "soyuz-2",
11
+ rocket: "soyuz",
12
+ name: "Soyuz-2 (2.1a and 2.1b)",
13
+ status: "flown",
14
+ firstFlight: said("2004-11-08", S, { note: "The 2.1a. The 2.1b first flew on 2006-12-27." }),
15
+ slots: ["first-stage", "booster-1", "booster-2", "booster-3", "booster-4", "third-stage", "fairing"],
16
+ note: "Here with a plain fairing: Block A in the middle, four boosters round it, and the third stage. Its 46.3 m is the box's for the 2.1a and 2.1b, and it can carry other fairings. The fairing's length is what the whole leaves. The core's waist, the boosters' lean and the paint are judged from photographs. No name or mark is drawn.",
17
+ facts: {
18
+ height: m(46.3, S),
19
+ diameter: m(10.3, S, { note: "Across the boosters' fins. Block A is 2.95 m." }),
20
+ parts: {
21
+ "first-stage": m(27.1, S, { note: "Block A, the core: the box's second stage, which burns from the ground with the boosters." }),
22
+ "booster-1": BOOSTER,
23
+ "booster-2": BOOSTER,
24
+ "booster-3": BOOSTER,
25
+ "booster-4": BOOSTER,
26
+ "third-stage": m(6.7, S, { note: "Block I." }),
27
+ fairing: blank("No source read here gives its length."),
28
+ },
29
+ engines: { "first-stage": said("1 RD-108A", S), "booster-1": said("1 RD-107A", S), "booster-2": said("1 RD-107A", S), "booster-3": said("1 RD-107A", S), "booster-4": said("1 RD-107A", S), "third-stage": said("1 RD-0110 or RD-0124", S) },
30
+ more: {},
31
+ },
32
+ },
33
+ ];
@@ -0,0 +1,2 @@
1
+ import { type Variant } from "./types.ts";
2
+ export declare const STARBASE_VARIANTS: readonly Variant[];
@@ -0,0 +1,30 @@
1
+ // The coordinates, outlines and map heights in this file are © OpenStreetMap contributors, under the Open Database License (ODbL 1.0, https://www.openstreetmap.org/copyright), not MIT: see NOTICE.md.
2
+ // Starbase as a scene: where things stand is measured from OpenStreetMap, a handful of named places under its licence. What is built, nothing announced. Its figures are mappers' and not surveys, and each says so.
3
+ import { blank } from "./types.js";
4
+ const O = "openstreetmap";
5
+ const W = "wikipedia-starbase";
6
+ const m = (value, source, extra = {}) => ({ value, source, ...extra });
7
+ const MAP = "From a mapper's outline, not a survey.";
8
+ const towers = m(348, O, { note: "Between the map's two tower outlines." });
9
+ const bay = m(100, O, { note: "The map's height tag. Its outline is 54 by 38 m. A mapper's figure, not the builder's." });
10
+ const factory = m(327, O, { note: `Starfactory's long side; 293 m the other way, 16.3 m the map's height tag. ${MAP}` });
11
+ const farm = m(314, O, { note: `Its area, 314 by 78 m. ${MAP}` });
12
+ const whole = blank("A place, not a vehicle.");
13
+ const FIRST = { value: "2021-07", source: W, brief: "first tower fully stacked" };
14
+ const PLAIN = "Plain shapes from the map, with no lettering or logo anywhere. Only what is built is shown: nothing announced, and no concept picture was used.";
15
+ const site = (id, name, slots, note, sizes) => ({
16
+ id,
17
+ rocket: "starbase",
18
+ name,
19
+ status: "support",
20
+ firstWord: "Built from",
21
+ firstFlight: FIRST,
22
+ slots,
23
+ note: `${note} ${PLAIN}`,
24
+ facts: { height: whole, diameter: whole, parts: Object.fromEntries(slots.map((slot) => [slot, blank("Drawn from the map's outlines; see below.")])), engines: {}, more: {}, sizes },
25
+ });
26
+ export const STARBASE_VARIANTS = [
27
+ site("launch-site", "Starbase, the launch site", ["ground", "pads", "tank-farm", "on-pad"], "Two towers and their mounts, the tank farm and the beach, with a Block 3's size standing on the first pad as a plain shape. The tanks are as many as look right in the farm's outline, not a count.", { "Tower 1 to tower 2": towers, "Tank farm": farm }),
28
+ site("build-site", "Starbase, the build site", ["ground", "mega-bays", "starfactory", "garden", "sign"], "The two Mega Bays, Starfactory, and the Sanchez site with its rocket garden, whose rockets are plain shapes at Block 3's size, standing as photographs show them. Starfactory is its outer outline, as one box. The sign's place has a plain board.", { "Mega Bay's height": bay, "Starfactory": factory }),
29
+ site("city", "Starbase, the launch site to the build site", ["ground", "pads", "tank-farm", "on-pad", "mega-bays", "starfactory", "garden", "sign", "village"], "All of it, along the highway, about 3.5 km end to end, with a few plain houses at the village: not a count. Each building's place and outline are the map's.", { "Tower 1 to tower 2": towers, "Mega Bay's height": bay }),
30
+ ];
@@ -0,0 +1,3 @@
1
+ import { type Variant } from "./types.ts";
2
+ export declare const TOWER_HEIGHT = 146.3;
3
+ export declare const TOWER_VARIANTS: readonly Variant[];
@@ -0,0 +1,26 @@
1
+ // The tower's 13 m footprint in this file is © OpenStreetMap contributors, under the Open Database License (ODbL 1.0, https://www.openstreetmap.org/copyright), not MIT: see NOTICE.md.
2
+ // The integration tower at Starbase, with its mount and arms, as sourced: the FAA's assessment gives its height. No source read here gives its width, its arms' length or the mount's size: those are judged from photographs.
3
+ import { STARSHIP_VARIANTS } from "./starship.js";
4
+ import { blank } from "./types.js";
5
+ const F = "faa-pea-2022";
6
+ const W = "wikipedia-starbase";
7
+ const m = (value, source, extra = {}) => ({ value, source, ...extra });
8
+ const said = (value, source, extra = {}) => ({ value, source, ...extra });
9
+ export const TOWER_HEIGHT = 146.3;
10
+ const v3 = STARSHIP_VARIANTS.find((variant) => variant.id === "v3");
11
+ const TOWER = m(TOWER_HEIGHT, F, { brief: "approximately", note: "About 480 feet, with a 10-foot lightning rod on top, as proposed in 2022.", others: [{ value: 146, source: W, note: "Wikipedia's Starbase article gives 479 feet from the FAA's 2021 determination of no hazard to air navigation." }] });
12
+ const JUDGED = "No source read here gives its size: it is judged from photographs.";
13
+ const facts = (withRocket) => ({
14
+ height: TOWER,
15
+ diameter: { value: 13, source: "openstreetmap", brief: "the tower", note: "The map's footprint of tower 1, 13 by 12 m." },
16
+ parts: { tower: TOWER, mount: blank(JUDGED), arms: blank(JUDGED), ...(withRocket ? { booster: v3.facts.parts.booster, ship: v3.facts.parts.ship } : {}) },
17
+ engines: {},
18
+ more: {},
19
+ });
20
+ const base = { rocket: "launch-tower", status: "support", firstWord: "Stacked" };
21
+ const FIRST = said("2021-07", W, { brief: "first tower fully stacked" });
22
+ export const TOWER_VARIANTS = [
23
+ { ...base, id: "tower", name: "Integration tower and mount", firstFlight: FIRST, slots: ["mount", "tower", "arms"], note: "The tower at Starbase with its launch mount and its two arms, the chopsticks, held open. The arms' length, the mount and how far it stands from the tower are judged from photographs. No lettering or mark is drawn.", facts: facts(false) },
24
+ { ...base, id: "stack", name: "Tower, with Block 3 stacked on the mount", firstFlight: FIRST, slots: ["mount", "tower", "arms", "booster", "ship"], note: "Super Heavy on the mount and the Ship on Super Heavy, as they are stacked by the arms. The rocket is Block 3's own parts, painted by this package's code here to keep the scene light. No lettering or mark is drawn.", facts: facts(true) },
25
+ { ...base, id: "catch", name: "Tower, catching Super Heavy", firstFlight: said("2024-10-13", W, { brief: "first catch", note: "Flight 5: Booster 12." }), slots: ["mount", "tower", "arms", "booster"], note: "The arms closed under the grid fins, as on Flight 5, with Block 3's booster. How high it hangs is judged from photographs of that catch, which show an earlier booster. No lettering or mark is drawn.", facts: { ...facts(true), parts: { tower: TOWER, mount: blank(JUDGED), arms: blank(JUDGED), booster: v3.facts.parts.booster } } },
26
+ ];
@@ -1,9 +1,31 @@
1
1
  import type { SourceId } from "./sources.ts";
2
+ /**
3
+ * Another value a source gave for a figure, with the source and the reason it was not the one chosen.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * import { variantOf, type Disagreement } from "@johnmorrisdotca/uchusen-rockets";
8
+ *
9
+ * const others: readonly Disagreement<number>[] = variantOf("starship", "v3")?.facts.parts.booster?.others ?? [];
10
+ * console.log(others.map((other) => other.value));
11
+ * ```
12
+ */
2
13
  export interface Disagreement<T> {
3
14
  value: T;
4
15
  source: SourceId;
5
16
  note: string;
6
17
  }
18
+ /**
19
+ * A number or a text with where it came from. A figure with no source is blank (`value` is null) and is never estimated. Where sources disagree, the figure keeps the one chosen and `others` holds the rest.
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * import { variantOf, type Figure } from "@johnmorrisdotca/uchusen-rockets";
24
+ *
25
+ * const height: Figure | undefined = variantOf("starship", "v3")?.facts.height;
26
+ * console.log(height?.value, height?.source);
27
+ * ```
28
+ */
7
29
  export interface Figure<T = number> {
8
30
  value: T | null;
9
31
  source: SourceId | null;
@@ -14,10 +36,57 @@ export interface Figure<T = number> {
14
36
  brief?: string;
15
37
  others?: readonly Disagreement<T>[];
16
38
  }
39
+ /**
40
+ * A figure with no value: the shape of "no source gives this".
41
+ *
42
+ * @param note Why there is no value. Optional.
43
+ * @param brief What to say in place of a value wherever it is shown. Optional.
44
+ * @returns A figure whose value and source are null.
45
+ * @example
46
+ * ```ts
47
+ * import { blank } from "@johnmorrisdotca/uchusen-rockets";
48
+ *
49
+ * console.log(blank("No source read gives it.", "not given"));
50
+ * ```
51
+ */
17
52
  export declare const blank: <T = number>(note?: string, brief?: string) => Figure<T>;
18
- /** A figure as words for a table: its value and whatever must stay beside it; a blank says why, or that no source gives it. */
53
+ /**
54
+ * A figure as words for a table: its value and whatever must stay beside it; a blank says why, or that no source gives it.
55
+ *
56
+ * @param figure A figure, or undefined.
57
+ * @param unit Text to put after a number, such as " m". Optional.
58
+ * @returns The figure as words for a table. A blank gives its `brief`, or "No source" when it has none.
59
+ * @example
60
+ * ```ts
61
+ * import { figureWords, variantOf } from "@johnmorrisdotca/uchusen-rockets";
62
+ *
63
+ * console.log(figureWords(variantOf("starship", "v3")?.facts.height, " m"));
64
+ * ```
65
+ */
19
66
  export declare function figureWords(figure: Figure<number | string> | undefined, unit?: string): string;
20
- export type VariantStatus = "flown" | "announced" | "artist-model" | "test-vehicle";
67
+ /**
68
+ * What kind of thing a variant is: flown, announced (not built), an artist's model, a test vehicle or a support item.
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * import { variantOf, type VariantStatus } from "@johnmorrisdotca/uchusen-rockets";
73
+ *
74
+ * const status: VariantStatus | undefined = variantOf("starship", "v4")?.status;
75
+ * console.log(status);
76
+ * ```
77
+ */
78
+ export type VariantStatus = "flown" | "announced" | "artist-model" | "test-vehicle" | "support";
79
+ /**
80
+ * The sourced numbers of a variant: its height and diameter, each part's height by slot, its engines, other facts and any sizes that are not a height or a width.
81
+ *
82
+ * @example
83
+ * ```ts
84
+ * import { variantOf, type VariantFacts } from "@johnmorrisdotca/uchusen-rockets";
85
+ *
86
+ * const facts: VariantFacts | undefined = variantOf("falcon-9", "block-5")?.facts;
87
+ * console.log(facts?.height.value, Object.keys(facts?.parts ?? {}));
88
+ * ```
89
+ */
21
90
  export interface VariantFacts {
22
91
  /** Overall height with every part in place, metres. */
23
92
  height: Figure;
@@ -28,7 +97,20 @@ export interface VariantFacts {
28
97
  engines: Readonly<Record<string, Figure<string>>>;
29
98
  /** Other facts, each with its own source. */
30
99
  more: Readonly<Record<string, Figure<number | string>>>;
100
+ /** Sizes that are not a height or a width, shown as they are named here: "Deck length". */
101
+ sizes?: Readonly<Record<string, Figure>>;
31
102
  }
103
+ /**
104
+ * One version of a rocket as data: its id, name, status, first flight, its parts from the bottom up, and the sourced facts about it.
105
+ *
106
+ * @example
107
+ * ```ts
108
+ * import { variantOf, type Variant } from "@johnmorrisdotca/uchusen-rockets";
109
+ *
110
+ * const variant: Variant | undefined = variantOf("starship", "v3");
111
+ * console.log(variant?.name, variant?.slots);
112
+ * ```
113
+ */
32
114
  export interface Variant {
33
115
  /** "v1", "v2" and so on; a label for what is not a numbered version. */
34
116
  id: string;
@@ -36,6 +118,8 @@ export interface Variant {
36
118
  /** What it is called, in a line: "Block 3 (V3)". */
37
119
  name: string;
38
120
  status: VariantStatus;
121
+ /** What to call its first date, when it is not a vehicle that flew: "In service". */
122
+ firstWord?: string;
39
123
  /** When this variant, in this form, first flew. Its `brief` says so when the form is not the block's first. */
40
124
  firstFlight: Figure<string>;
41
125
  /** The parts this variant has, in stacking order from the bottom. */
@@ -45,4 +129,6 @@ export interface Variant {
45
129
  partIds?: Readonly<Record<string, string>>;
46
130
  /** What a reader should be told about it. */
47
131
  note?: string;
132
+ /** The side a to-scale lineup shows of it when asked for the front, because the front hides what it is: the orbiter stands behind the Shuttle's tank. */
133
+ lineupView?: "back" | "side";
48
134
  }
@@ -1,5 +1,30 @@
1
+ /**
2
+ * A figure with no value: the shape of "no source gives this".
3
+ *
4
+ * @param note Why there is no value. Optional.
5
+ * @param brief What to say in place of a value wherever it is shown. Optional.
6
+ * @returns A figure whose value and source are null.
7
+ * @example
8
+ * ```ts
9
+ * import { blank } from "@johnmorrisdotca/uchusen-rockets";
10
+ *
11
+ * console.log(blank("No source read gives it.", "not given"));
12
+ * ```
13
+ */
1
14
  export const blank = (note, brief) => ({ value: null, source: null, ...(note ? { note } : {}), ...(brief ? { brief } : {}) });
2
- /** A figure as words for a table: its value and whatever must stay beside it; a blank says why, or that no source gives it. */
15
+ /**
16
+ * A figure as words for a table: its value and whatever must stay beside it; a blank says why, or that no source gives it.
17
+ *
18
+ * @param figure A figure, or undefined.
19
+ * @param unit Text to put after a number, such as " m". Optional.
20
+ * @returns The figure as words for a table. A blank gives its `brief`, or "No source" when it has none.
21
+ * @example
22
+ * ```ts
23
+ * import { figureWords, variantOf } from "@johnmorrisdotca/uchusen-rockets";
24
+ *
25
+ * console.log(figureWords(variantOf("starship", "v3")?.facts.height, " m"));
26
+ * ```
27
+ */
3
28
  export function figureWords(figure, unit = "") {
4
29
  if (!figure || figure.value === null)
5
30
  return figure?.brief ?? "No source";
@@ -0,0 +1,8 @@
1
+ import type { Camera } from "./svg.ts";
2
+ import type { Vec3 } from "../framing.ts";
3
+ import { type Bell } from "../engines.ts";
4
+ import type { LookName } from "../looks.ts";
5
+ /** The flames for these bells, in picture coordinates. Empty when there are none. */
6
+ export declare function plumeMarkup(bells: readonly Bell[], at: Vec3, cam: Camera, look: LookName, prefix: string): string;
7
+ /** The engines of a part seen from below, each in its own place, the burning ones filled: `engine by engine`. Its words are for a screen reader. */
8
+ export declare function engineChart(bells: readonly Bell[], burning: readonly Bell[], label: string): string;
@@ -0,0 +1,71 @@
1
+ import { PLUME_DIAMONDS, plumeLength } from "../engines.js";
2
+ const n = (v) => (Math.round(v * 100) / 100).toString();
3
+ function hull(points) {
4
+ const p = [...points].sort((a, b) => a[0] - b[0] || a[1] - b[1]);
5
+ if (p.length < 3)
6
+ return p;
7
+ const cross = (o, a, b) => (a[0] - o[0]) * (b[1] - o[1]) - (a[1] - o[1]) * (b[0] - o[0]);
8
+ const half = (list) => {
9
+ const out = [];
10
+ for (const q of list) {
11
+ while (out.length >= 2 && cross(out[out.length - 2], out[out.length - 1], q) <= 0)
12
+ out.pop();
13
+ out.push(q);
14
+ }
15
+ out.pop();
16
+ return out;
17
+ };
18
+ return [...half(p), ...half([...p].reverse())];
19
+ }
20
+ const pathOf = (pts) => `M${pts.map(([x, y]) => `${n(x)} ${n(y)}`).join("L")}Z`;
21
+ /** The flames for these bells, in picture coordinates. Empty when there are none. */
22
+ export function plumeMarkup(bells, at, cam, look, prefix) {
23
+ if (bells.length === 0)
24
+ return "";
25
+ const painted = look === "painted";
26
+ const stroke = look === "thick" ? 2.4 : 1.2;
27
+ const parts = [];
28
+ bells.forEach((bell, index) => {
29
+ const mouth = [at[0] + bell.x, at[1] + bell.y, at[2] + bell.z];
30
+ const tip = [mouth[0], mouth[1] - plumeLength(bell.exit), mouth[2]];
31
+ const rim = [];
32
+ for (let step = 0; step < 10; step++) {
33
+ const angle = (step / 10) * Math.PI * 2;
34
+ rim.push(cam.project([mouth[0] + Math.sin(angle) * bell.exit, mouth[1], mouth[2] + Math.cos(angle) * bell.exit]));
35
+ }
36
+ const mouthPoint = cam.project(mouth);
37
+ const tipPoint = cam.project(tip);
38
+ const shape = hull([...rim, tipPoint]);
39
+ const id = `uchusen-plume-${prefix}-${index}`;
40
+ const glow = `uchusen-glow-${prefix}-${index}`;
41
+ const xs = rim.map((point) => point[0]);
42
+ const ys = rim.map((point) => point[1]);
43
+ const cx = (Math.min(...xs) + Math.max(...xs)) / 2;
44
+ const cy = (Math.min(...ys) + Math.max(...ys)) / 2;
45
+ const rx = Math.max(1.2, (Math.max(...xs) - Math.min(...xs)) / 2);
46
+ const ry = Math.max(1.2, (Math.max(...ys) - Math.min(...ys)) / 2);
47
+ const defs = painted
48
+ ? `<defs><linearGradient id="${id}" gradientUnits="userSpaceOnUse" x1="${n(mouthPoint[0])}" y1="${n(mouthPoint[1])}" x2="${n(tipPoint[0])}" y2="${n(tipPoint[1])}"><stop offset="0" stop-color="#fff4d2"/><stop offset="0.45" stop-color="#ff9a3a"/><stop offset="1" stop-color="#ff4a12" stop-opacity="0"/></linearGradient><radialGradient id="${glow}" gradientUnits="userSpaceOnUse" cx="${n(cx)}" cy="${n(cy)}" r="${n(Math.max(rx, ry))}"><stop offset="0" stop-color="#fff1c4"/><stop offset="1" stop-color="#ff7a1a" stop-opacity="0"/></radialGradient></defs>`
49
+ : "";
50
+ const flame = shape.length >= 3 ? (painted ? `<path data-plume="1" d="${pathOf(shape)}" fill="url(#${id})" stroke="none"/>` : `<path data-plume="1" d="${pathOf(shape)}" fill="none" stroke="#e7a24a" stroke-width="${stroke}"/><path d="M${n(mouthPoint[0])} ${n(mouthPoint[1])}L${n(tipPoint[0])} ${n(tipPoint[1])}" fill="none" stroke="#ffd7a1" stroke-width="${stroke * 0.6}"/>`) : "";
51
+ const ring = painted ? `<ellipse data-glow="1" cx="${n(cx)}" cy="${n(cy)}" rx="${n(rx * 1.35)}" ry="${n(ry * 1.35)}" fill="url(#${glow})"/>` : `<ellipse data-glow="1" cx="${n(cx)}" cy="${n(cy)}" rx="${n(rx * 1.2)}" ry="${n(ry * 1.2)}" fill="none" stroke="#e7a24a" stroke-width="${stroke}"/>`;
52
+ // the first few shock diamonds, as small rings down the flame: a picture
53
+ let diamonds = "";
54
+ for (let k = 1; k <= 3; k++) {
55
+ const along = k / PLUME_DIAMONDS;
56
+ const [dx, dy] = cam.project([mouth[0], mouth[1] - plumeLength(bell.exit) * along, mouth[2]]);
57
+ const size = n(Math.max(0.9, rx * 0.5 * (1 - along)));
58
+ diamonds += painted ? `<ellipse data-diamond="1" cx="${n(dx)}" cy="${n(dy)}" rx="${size}" ry="${size}" fill="#fff4d2" fill-opacity="0.7"/>` : `<ellipse data-diamond="1" cx="${n(dx)}" cy="${n(dy)}" rx="${size}" ry="${size}" fill="none" stroke="#e7a24a" stroke-width="${stroke * 0.6}"/>`;
59
+ }
60
+ if (flame !== "")
61
+ parts.push(`<g>${defs}${ring}${flame}${diamonds}</g>`);
62
+ });
63
+ return parts.join("");
64
+ }
65
+ /** The engines of a part seen from below, each in its own place, the burning ones filled: `engine by engine`. Its words are for a screen reader. */
66
+ export function engineChart(bells, burning, label) {
67
+ const reach = Math.max(1, ...bells.map((bell) => Math.hypot(bell.x, bell.z) + bell.exit)) * 1.06;
68
+ const lit = new Set(burning);
69
+ const dots = bells.map((bell) => `<circle cx="${n(bell.x)}" cy="${n(-bell.z)}" r="${n(bell.exit)}" ${lit.has(bell) ? 'data-lit="1" fill="#ffb25c" stroke="#fff1c4"' : 'fill="none" stroke="currentColor"'} stroke-width="${n(reach * 0.03)}"/>`);
70
+ return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="${n(-reach)} ${n(-reach)} ${n(reach * 2)} ${n(reach * 2)}" role="img" aria-label="${label.replace(/&/g, "&amp;").replace(/"/g, "&quot;").replace(/</g, "&lt;")}">${dots.join("")}</svg>`;
71
+ }
@@ -20,7 +20,7 @@ export interface DrawOptions {
20
20
  weight?: number;
21
21
  }
22
22
  /** One part's picture at `at`, as SVG text in painter's order. */
23
- export declare function drawPart(pieces: readonly Piece[], at: Vec3, cam: Camera, look: LookName, weight?: number): string;
23
+ export declare function drawPart(pieces: readonly Piece[], at: Vec3, cam: Camera, look: LookName, weight?: number, line?: string): string;
24
24
  /** The picture's gradients and, on the tiled side, a mosaic of hexagons, for a look. */
25
25
  export declare function defsOf(look: LookName): string;
26
26
  export {};
package/dist/draw/svg.js CHANGED
@@ -60,7 +60,7 @@ function latheItem(piece, cam, at, style, list) {
60
60
  const [cx, cz] = piece.at ?? [0, 0];
61
61
  const profile = piece.profile;
62
62
  const steps = piece.segs > 24 ? 36 : 14;
63
- const here = (r, y, a) => [at[0] + cx + r * Math.sin(a), at[1] + y, at[2] + cz + r * Math.cos(a)];
63
+ const here = (r, y, a) => [at[0] + cx + r * Math.sin(a) + (piece.lean?.[0] ?? 0) * y, at[1] + y, at[2] + cz + r * Math.cos(a) + (piece.lean?.[1] ?? 0) * y];
64
64
  const middleY = (profile[0][1] + profile[profile.length - 1][1]) / 2;
65
65
  const middle = [at[0] + cx, at[1] + middleY, at[2] + cz];
66
66
  const axisHere = [at[0], at[1] + middleY, at[2]];
@@ -234,9 +234,9 @@ function linesItem(piece, cam, at, style, list) {
234
234
  list.push({ key: -1e3, svg: `<path d="${d}" fill="none" stroke="${style.line}" stroke-width="${n(piece.weight === "feature" ? style.feature : style.weld)}"/>` });
235
235
  }
236
236
  /** One part's picture at `at`, as SVG text in painter's order. */
237
- export function drawPart(pieces, at, cam, look, weight = 1) {
237
+ export function drawPart(pieces, at, cam, look, weight = 1, line) {
238
238
  const base = LOOKS[look];
239
- const style = { line: base.line, outline: base.outline * weight, feature: base.feature * weight, weld: base.weld * weight };
239
+ const style = { line: line ?? base.line, outline: base.outline * weight, feature: base.feature * weight, weld: base.weld * weight };
240
240
  const items = [];
241
241
  for (const piece of pieces) {
242
242
  if (piece.only === "mesh")
@@ -0,0 +1,15 @@
1
+ import { Group } from "three";
2
+ export declare class GroundKit {
3
+ readonly group: Group<import("three").Object3DEventMap>;
4
+ private pad;
5
+ private puffs;
6
+ private puffShape;
7
+ private puffMaterial;
8
+ private padMaterial;
9
+ constructor();
10
+ /** How wide the smoke stands, and how far the plain ground reaches to hold everything that lands on it, in metres. */
11
+ fit(radius: number, reach: number): void;
12
+ /** Where the ground stands, and how much smoke is on it. `seconds` is the smoke's own clock, when it may move. */
13
+ set(y: number, smoke: number, seconds: number): void;
14
+ dispose(): void;
15
+ }
@@ -0,0 +1,95 @@
1
+ // The ground under a flight, for the 3D view: a plain pad, and smoke and water standing on it, all a picture. One instanced draw of soft puffs, moved by numbers on the graphics card, so a flight makes it once and it costs nothing when it is out of the picture. No pad, tower or drone ship of any real place: those are to come.
2
+ import { BufferGeometry, CircleGeometry, DoubleSide, DynamicDrawUsage, Float32BufferAttribute, Group, InstancedMesh, Matrix4, Mesh, MeshBasicMaterial, Quaternion, ShaderMaterial, Vector3 } from "three";
3
+ const PUFFS = 44;
4
+ const WATER = 14;
5
+ const PUFF_VERTEX = /* glsl */ `
6
+ uniform float uSmoke;
7
+ uniform float uTime;
8
+ varying vec2 vCorner;
9
+ varying float vWater;
10
+ void main() {
11
+ vCorner = position.xy;
12
+ float id = float(gl_InstanceID);
13
+ vWater = step(${(PUFFS - WATER).toFixed(1)}, id);
14
+ float roll = fract(sin(id * 12.9898) * 43758.5453);
15
+ // each puff rolls outwards from the pad as the smoke grows; water stays low and close
16
+ float grow = mix(0.45 + 0.75 * uSmoke, 0.35 + 0.25 * uSmoke, vWater);
17
+ vec3 base = instanceMatrix[3].xyz;
18
+ vec3 where = vec3(base.x * grow, base.y * uSmoke + sin(uTime * 0.7 + roll * 6.28) * 0.04, base.z * grow);
19
+ vec4 middle = modelViewMatrix * vec4(where, 1.0);
20
+ middle.xy += position.xy * instanceMatrix[0][0] * (0.5 + uSmoke);
21
+ gl_Position = projectionMatrix * middle;
22
+ }`;
23
+ const PUFF_FRAGMENT = /* glsl */ `
24
+ uniform float uSmoke;
25
+ varying vec2 vCorner;
26
+ varying float vWater;
27
+ void main() {
28
+ float d = length(vCorner);
29
+ float alpha = smoothstep(1.0, 0.25, d) * mix(0.2, 0.3, vWater) * smoothstep(0.0, 0.25, uSmoke);
30
+ gl_FragColor = vec4(mix(vec3(0.78, 0.8, 0.83), vec3(0.82, 0.92, 1.0), vWater), alpha);
31
+ }`;
32
+ const scaleOf = new Vector3();
33
+ const atOf = new Vector3();
34
+ const none = new Quaternion();
35
+ const matrix = new Matrix4();
36
+ export class GroundKit {
37
+ group = new Group();
38
+ pad;
39
+ puffs;
40
+ puffShape;
41
+ puffMaterial;
42
+ padMaterial = new MeshBasicMaterial({ color: "#39424f", transparent: true, opacity: 0.55, side: DoubleSide, depthWrite: false });
43
+ constructor() {
44
+ this.group.name = "ground";
45
+ this.pad = new Mesh(new CircleGeometry(1, 48), this.padMaterial);
46
+ this.pad.rotation.x = -Math.PI / 2;
47
+ this.puffShape = new BufferGeometry();
48
+ this.puffShape.setAttribute("position", new Float32BufferAttribute([-1, -1, 0, 1, -1, 0, 1, 1, 0, -1, 1, 0], 3));
49
+ this.puffShape.setIndex([0, 1, 2, 0, 2, 3]);
50
+ this.puffMaterial = new ShaderMaterial({ vertexShader: PUFF_VERTEX, fragmentShader: PUFF_FRAGMENT, uniforms: { uSmoke: { value: 0 }, uTime: { value: 0 } }, transparent: true, depthWrite: false });
51
+ this.puffs = new InstancedMesh(this.puffShape, this.puffMaterial, PUFFS);
52
+ this.puffs.frustumCulled = false;
53
+ this.puffs.renderOrder = 2;
54
+ this.puffs.instanceMatrix.setUsage(DynamicDrawUsage);
55
+ // the same puffs every time: a fixed scatter, no clock and no random number
56
+ for (let i = 0; i < PUFFS; i++) {
57
+ const water = i >= PUFFS - WATER;
58
+ const a = i * 2.399963;
59
+ const r = water ? 0.55 + 0.1 * (i % 3) : 0.35 + ((i * 37) % 11) * 0.11;
60
+ const y = water ? 0.06 : 0.05 + ((i * 17) % 7) * 0.05;
61
+ const size = water ? 0.16 : 0.3 + ((i * 13) % 5) * 0.06;
62
+ this.puffs.setMatrixAt(i, matrix.compose(atOf.set(Math.cos(a) * r, y, Math.sin(a) * r), none, scaleOf.setScalar(size)));
63
+ }
64
+ this.group.add(this.pad, this.puffs);
65
+ this.group.visible = false;
66
+ }
67
+ /** How wide the smoke stands, and how far the plain ground reaches to hold everything that lands on it, in metres. */
68
+ fit(radius, reach) {
69
+ this.group.scale.setScalar(radius);
70
+ this.pad.scale.setScalar(Math.max(1, reach / radius));
71
+ // a puff stays round to the camera, so its size is not in the group's scale
72
+ for (let i = 0; i < PUFFS; i++) {
73
+ this.puffs.getMatrixAt(i, matrix);
74
+ const size = i >= PUFFS - WATER ? 0.16 : 0.3 + ((i * 13) % 5) * 0.06;
75
+ matrix.elements[0] = size * radius;
76
+ this.puffs.setMatrixAt(i, matrix);
77
+ }
78
+ this.puffs.instanceMatrix.needsUpdate = true;
79
+ }
80
+ /** Where the ground stands, and how much smoke is on it. `seconds` is the smoke's own clock, when it may move. */
81
+ set(y, smoke, seconds) {
82
+ this.group.position.y = y;
83
+ this.puffMaterial.uniforms.uSmoke.value = smoke;
84
+ this.puffMaterial.uniforms.uTime.value = seconds;
85
+ this.puffs.visible = smoke > 0.001;
86
+ }
87
+ dispose() {
88
+ this.group.removeFromParent();
89
+ this.pad.geometry.dispose();
90
+ this.padMaterial.dispose();
91
+ this.puffs.dispose();
92
+ this.puffShape.dispose();
93
+ this.puffMaterial.dispose();
94
+ }
95
+ }
@@ -0,0 +1,38 @@
1
+ import { BufferGeometry, Group, PointLight, ShaderMaterial } from "three";
2
+ import { type Bell } from "../engines.ts";
3
+ /** What burns in each engine's flame, as a picture: a fuel's flame is drawn in its own colours. */
4
+ export type Fuel = "methane" | "kerosene";
5
+ /** One part's flames: at most as many as it has bells. Its buffers are made once and written when the engines that burn change. */
6
+ export declare class PartPlumes {
7
+ readonly group: Group<import("three").Object3DEventMap>;
8
+ readonly bells: readonly Bell[];
9
+ private flames;
10
+ private glows;
11
+ private key;
12
+ constructor(kit: PlumeKit, bells: readonly Bell[]);
13
+ /** The bells that burn now. Nothing is written when they are the ones that burned last. */
14
+ light(burning: readonly Bell[]): void;
15
+ dispose(): void;
16
+ }
17
+ /** One set of everything a flame needs, for one viewer. */
18
+ export declare class PlumeKit {
19
+ readonly shape: BufferGeometry<import("three").NormalBufferAttributes, import("three").BufferGeometryEventMap>;
20
+ readonly quad: BufferGeometry<import("three").NormalBufferAttributes, import("three").BufferGeometryEventMap>;
21
+ readonly flame: ShaderMaterial;
22
+ readonly glow: ShaderMaterial;
23
+ /** The hull's own glow in the painted look. Always in the scene, at no strength when no engine burns, so lighting engines never makes the materials build again. */
24
+ readonly light: PointLight;
25
+ private uniforms;
26
+ constructor();
27
+ setLook(painted: boolean): void;
28
+ setFuel(fuel: Fuel): void;
29
+ /** 0 near the ground, 1 high up where a flame fans out. */
30
+ setAir(air: number): void;
31
+ /** Where the ground stands, for a flame to stop at. */
32
+ setFloor(y: number): void;
33
+ /** Many glows overlap: together they add up to about one bright ring, not a white disc. */
34
+ setBurning(count: number): void;
35
+ /** The flame's clock, in seconds, or `null` to hold it still. */
36
+ setTime(seconds: number | null): void;
37
+ dispose(): void;
38
+ }