@johnmorrisdotca/uchusen-rockets 0.8.0 → 0.10.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 (1562) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +19 -3
  3. package/dist/assets/fleet-02-fleet-02-apart.painted.svg +1 -0
  4. package/dist/assets/fleet-02-fleet-02-apart.svg +1 -0
  5. package/dist/assets/fleet-02-fleet-02-apart.thick.svg +1 -0
  6. package/dist/assets/fleet-02-fleet-02-attitude-thrusters.painted.svg +1 -0
  7. package/dist/assets/fleet-02-fleet-02-attitude-thrusters.svg +1 -0
  8. package/dist/assets/fleet-02-fleet-02-attitude-thrusters.thick.svg +1 -0
  9. package/dist/assets/fleet-02-fleet-02-cargo-1.painted.svg +1 -0
  10. package/dist/assets/fleet-02-fleet-02-cargo-1.svg +1 -0
  11. package/dist/assets/fleet-02-fleet-02-cargo-1.thick.svg +1 -0
  12. package/dist/assets/fleet-02-fleet-02-cargo-2.painted.svg +1 -0
  13. package/dist/assets/fleet-02-fleet-02-cargo-2.svg +1 -0
  14. package/dist/assets/fleet-02-fleet-02-cargo-2.thick.svg +1 -0
  15. package/dist/assets/fleet-02-fleet-02-cargo-3.painted.svg +1 -0
  16. package/dist/assets/fleet-02-fleet-02-cargo-3.svg +1 -0
  17. package/dist/assets/fleet-02-fleet-02-cargo-3.thick.svg +1 -0
  18. package/dist/assets/fleet-02-fleet-02-cargo-4.painted.svg +1 -0
  19. package/dist/assets/fleet-02-fleet-02-cargo-4.svg +1 -0
  20. package/dist/assets/fleet-02-fleet-02-cargo-4.thick.svg +1 -0
  21. package/dist/assets/fleet-02-fleet-02-cargo-inside.painted.svg +1 -0
  22. package/dist/assets/fleet-02-fleet-02-cargo-inside.svg +1 -0
  23. package/dist/assets/fleet-02-fleet-02-cargo-inside.thick.svg +1 -0
  24. package/dist/assets/fleet-02-fleet-02-command-bridge.painted.svg +1 -0
  25. package/dist/assets/fleet-02-fleet-02-command-bridge.svg +1 -0
  26. package/dist/assets/fleet-02-fleet-02-command-bridge.thick.svg +1 -0
  27. package/dist/assets/fleet-02-fleet-02-command-crew.painted.svg +1 -0
  28. package/dist/assets/fleet-02-fleet-02-command-crew.svg +1 -0
  29. package/dist/assets/fleet-02-fleet-02-command-crew.thick.svg +1 -0
  30. package/dist/assets/fleet-02-fleet-02-command-medbay.painted.svg +1 -0
  31. package/dist/assets/fleet-02-fleet-02-command-medbay.svg +1 -0
  32. package/dist/assets/fleet-02-fleet-02-command-medbay.thick.svg +1 -0
  33. package/dist/assets/fleet-02-fleet-02-command.painted.svg +1 -0
  34. package/dist/assets/fleet-02-fleet-02-command.svg +1 -0
  35. package/dist/assets/fleet-02-fleet-02-command.thick.svg +1 -0
  36. package/dist/assets/fleet-02-fleet-02-dock-hangar.painted.svg +1 -0
  37. package/dist/assets/fleet-02-fleet-02-dock-hangar.svg +1 -0
  38. package/dist/assets/fleet-02-fleet-02-dock-hangar.thick.svg +1 -0
  39. package/dist/assets/fleet-02-fleet-02-dock-works.painted.svg +1 -0
  40. package/dist/assets/fleet-02-fleet-02-dock-works.svg +1 -0
  41. package/dist/assets/fleet-02-fleet-02-dock-works.thick.svg +1 -0
  42. package/dist/assets/fleet-02-fleet-02-dock.painted.svg +1 -0
  43. package/dist/assets/fleet-02-fleet-02-dock.svg +1 -0
  44. package/dist/assets/fleet-02-fleet-02-dock.thick.svg +1 -0
  45. package/dist/assets/fleet-02-fleet-02-drive-engines.painted.svg +1 -0
  46. package/dist/assets/fleet-02-fleet-02-drive-engines.svg +1 -0
  47. package/dist/assets/fleet-02-fleet-02-drive-engines.thick.svg +1 -0
  48. package/dist/assets/fleet-02-fleet-02-drive.painted.svg +1 -0
  49. package/dist/assets/fleet-02-fleet-02-drive.svg +1 -0
  50. package/dist/assets/fleet-02-fleet-02-drive.thick.svg +1 -0
  51. package/dist/assets/fleet-02-fleet-02-farm-terrace-1.painted.svg +1 -0
  52. package/dist/assets/fleet-02-fleet-02-farm-terrace-1.svg +1 -0
  53. package/dist/assets/fleet-02-fleet-02-farm-terrace-1.thick.svg +1 -0
  54. package/dist/assets/fleet-02-fleet-02-farm-terrace-2.painted.svg +1 -0
  55. package/dist/assets/fleet-02-fleet-02-farm-terrace-2.svg +1 -0
  56. package/dist/assets/fleet-02-fleet-02-farm-terrace-2.thick.svg +1 -0
  57. package/dist/assets/fleet-02-fleet-02-farm-terrace-3.painted.svg +1 -0
  58. package/dist/assets/fleet-02-fleet-02-farm-terrace-3.svg +1 -0
  59. package/dist/assets/fleet-02-fleet-02-farm-terrace-3.thick.svg +1 -0
  60. package/dist/assets/fleet-02-fleet-02-farm.painted.svg +1 -0
  61. package/dist/assets/fleet-02-fleet-02-farm.svg +1 -0
  62. package/dist/assets/fleet-02-fleet-02-farm.thick.svg +1 -0
  63. package/dist/assets/fleet-02-fleet-02-habitat-a-deck-1.painted.svg +1 -0
  64. package/dist/assets/fleet-02-fleet-02-habitat-a-deck-1.svg +1 -0
  65. package/dist/assets/fleet-02-fleet-02-habitat-a-deck-1.thick.svg +1 -0
  66. package/dist/assets/fleet-02-fleet-02-habitat-a-deck-2.painted.svg +1 -0
  67. package/dist/assets/fleet-02-fleet-02-habitat-a-deck-2.svg +1 -0
  68. package/dist/assets/fleet-02-fleet-02-habitat-a-deck-2.thick.svg +1 -0
  69. package/dist/assets/fleet-02-fleet-02-habitat-a-deck-3.painted.svg +1 -0
  70. package/dist/assets/fleet-02-fleet-02-habitat-a-deck-3.svg +1 -0
  71. package/dist/assets/fleet-02-fleet-02-habitat-a-deck-3.thick.svg +1 -0
  72. package/dist/assets/fleet-02-fleet-02-habitat-a.painted.svg +1 -0
  73. package/dist/assets/fleet-02-fleet-02-habitat-a.svg +1 -0
  74. package/dist/assets/fleet-02-fleet-02-habitat-a.thick.svg +1 -0
  75. package/dist/assets/fleet-02-fleet-02-habitat-b-deck-1.painted.svg +1 -0
  76. package/dist/assets/fleet-02-fleet-02-habitat-b-deck-1.svg +1 -0
  77. package/dist/assets/fleet-02-fleet-02-habitat-b-deck-1.thick.svg +1 -0
  78. package/dist/assets/fleet-02-fleet-02-habitat-b-deck-2.painted.svg +1 -0
  79. package/dist/assets/fleet-02-fleet-02-habitat-b-deck-2.svg +1 -0
  80. package/dist/assets/fleet-02-fleet-02-habitat-b-deck-2.thick.svg +1 -0
  81. package/dist/assets/fleet-02-fleet-02-habitat-b-deck-3.painted.svg +1 -0
  82. package/dist/assets/fleet-02-fleet-02-habitat-b-deck-3.svg +1 -0
  83. package/dist/assets/fleet-02-fleet-02-habitat-b-deck-3.thick.svg +1 -0
  84. package/dist/assets/fleet-02-fleet-02-habitat-b.painted.svg +1 -0
  85. package/dist/assets/fleet-02-fleet-02-habitat-b.svg +1 -0
  86. package/dist/assets/fleet-02-fleet-02-habitat-b.thick.svg +1 -0
  87. package/dist/assets/fleet-02-fleet-02-header-tanks.painted.svg +1 -0
  88. package/dist/assets/fleet-02-fleet-02-header-tanks.svg +1 -0
  89. package/dist/assets/fleet-02-fleet-02-header-tanks.thick.svg +1 -0
  90. package/dist/assets/fleet-02-fleet-02-pod-ventral.painted.svg +1 -0
  91. package/dist/assets/fleet-02-fleet-02-pod-ventral.svg +1 -0
  92. package/dist/assets/fleet-02-fleet-02-pod-ventral.thick.svg +1 -0
  93. package/dist/assets/fleet-02-fleet-02-pod.painted.svg +1 -0
  94. package/dist/assets/fleet-02-fleet-02-pod.svg +1 -0
  95. package/dist/assets/fleet-02-fleet-02-pod.thick.svg +1 -0
  96. package/dist/assets/fleet-02-fleet-02-propellant-lines.painted.svg +1 -0
  97. package/dist/assets/fleet-02-fleet-02-propellant-lines.svg +1 -0
  98. package/dist/assets/fleet-02-fleet-02-propellant-lines.thick.svg +1 -0
  99. package/dist/assets/fleet-02-fleet-02-radiator-port.painted.svg +1 -0
  100. package/dist/assets/fleet-02-fleet-02-radiator-port.svg +1 -0
  101. package/dist/assets/fleet-02-fleet-02-radiator-port.thick.svg +1 -0
  102. package/dist/assets/fleet-02-fleet-02-radiator-starboard.painted.svg +1 -0
  103. package/dist/assets/fleet-02-fleet-02-radiator-starboard.svg +1 -0
  104. package/dist/assets/fleet-02-fleet-02-radiator-starboard.thick.svg +1 -0
  105. package/dist/assets/fleet-02-fleet-02-radiators-stowed.painted.svg +1 -0
  106. package/dist/assets/fleet-02-fleet-02-radiators-stowed.svg +1 -0
  107. package/dist/assets/fleet-02-fleet-02-radiators-stowed.thick.svg +1 -0
  108. package/dist/assets/fleet-02-fleet-02-reactor-inside.painted.svg +1 -0
  109. package/dist/assets/fleet-02-fleet-02-reactor-inside.svg +1 -0
  110. package/dist/assets/fleet-02-fleet-02-reactor-inside.thick.svg +1 -0
  111. package/dist/assets/fleet-02-fleet-02-reactor.painted.svg +1 -0
  112. package/dist/assets/fleet-02-fleet-02-reactor.svg +1 -0
  113. package/dist/assets/fleet-02-fleet-02-reactor.thick.svg +1 -0
  114. package/dist/assets/fleet-02-fleet-02-rescue-apart.painted.svg +1 -0
  115. package/dist/assets/fleet-02-fleet-02-rescue-apart.svg +1 -0
  116. package/dist/assets/fleet-02-fleet-02-rescue-apart.thick.svg +1 -0
  117. package/dist/assets/fleet-02-fleet-02-rescue-attitude-thrusters.painted.svg +1 -0
  118. package/dist/assets/fleet-02-fleet-02-rescue-attitude-thrusters.svg +1 -0
  119. package/dist/assets/fleet-02-fleet-02-rescue-attitude-thrusters.thick.svg +1 -0
  120. package/dist/assets/fleet-02-fleet-02-rescue-cargo-1.painted.svg +1 -0
  121. package/dist/assets/fleet-02-fleet-02-rescue-cargo-1.svg +1 -0
  122. package/dist/assets/fleet-02-fleet-02-rescue-cargo-1.thick.svg +1 -0
  123. package/dist/assets/fleet-02-fleet-02-rescue-cargo-2.painted.svg +1 -0
  124. package/dist/assets/fleet-02-fleet-02-rescue-cargo-2.svg +1 -0
  125. package/dist/assets/fleet-02-fleet-02-rescue-cargo-2.thick.svg +1 -0
  126. package/dist/assets/fleet-02-fleet-02-rescue-cargo-3.painted.svg +1 -0
  127. package/dist/assets/fleet-02-fleet-02-rescue-cargo-3.svg +1 -0
  128. package/dist/assets/fleet-02-fleet-02-rescue-cargo-3.thick.svg +1 -0
  129. package/dist/assets/fleet-02-fleet-02-rescue-cargo-4.painted.svg +1 -0
  130. package/dist/assets/fleet-02-fleet-02-rescue-cargo-4.svg +1 -0
  131. package/dist/assets/fleet-02-fleet-02-rescue-cargo-4.thick.svg +1 -0
  132. package/dist/assets/fleet-02-fleet-02-rescue-cargo-inside.painted.svg +1 -0
  133. package/dist/assets/fleet-02-fleet-02-rescue-cargo-inside.svg +1 -0
  134. package/dist/assets/fleet-02-fleet-02-rescue-cargo-inside.thick.svg +1 -0
  135. package/dist/assets/fleet-02-fleet-02-rescue-command-bridge.painted.svg +1 -0
  136. package/dist/assets/fleet-02-fleet-02-rescue-command-bridge.svg +1 -0
  137. package/dist/assets/fleet-02-fleet-02-rescue-command-bridge.thick.svg +1 -0
  138. package/dist/assets/fleet-02-fleet-02-rescue-command-crew.painted.svg +1 -0
  139. package/dist/assets/fleet-02-fleet-02-rescue-command-crew.svg +1 -0
  140. package/dist/assets/fleet-02-fleet-02-rescue-command-crew.thick.svg +1 -0
  141. package/dist/assets/fleet-02-fleet-02-rescue-command-medbay.painted.svg +1 -0
  142. package/dist/assets/fleet-02-fleet-02-rescue-command-medbay.svg +1 -0
  143. package/dist/assets/fleet-02-fleet-02-rescue-command-medbay.thick.svg +1 -0
  144. package/dist/assets/fleet-02-fleet-02-rescue-command.painted.svg +1 -0
  145. package/dist/assets/fleet-02-fleet-02-rescue-command.svg +1 -0
  146. package/dist/assets/fleet-02-fleet-02-rescue-command.thick.svg +1 -0
  147. package/dist/assets/fleet-02-fleet-02-rescue-dock-hangar.painted.svg +1 -0
  148. package/dist/assets/fleet-02-fleet-02-rescue-dock-hangar.svg +1 -0
  149. package/dist/assets/fleet-02-fleet-02-rescue-dock-hangar.thick.svg +1 -0
  150. package/dist/assets/fleet-02-fleet-02-rescue-dock-works.painted.svg +1 -0
  151. package/dist/assets/fleet-02-fleet-02-rescue-dock-works.svg +1 -0
  152. package/dist/assets/fleet-02-fleet-02-rescue-dock-works.thick.svg +1 -0
  153. package/dist/assets/fleet-02-fleet-02-rescue-dock.painted.svg +1 -0
  154. package/dist/assets/fleet-02-fleet-02-rescue-dock.svg +1 -0
  155. package/dist/assets/fleet-02-fleet-02-rescue-dock.thick.svg +1 -0
  156. package/dist/assets/fleet-02-fleet-02-rescue-drive-engines.painted.svg +1 -0
  157. package/dist/assets/fleet-02-fleet-02-rescue-drive-engines.svg +1 -0
  158. package/dist/assets/fleet-02-fleet-02-rescue-drive-engines.thick.svg +1 -0
  159. package/dist/assets/fleet-02-fleet-02-rescue-drive.painted.svg +1 -0
  160. package/dist/assets/fleet-02-fleet-02-rescue-drive.svg +1 -0
  161. package/dist/assets/fleet-02-fleet-02-rescue-drive.thick.svg +1 -0
  162. package/dist/assets/fleet-02-fleet-02-rescue-farm-terrace-1.painted.svg +1 -0
  163. package/dist/assets/fleet-02-fleet-02-rescue-farm-terrace-1.svg +1 -0
  164. package/dist/assets/fleet-02-fleet-02-rescue-farm-terrace-1.thick.svg +1 -0
  165. package/dist/assets/fleet-02-fleet-02-rescue-farm-terrace-2.painted.svg +1 -0
  166. package/dist/assets/fleet-02-fleet-02-rescue-farm-terrace-2.svg +1 -0
  167. package/dist/assets/fleet-02-fleet-02-rescue-farm-terrace-2.thick.svg +1 -0
  168. package/dist/assets/fleet-02-fleet-02-rescue-farm-terrace-3.painted.svg +1 -0
  169. package/dist/assets/fleet-02-fleet-02-rescue-farm-terrace-3.svg +1 -0
  170. package/dist/assets/fleet-02-fleet-02-rescue-farm-terrace-3.thick.svg +1 -0
  171. package/dist/assets/fleet-02-fleet-02-rescue-farm.painted.svg +1 -0
  172. package/dist/assets/fleet-02-fleet-02-rescue-farm.svg +1 -0
  173. package/dist/assets/fleet-02-fleet-02-rescue-farm.thick.svg +1 -0
  174. package/dist/assets/fleet-02-fleet-02-rescue-habitat-a-deck-1.painted.svg +1 -0
  175. package/dist/assets/fleet-02-fleet-02-rescue-habitat-a-deck-1.svg +1 -0
  176. package/dist/assets/fleet-02-fleet-02-rescue-habitat-a-deck-1.thick.svg +1 -0
  177. package/dist/assets/fleet-02-fleet-02-rescue-habitat-a-deck-2.painted.svg +1 -0
  178. package/dist/assets/fleet-02-fleet-02-rescue-habitat-a-deck-2.svg +1 -0
  179. package/dist/assets/fleet-02-fleet-02-rescue-habitat-a-deck-2.thick.svg +1 -0
  180. package/dist/assets/fleet-02-fleet-02-rescue-habitat-a-deck-3.painted.svg +1 -0
  181. package/dist/assets/fleet-02-fleet-02-rescue-habitat-a-deck-3.svg +1 -0
  182. package/dist/assets/fleet-02-fleet-02-rescue-habitat-a-deck-3.thick.svg +1 -0
  183. package/dist/assets/fleet-02-fleet-02-rescue-habitat-a.painted.svg +1 -0
  184. package/dist/assets/fleet-02-fleet-02-rescue-habitat-a.svg +1 -0
  185. package/dist/assets/fleet-02-fleet-02-rescue-habitat-a.thick.svg +1 -0
  186. package/dist/assets/fleet-02-fleet-02-rescue-habitat-b-deck-1.painted.svg +1 -0
  187. package/dist/assets/fleet-02-fleet-02-rescue-habitat-b-deck-1.svg +1 -0
  188. package/dist/assets/fleet-02-fleet-02-rescue-habitat-b-deck-1.thick.svg +1 -0
  189. package/dist/assets/fleet-02-fleet-02-rescue-habitat-b-deck-2.painted.svg +1 -0
  190. package/dist/assets/fleet-02-fleet-02-rescue-habitat-b-deck-2.svg +1 -0
  191. package/dist/assets/fleet-02-fleet-02-rescue-habitat-b-deck-2.thick.svg +1 -0
  192. package/dist/assets/fleet-02-fleet-02-rescue-habitat-b-deck-3.painted.svg +1 -0
  193. package/dist/assets/fleet-02-fleet-02-rescue-habitat-b-deck-3.svg +1 -0
  194. package/dist/assets/fleet-02-fleet-02-rescue-habitat-b-deck-3.thick.svg +1 -0
  195. package/dist/assets/fleet-02-fleet-02-rescue-habitat-b.painted.svg +1 -0
  196. package/dist/assets/fleet-02-fleet-02-rescue-habitat-b.svg +1 -0
  197. package/dist/assets/fleet-02-fleet-02-rescue-habitat-b.thick.svg +1 -0
  198. package/dist/assets/fleet-02-fleet-02-rescue-header-tanks.painted.svg +1 -0
  199. package/dist/assets/fleet-02-fleet-02-rescue-header-tanks.svg +1 -0
  200. package/dist/assets/fleet-02-fleet-02-rescue-header-tanks.thick.svg +1 -0
  201. package/dist/assets/fleet-02-fleet-02-rescue-pod-ventral.painted.svg +1 -0
  202. package/dist/assets/fleet-02-fleet-02-rescue-pod-ventral.svg +1 -0
  203. package/dist/assets/fleet-02-fleet-02-rescue-pod-ventral.thick.svg +1 -0
  204. package/dist/assets/fleet-02-fleet-02-rescue-pod.painted.svg +1 -0
  205. package/dist/assets/fleet-02-fleet-02-rescue-pod.svg +1 -0
  206. package/dist/assets/fleet-02-fleet-02-rescue-pod.thick.svg +1 -0
  207. package/dist/assets/fleet-02-fleet-02-rescue-propellant-lines.painted.svg +1 -0
  208. package/dist/assets/fleet-02-fleet-02-rescue-propellant-lines.svg +1 -0
  209. package/dist/assets/fleet-02-fleet-02-rescue-propellant-lines.thick.svg +1 -0
  210. package/dist/assets/fleet-02-fleet-02-rescue-radiator-port.painted.svg +1 -0
  211. package/dist/assets/fleet-02-fleet-02-rescue-radiator-port.svg +1 -0
  212. package/dist/assets/fleet-02-fleet-02-rescue-radiator-port.thick.svg +1 -0
  213. package/dist/assets/fleet-02-fleet-02-rescue-radiator-starboard.painted.svg +1 -0
  214. package/dist/assets/fleet-02-fleet-02-rescue-radiator-starboard.svg +1 -0
  215. package/dist/assets/fleet-02-fleet-02-rescue-radiator-starboard.thick.svg +1 -0
  216. package/dist/assets/fleet-02-fleet-02-rescue-radiators-stowed.painted.svg +1 -0
  217. package/dist/assets/fleet-02-fleet-02-rescue-radiators-stowed.svg +1 -0
  218. package/dist/assets/fleet-02-fleet-02-rescue-radiators-stowed.thick.svg +1 -0
  219. package/dist/assets/fleet-02-fleet-02-rescue-reactor-inside.painted.svg +1 -0
  220. package/dist/assets/fleet-02-fleet-02-rescue-reactor-inside.svg +1 -0
  221. package/dist/assets/fleet-02-fleet-02-rescue-reactor-inside.thick.svg +1 -0
  222. package/dist/assets/fleet-02-fleet-02-rescue-reactor.painted.svg +1 -0
  223. package/dist/assets/fleet-02-fleet-02-rescue-reactor.svg +1 -0
  224. package/dist/assets/fleet-02-fleet-02-rescue-reactor.thick.svg +1 -0
  225. package/dist/assets/fleet-02-fleet-02-rescue-shadow-shield.painted.svg +1 -0
  226. package/dist/assets/fleet-02-fleet-02-rescue-shadow-shield.svg +1 -0
  227. package/dist/assets/fleet-02-fleet-02-rescue-shadow-shield.thick.svg +1 -0
  228. package/dist/assets/fleet-02-fleet-02-rescue-shield.painted.svg +1 -0
  229. package/dist/assets/fleet-02-fleet-02-rescue-shield.svg +1 -0
  230. package/dist/assets/fleet-02-fleet-02-rescue-shield.thick.svg +1 -0
  231. package/dist/assets/fleet-02-fleet-02-rescue-spine.painted.svg +1 -0
  232. package/dist/assets/fleet-02-fleet-02-rescue-spine.svg +1 -0
  233. package/dist/assets/fleet-02-fleet-02-rescue-spine.thick.svg +1 -0
  234. package/dist/assets/fleet-02-fleet-02-rescue-tank-1.painted.svg +1 -0
  235. package/dist/assets/fleet-02-fleet-02-rescue-tank-1.svg +1 -0
  236. package/dist/assets/fleet-02-fleet-02-rescue-tank-1.thick.svg +1 -0
  237. package/dist/assets/fleet-02-fleet-02-rescue-tank-2.painted.svg +1 -0
  238. package/dist/assets/fleet-02-fleet-02-rescue-tank-2.svg +1 -0
  239. package/dist/assets/fleet-02-fleet-02-rescue-tank-2.thick.svg +1 -0
  240. package/dist/assets/fleet-02-fleet-02-rescue-tank-3.painted.svg +1 -0
  241. package/dist/assets/fleet-02-fleet-02-rescue-tank-3.svg +1 -0
  242. package/dist/assets/fleet-02-fleet-02-rescue-tank-3.thick.svg +1 -0
  243. package/dist/assets/fleet-02-fleet-02-rescue-tank-4.painted.svg +1 -0
  244. package/dist/assets/fleet-02-fleet-02-rescue-tank-4.svg +1 -0
  245. package/dist/assets/fleet-02-fleet-02-rescue-tank-4.thick.svg +1 -0
  246. package/dist/assets/fleet-02-fleet-02-rescue-tank-inside.painted.svg +1 -0
  247. package/dist/assets/fleet-02-fleet-02-rescue-tank-inside.svg +1 -0
  248. package/dist/assets/fleet-02-fleet-02-rescue-tank-inside.thick.svg +1 -0
  249. package/dist/assets/fleet-02-fleet-02-rescue-tip-port.painted.svg +1 -0
  250. package/dist/assets/fleet-02-fleet-02-rescue-tip-port.svg +1 -0
  251. package/dist/assets/fleet-02-fleet-02-rescue-tip-port.thick.svg +1 -0
  252. package/dist/assets/fleet-02-fleet-02-rescue-tip-starboard.painted.svg +1 -0
  253. package/dist/assets/fleet-02-fleet-02-rescue-tip-starboard.svg +1 -0
  254. package/dist/assets/fleet-02-fleet-02-rescue-tip-starboard.thick.svg +1 -0
  255. package/dist/assets/fleet-02-fleet-02-rescue-verniers.painted.svg +1 -0
  256. package/dist/assets/fleet-02-fleet-02-rescue-verniers.svg +1 -0
  257. package/dist/assets/fleet-02-fleet-02-rescue-verniers.thick.svg +1 -0
  258. package/dist/assets/fleet-02-fleet-02-rescue.painted.svg +1 -0
  259. package/dist/assets/fleet-02-fleet-02-rescue.svg +1 -0
  260. package/dist/assets/fleet-02-fleet-02-rescue.thick.svg +1 -0
  261. package/dist/assets/fleet-02-fleet-02-shadow-shield.painted.svg +1 -0
  262. package/dist/assets/fleet-02-fleet-02-shadow-shield.svg +1 -0
  263. package/dist/assets/fleet-02-fleet-02-shadow-shield.thick.svg +1 -0
  264. package/dist/assets/fleet-02-fleet-02-shield.painted.svg +1 -0
  265. package/dist/assets/fleet-02-fleet-02-shield.svg +1 -0
  266. package/dist/assets/fleet-02-fleet-02-shield.thick.svg +1 -0
  267. package/dist/assets/fleet-02-fleet-02-spine.painted.svg +1 -0
  268. package/dist/assets/fleet-02-fleet-02-spine.svg +1 -0
  269. package/dist/assets/fleet-02-fleet-02-spine.thick.svg +1 -0
  270. package/dist/assets/fleet-02-fleet-02-survey-apart.painted.svg +1 -0
  271. package/dist/assets/fleet-02-fleet-02-survey-apart.svg +1 -0
  272. package/dist/assets/fleet-02-fleet-02-survey-apart.thick.svg +1 -0
  273. package/dist/assets/fleet-02-fleet-02-survey-attitude-thrusters.painted.svg +1 -0
  274. package/dist/assets/fleet-02-fleet-02-survey-attitude-thrusters.svg +1 -0
  275. package/dist/assets/fleet-02-fleet-02-survey-attitude-thrusters.thick.svg +1 -0
  276. package/dist/assets/fleet-02-fleet-02-survey-cargo-1.painted.svg +1 -0
  277. package/dist/assets/fleet-02-fleet-02-survey-cargo-1.svg +1 -0
  278. package/dist/assets/fleet-02-fleet-02-survey-cargo-1.thick.svg +1 -0
  279. package/dist/assets/fleet-02-fleet-02-survey-cargo-2.painted.svg +1 -0
  280. package/dist/assets/fleet-02-fleet-02-survey-cargo-2.svg +1 -0
  281. package/dist/assets/fleet-02-fleet-02-survey-cargo-2.thick.svg +1 -0
  282. package/dist/assets/fleet-02-fleet-02-survey-cargo-3.painted.svg +1 -0
  283. package/dist/assets/fleet-02-fleet-02-survey-cargo-3.svg +1 -0
  284. package/dist/assets/fleet-02-fleet-02-survey-cargo-3.thick.svg +1 -0
  285. package/dist/assets/fleet-02-fleet-02-survey-cargo-4.painted.svg +1 -0
  286. package/dist/assets/fleet-02-fleet-02-survey-cargo-4.svg +1 -0
  287. package/dist/assets/fleet-02-fleet-02-survey-cargo-4.thick.svg +1 -0
  288. package/dist/assets/fleet-02-fleet-02-survey-cargo-inside.painted.svg +1 -0
  289. package/dist/assets/fleet-02-fleet-02-survey-cargo-inside.svg +1 -0
  290. package/dist/assets/fleet-02-fleet-02-survey-cargo-inside.thick.svg +1 -0
  291. package/dist/assets/fleet-02-fleet-02-survey-command-bridge.painted.svg +1 -0
  292. package/dist/assets/fleet-02-fleet-02-survey-command-bridge.svg +1 -0
  293. package/dist/assets/fleet-02-fleet-02-survey-command-bridge.thick.svg +1 -0
  294. package/dist/assets/fleet-02-fleet-02-survey-command-crew.painted.svg +1 -0
  295. package/dist/assets/fleet-02-fleet-02-survey-command-crew.svg +1 -0
  296. package/dist/assets/fleet-02-fleet-02-survey-command-crew.thick.svg +1 -0
  297. package/dist/assets/fleet-02-fleet-02-survey-command-medbay.painted.svg +1 -0
  298. package/dist/assets/fleet-02-fleet-02-survey-command-medbay.svg +1 -0
  299. package/dist/assets/fleet-02-fleet-02-survey-command-medbay.thick.svg +1 -0
  300. package/dist/assets/fleet-02-fleet-02-survey-command.painted.svg +1 -0
  301. package/dist/assets/fleet-02-fleet-02-survey-command.svg +1 -0
  302. package/dist/assets/fleet-02-fleet-02-survey-command.thick.svg +1 -0
  303. package/dist/assets/fleet-02-fleet-02-survey-dock-hangar.painted.svg +1 -0
  304. package/dist/assets/fleet-02-fleet-02-survey-dock-hangar.svg +1 -0
  305. package/dist/assets/fleet-02-fleet-02-survey-dock-hangar.thick.svg +1 -0
  306. package/dist/assets/fleet-02-fleet-02-survey-dock-works.painted.svg +1 -0
  307. package/dist/assets/fleet-02-fleet-02-survey-dock-works.svg +1 -0
  308. package/dist/assets/fleet-02-fleet-02-survey-dock-works.thick.svg +1 -0
  309. package/dist/assets/fleet-02-fleet-02-survey-dock.painted.svg +1 -0
  310. package/dist/assets/fleet-02-fleet-02-survey-dock.svg +1 -0
  311. package/dist/assets/fleet-02-fleet-02-survey-dock.thick.svg +1 -0
  312. package/dist/assets/fleet-02-fleet-02-survey-drive-engines.painted.svg +1 -0
  313. package/dist/assets/fleet-02-fleet-02-survey-drive-engines.svg +1 -0
  314. package/dist/assets/fleet-02-fleet-02-survey-drive-engines.thick.svg +1 -0
  315. package/dist/assets/fleet-02-fleet-02-survey-drive.painted.svg +1 -0
  316. package/dist/assets/fleet-02-fleet-02-survey-drive.svg +1 -0
  317. package/dist/assets/fleet-02-fleet-02-survey-drive.thick.svg +1 -0
  318. package/dist/assets/fleet-02-fleet-02-survey-farm-terrace-1.painted.svg +1 -0
  319. package/dist/assets/fleet-02-fleet-02-survey-farm-terrace-1.svg +1 -0
  320. package/dist/assets/fleet-02-fleet-02-survey-farm-terrace-1.thick.svg +1 -0
  321. package/dist/assets/fleet-02-fleet-02-survey-farm-terrace-2.painted.svg +1 -0
  322. package/dist/assets/fleet-02-fleet-02-survey-farm-terrace-2.svg +1 -0
  323. package/dist/assets/fleet-02-fleet-02-survey-farm-terrace-2.thick.svg +1 -0
  324. package/dist/assets/fleet-02-fleet-02-survey-farm-terrace-3.painted.svg +1 -0
  325. package/dist/assets/fleet-02-fleet-02-survey-farm-terrace-3.svg +1 -0
  326. package/dist/assets/fleet-02-fleet-02-survey-farm-terrace-3.thick.svg +1 -0
  327. package/dist/assets/fleet-02-fleet-02-survey-farm.painted.svg +1 -0
  328. package/dist/assets/fleet-02-fleet-02-survey-farm.svg +1 -0
  329. package/dist/assets/fleet-02-fleet-02-survey-farm.thick.svg +1 -0
  330. package/dist/assets/fleet-02-fleet-02-survey-habitat-a-deck-1.painted.svg +1 -0
  331. package/dist/assets/fleet-02-fleet-02-survey-habitat-a-deck-1.svg +1 -0
  332. package/dist/assets/fleet-02-fleet-02-survey-habitat-a-deck-1.thick.svg +1 -0
  333. package/dist/assets/fleet-02-fleet-02-survey-habitat-a-deck-2.painted.svg +1 -0
  334. package/dist/assets/fleet-02-fleet-02-survey-habitat-a-deck-2.svg +1 -0
  335. package/dist/assets/fleet-02-fleet-02-survey-habitat-a-deck-2.thick.svg +1 -0
  336. package/dist/assets/fleet-02-fleet-02-survey-habitat-a-deck-3.painted.svg +1 -0
  337. package/dist/assets/fleet-02-fleet-02-survey-habitat-a-deck-3.svg +1 -0
  338. package/dist/assets/fleet-02-fleet-02-survey-habitat-a-deck-3.thick.svg +1 -0
  339. package/dist/assets/fleet-02-fleet-02-survey-habitat-a.painted.svg +1 -0
  340. package/dist/assets/fleet-02-fleet-02-survey-habitat-a.svg +1 -0
  341. package/dist/assets/fleet-02-fleet-02-survey-habitat-a.thick.svg +1 -0
  342. package/dist/assets/fleet-02-fleet-02-survey-habitat-b-deck-1.painted.svg +1 -0
  343. package/dist/assets/fleet-02-fleet-02-survey-habitat-b-deck-1.svg +1 -0
  344. package/dist/assets/fleet-02-fleet-02-survey-habitat-b-deck-1.thick.svg +1 -0
  345. package/dist/assets/fleet-02-fleet-02-survey-habitat-b-deck-2.painted.svg +1 -0
  346. package/dist/assets/fleet-02-fleet-02-survey-habitat-b-deck-2.svg +1 -0
  347. package/dist/assets/fleet-02-fleet-02-survey-habitat-b-deck-2.thick.svg +1 -0
  348. package/dist/assets/fleet-02-fleet-02-survey-habitat-b-deck-3.painted.svg +1 -0
  349. package/dist/assets/fleet-02-fleet-02-survey-habitat-b-deck-3.svg +1 -0
  350. package/dist/assets/fleet-02-fleet-02-survey-habitat-b-deck-3.thick.svg +1 -0
  351. package/dist/assets/fleet-02-fleet-02-survey-habitat-b.painted.svg +1 -0
  352. package/dist/assets/fleet-02-fleet-02-survey-habitat-b.svg +1 -0
  353. package/dist/assets/fleet-02-fleet-02-survey-habitat-b.thick.svg +1 -0
  354. package/dist/assets/fleet-02-fleet-02-survey-header-tanks.painted.svg +1 -0
  355. package/dist/assets/fleet-02-fleet-02-survey-header-tanks.svg +1 -0
  356. package/dist/assets/fleet-02-fleet-02-survey-header-tanks.thick.svg +1 -0
  357. package/dist/assets/fleet-02-fleet-02-survey-pod-ventral.painted.svg +1 -0
  358. package/dist/assets/fleet-02-fleet-02-survey-pod-ventral.svg +1 -0
  359. package/dist/assets/fleet-02-fleet-02-survey-pod-ventral.thick.svg +1 -0
  360. package/dist/assets/fleet-02-fleet-02-survey-pod.painted.svg +1 -0
  361. package/dist/assets/fleet-02-fleet-02-survey-pod.svg +1 -0
  362. package/dist/assets/fleet-02-fleet-02-survey-pod.thick.svg +1 -0
  363. package/dist/assets/fleet-02-fleet-02-survey-propellant-lines.painted.svg +1 -0
  364. package/dist/assets/fleet-02-fleet-02-survey-propellant-lines.svg +1 -0
  365. package/dist/assets/fleet-02-fleet-02-survey-propellant-lines.thick.svg +1 -0
  366. package/dist/assets/fleet-02-fleet-02-survey-radiator-port.painted.svg +1 -0
  367. package/dist/assets/fleet-02-fleet-02-survey-radiator-port.svg +1 -0
  368. package/dist/assets/fleet-02-fleet-02-survey-radiator-port.thick.svg +1 -0
  369. package/dist/assets/fleet-02-fleet-02-survey-radiator-starboard.painted.svg +1 -0
  370. package/dist/assets/fleet-02-fleet-02-survey-radiator-starboard.svg +1 -0
  371. package/dist/assets/fleet-02-fleet-02-survey-radiator-starboard.thick.svg +1 -0
  372. package/dist/assets/fleet-02-fleet-02-survey-radiators-stowed.painted.svg +1 -0
  373. package/dist/assets/fleet-02-fleet-02-survey-radiators-stowed.svg +1 -0
  374. package/dist/assets/fleet-02-fleet-02-survey-radiators-stowed.thick.svg +1 -0
  375. package/dist/assets/fleet-02-fleet-02-survey-reactor-inside.painted.svg +1 -0
  376. package/dist/assets/fleet-02-fleet-02-survey-reactor-inside.svg +1 -0
  377. package/dist/assets/fleet-02-fleet-02-survey-reactor-inside.thick.svg +1 -0
  378. package/dist/assets/fleet-02-fleet-02-survey-reactor.painted.svg +1 -0
  379. package/dist/assets/fleet-02-fleet-02-survey-reactor.svg +1 -0
  380. package/dist/assets/fleet-02-fleet-02-survey-reactor.thick.svg +1 -0
  381. package/dist/assets/fleet-02-fleet-02-survey-shadow-shield.painted.svg +1 -0
  382. package/dist/assets/fleet-02-fleet-02-survey-shadow-shield.svg +1 -0
  383. package/dist/assets/fleet-02-fleet-02-survey-shadow-shield.thick.svg +1 -0
  384. package/dist/assets/fleet-02-fleet-02-survey-shield.painted.svg +1 -0
  385. package/dist/assets/fleet-02-fleet-02-survey-shield.svg +1 -0
  386. package/dist/assets/fleet-02-fleet-02-survey-shield.thick.svg +1 -0
  387. package/dist/assets/fleet-02-fleet-02-survey-spine.painted.svg +1 -0
  388. package/dist/assets/fleet-02-fleet-02-survey-spine.svg +1 -0
  389. package/dist/assets/fleet-02-fleet-02-survey-spine.thick.svg +1 -0
  390. package/dist/assets/fleet-02-fleet-02-survey-tank-1.painted.svg +1 -0
  391. package/dist/assets/fleet-02-fleet-02-survey-tank-1.svg +1 -0
  392. package/dist/assets/fleet-02-fleet-02-survey-tank-1.thick.svg +1 -0
  393. package/dist/assets/fleet-02-fleet-02-survey-tank-2.painted.svg +1 -0
  394. package/dist/assets/fleet-02-fleet-02-survey-tank-2.svg +1 -0
  395. package/dist/assets/fleet-02-fleet-02-survey-tank-2.thick.svg +1 -0
  396. package/dist/assets/fleet-02-fleet-02-survey-tank-3.painted.svg +1 -0
  397. package/dist/assets/fleet-02-fleet-02-survey-tank-3.svg +1 -0
  398. package/dist/assets/fleet-02-fleet-02-survey-tank-3.thick.svg +1 -0
  399. package/dist/assets/fleet-02-fleet-02-survey-tank-4.painted.svg +1 -0
  400. package/dist/assets/fleet-02-fleet-02-survey-tank-4.svg +1 -0
  401. package/dist/assets/fleet-02-fleet-02-survey-tank-4.thick.svg +1 -0
  402. package/dist/assets/fleet-02-fleet-02-survey-tank-inside.painted.svg +1 -0
  403. package/dist/assets/fleet-02-fleet-02-survey-tank-inside.svg +1 -0
  404. package/dist/assets/fleet-02-fleet-02-survey-tank-inside.thick.svg +1 -0
  405. package/dist/assets/fleet-02-fleet-02-survey-tip-port.painted.svg +1 -0
  406. package/dist/assets/fleet-02-fleet-02-survey-tip-port.svg +1 -0
  407. package/dist/assets/fleet-02-fleet-02-survey-tip-port.thick.svg +1 -0
  408. package/dist/assets/fleet-02-fleet-02-survey-tip-starboard.painted.svg +1 -0
  409. package/dist/assets/fleet-02-fleet-02-survey-tip-starboard.svg +1 -0
  410. package/dist/assets/fleet-02-fleet-02-survey-tip-starboard.thick.svg +1 -0
  411. package/dist/assets/fleet-02-fleet-02-survey-verniers.painted.svg +1 -0
  412. package/dist/assets/fleet-02-fleet-02-survey-verniers.svg +1 -0
  413. package/dist/assets/fleet-02-fleet-02-survey-verniers.thick.svg +1 -0
  414. package/dist/assets/fleet-02-fleet-02-survey.painted.svg +1 -0
  415. package/dist/assets/fleet-02-fleet-02-survey.svg +1 -0
  416. package/dist/assets/fleet-02-fleet-02-survey.thick.svg +1 -0
  417. package/dist/assets/fleet-02-fleet-02-tank-1.painted.svg +1 -0
  418. package/dist/assets/fleet-02-fleet-02-tank-1.svg +1 -0
  419. package/dist/assets/fleet-02-fleet-02-tank-1.thick.svg +1 -0
  420. package/dist/assets/fleet-02-fleet-02-tank-2.painted.svg +1 -0
  421. package/dist/assets/fleet-02-fleet-02-tank-2.svg +1 -0
  422. package/dist/assets/fleet-02-fleet-02-tank-2.thick.svg +1 -0
  423. package/dist/assets/fleet-02-fleet-02-tank-3.painted.svg +1 -0
  424. package/dist/assets/fleet-02-fleet-02-tank-3.svg +1 -0
  425. package/dist/assets/fleet-02-fleet-02-tank-3.thick.svg +1 -0
  426. package/dist/assets/fleet-02-fleet-02-tank-4.painted.svg +1 -0
  427. package/dist/assets/fleet-02-fleet-02-tank-4.svg +1 -0
  428. package/dist/assets/fleet-02-fleet-02-tank-4.thick.svg +1 -0
  429. package/dist/assets/fleet-02-fleet-02-tank-inside.painted.svg +1 -0
  430. package/dist/assets/fleet-02-fleet-02-tank-inside.svg +1 -0
  431. package/dist/assets/fleet-02-fleet-02-tank-inside.thick.svg +1 -0
  432. package/dist/assets/fleet-02-fleet-02-tanker-apart.painted.svg +1 -0
  433. package/dist/assets/fleet-02-fleet-02-tanker-apart.svg +1 -0
  434. package/dist/assets/fleet-02-fleet-02-tanker-apart.thick.svg +1 -0
  435. package/dist/assets/fleet-02-fleet-02-tanker-attitude-thrusters.painted.svg +1 -0
  436. package/dist/assets/fleet-02-fleet-02-tanker-attitude-thrusters.svg +1 -0
  437. package/dist/assets/fleet-02-fleet-02-tanker-attitude-thrusters.thick.svg +1 -0
  438. package/dist/assets/fleet-02-fleet-02-tanker-cargo-1.painted.svg +1 -0
  439. package/dist/assets/fleet-02-fleet-02-tanker-cargo-1.svg +1 -0
  440. package/dist/assets/fleet-02-fleet-02-tanker-cargo-1.thick.svg +1 -0
  441. package/dist/assets/fleet-02-fleet-02-tanker-cargo-2.painted.svg +1 -0
  442. package/dist/assets/fleet-02-fleet-02-tanker-cargo-2.svg +1 -0
  443. package/dist/assets/fleet-02-fleet-02-tanker-cargo-2.thick.svg +1 -0
  444. package/dist/assets/fleet-02-fleet-02-tanker-cargo-3.painted.svg +1 -0
  445. package/dist/assets/fleet-02-fleet-02-tanker-cargo-3.svg +1 -0
  446. package/dist/assets/fleet-02-fleet-02-tanker-cargo-3.thick.svg +1 -0
  447. package/dist/assets/fleet-02-fleet-02-tanker-cargo-4.painted.svg +1 -0
  448. package/dist/assets/fleet-02-fleet-02-tanker-cargo-4.svg +1 -0
  449. package/dist/assets/fleet-02-fleet-02-tanker-cargo-4.thick.svg +1 -0
  450. package/dist/assets/fleet-02-fleet-02-tanker-cargo-inside.painted.svg +1 -0
  451. package/dist/assets/fleet-02-fleet-02-tanker-cargo-inside.svg +1 -0
  452. package/dist/assets/fleet-02-fleet-02-tanker-cargo-inside.thick.svg +1 -0
  453. package/dist/assets/fleet-02-fleet-02-tanker-command-bridge.painted.svg +1 -0
  454. package/dist/assets/fleet-02-fleet-02-tanker-command-bridge.svg +1 -0
  455. package/dist/assets/fleet-02-fleet-02-tanker-command-bridge.thick.svg +1 -0
  456. package/dist/assets/fleet-02-fleet-02-tanker-command-crew.painted.svg +1 -0
  457. package/dist/assets/fleet-02-fleet-02-tanker-command-crew.svg +1 -0
  458. package/dist/assets/fleet-02-fleet-02-tanker-command-crew.thick.svg +1 -0
  459. package/dist/assets/fleet-02-fleet-02-tanker-command-medbay.painted.svg +1 -0
  460. package/dist/assets/fleet-02-fleet-02-tanker-command-medbay.svg +1 -0
  461. package/dist/assets/fleet-02-fleet-02-tanker-command-medbay.thick.svg +1 -0
  462. package/dist/assets/fleet-02-fleet-02-tanker-command.painted.svg +1 -0
  463. package/dist/assets/fleet-02-fleet-02-tanker-command.svg +1 -0
  464. package/dist/assets/fleet-02-fleet-02-tanker-command.thick.svg +1 -0
  465. package/dist/assets/fleet-02-fleet-02-tanker-dock-hangar.painted.svg +1 -0
  466. package/dist/assets/fleet-02-fleet-02-tanker-dock-hangar.svg +1 -0
  467. package/dist/assets/fleet-02-fleet-02-tanker-dock-hangar.thick.svg +1 -0
  468. package/dist/assets/fleet-02-fleet-02-tanker-dock-works.painted.svg +1 -0
  469. package/dist/assets/fleet-02-fleet-02-tanker-dock-works.svg +1 -0
  470. package/dist/assets/fleet-02-fleet-02-tanker-dock-works.thick.svg +1 -0
  471. package/dist/assets/fleet-02-fleet-02-tanker-dock.painted.svg +1 -0
  472. package/dist/assets/fleet-02-fleet-02-tanker-dock.svg +1 -0
  473. package/dist/assets/fleet-02-fleet-02-tanker-dock.thick.svg +1 -0
  474. package/dist/assets/fleet-02-fleet-02-tanker-drive-engines.painted.svg +1 -0
  475. package/dist/assets/fleet-02-fleet-02-tanker-drive-engines.svg +1 -0
  476. package/dist/assets/fleet-02-fleet-02-tanker-drive-engines.thick.svg +1 -0
  477. package/dist/assets/fleet-02-fleet-02-tanker-drive.painted.svg +1 -0
  478. package/dist/assets/fleet-02-fleet-02-tanker-drive.svg +1 -0
  479. package/dist/assets/fleet-02-fleet-02-tanker-drive.thick.svg +1 -0
  480. package/dist/assets/fleet-02-fleet-02-tanker-farm-terrace-1.painted.svg +1 -0
  481. package/dist/assets/fleet-02-fleet-02-tanker-farm-terrace-1.svg +1 -0
  482. package/dist/assets/fleet-02-fleet-02-tanker-farm-terrace-1.thick.svg +1 -0
  483. package/dist/assets/fleet-02-fleet-02-tanker-farm-terrace-2.painted.svg +1 -0
  484. package/dist/assets/fleet-02-fleet-02-tanker-farm-terrace-2.svg +1 -0
  485. package/dist/assets/fleet-02-fleet-02-tanker-farm-terrace-2.thick.svg +1 -0
  486. package/dist/assets/fleet-02-fleet-02-tanker-farm-terrace-3.painted.svg +1 -0
  487. package/dist/assets/fleet-02-fleet-02-tanker-farm-terrace-3.svg +1 -0
  488. package/dist/assets/fleet-02-fleet-02-tanker-farm-terrace-3.thick.svg +1 -0
  489. package/dist/assets/fleet-02-fleet-02-tanker-farm.painted.svg +1 -0
  490. package/dist/assets/fleet-02-fleet-02-tanker-farm.svg +1 -0
  491. package/dist/assets/fleet-02-fleet-02-tanker-farm.thick.svg +1 -0
  492. package/dist/assets/fleet-02-fleet-02-tanker-habitat-a-deck-1.painted.svg +1 -0
  493. package/dist/assets/fleet-02-fleet-02-tanker-habitat-a-deck-1.svg +1 -0
  494. package/dist/assets/fleet-02-fleet-02-tanker-habitat-a-deck-1.thick.svg +1 -0
  495. package/dist/assets/fleet-02-fleet-02-tanker-habitat-a-deck-2.painted.svg +1 -0
  496. package/dist/assets/fleet-02-fleet-02-tanker-habitat-a-deck-2.svg +1 -0
  497. package/dist/assets/fleet-02-fleet-02-tanker-habitat-a-deck-2.thick.svg +1 -0
  498. package/dist/assets/fleet-02-fleet-02-tanker-habitat-a-deck-3.painted.svg +1 -0
  499. package/dist/assets/fleet-02-fleet-02-tanker-habitat-a-deck-3.svg +1 -0
  500. package/dist/assets/fleet-02-fleet-02-tanker-habitat-a-deck-3.thick.svg +1 -0
  501. package/dist/assets/fleet-02-fleet-02-tanker-habitat-a.painted.svg +1 -0
  502. package/dist/assets/fleet-02-fleet-02-tanker-habitat-a.svg +1 -0
  503. package/dist/assets/fleet-02-fleet-02-tanker-habitat-a.thick.svg +1 -0
  504. package/dist/assets/fleet-02-fleet-02-tanker-habitat-b-deck-1.painted.svg +1 -0
  505. package/dist/assets/fleet-02-fleet-02-tanker-habitat-b-deck-1.svg +1 -0
  506. package/dist/assets/fleet-02-fleet-02-tanker-habitat-b-deck-1.thick.svg +1 -0
  507. package/dist/assets/fleet-02-fleet-02-tanker-habitat-b-deck-2.painted.svg +1 -0
  508. package/dist/assets/fleet-02-fleet-02-tanker-habitat-b-deck-2.svg +1 -0
  509. package/dist/assets/fleet-02-fleet-02-tanker-habitat-b-deck-2.thick.svg +1 -0
  510. package/dist/assets/fleet-02-fleet-02-tanker-habitat-b-deck-3.painted.svg +1 -0
  511. package/dist/assets/fleet-02-fleet-02-tanker-habitat-b-deck-3.svg +1 -0
  512. package/dist/assets/fleet-02-fleet-02-tanker-habitat-b-deck-3.thick.svg +1 -0
  513. package/dist/assets/fleet-02-fleet-02-tanker-habitat-b.painted.svg +1 -0
  514. package/dist/assets/fleet-02-fleet-02-tanker-habitat-b.svg +1 -0
  515. package/dist/assets/fleet-02-fleet-02-tanker-habitat-b.thick.svg +1 -0
  516. package/dist/assets/fleet-02-fleet-02-tanker-header-tanks.painted.svg +1 -0
  517. package/dist/assets/fleet-02-fleet-02-tanker-header-tanks.svg +1 -0
  518. package/dist/assets/fleet-02-fleet-02-tanker-header-tanks.thick.svg +1 -0
  519. package/dist/assets/fleet-02-fleet-02-tanker-pod-ventral.painted.svg +1 -0
  520. package/dist/assets/fleet-02-fleet-02-tanker-pod-ventral.svg +1 -0
  521. package/dist/assets/fleet-02-fleet-02-tanker-pod-ventral.thick.svg +1 -0
  522. package/dist/assets/fleet-02-fleet-02-tanker-pod.painted.svg +1 -0
  523. package/dist/assets/fleet-02-fleet-02-tanker-pod.svg +1 -0
  524. package/dist/assets/fleet-02-fleet-02-tanker-pod.thick.svg +1 -0
  525. package/dist/assets/fleet-02-fleet-02-tanker-propellant-lines.painted.svg +1 -0
  526. package/dist/assets/fleet-02-fleet-02-tanker-propellant-lines.svg +1 -0
  527. package/dist/assets/fleet-02-fleet-02-tanker-propellant-lines.thick.svg +1 -0
  528. package/dist/assets/fleet-02-fleet-02-tanker-radiator-port.painted.svg +1 -0
  529. package/dist/assets/fleet-02-fleet-02-tanker-radiator-port.svg +1 -0
  530. package/dist/assets/fleet-02-fleet-02-tanker-radiator-port.thick.svg +1 -0
  531. package/dist/assets/fleet-02-fleet-02-tanker-radiator-starboard.painted.svg +1 -0
  532. package/dist/assets/fleet-02-fleet-02-tanker-radiator-starboard.svg +1 -0
  533. package/dist/assets/fleet-02-fleet-02-tanker-radiator-starboard.thick.svg +1 -0
  534. package/dist/assets/fleet-02-fleet-02-tanker-radiators-stowed.painted.svg +1 -0
  535. package/dist/assets/fleet-02-fleet-02-tanker-radiators-stowed.svg +1 -0
  536. package/dist/assets/fleet-02-fleet-02-tanker-radiators-stowed.thick.svg +1 -0
  537. package/dist/assets/fleet-02-fleet-02-tanker-reactor-inside.painted.svg +1 -0
  538. package/dist/assets/fleet-02-fleet-02-tanker-reactor-inside.svg +1 -0
  539. package/dist/assets/fleet-02-fleet-02-tanker-reactor-inside.thick.svg +1 -0
  540. package/dist/assets/fleet-02-fleet-02-tanker-reactor.painted.svg +1 -0
  541. package/dist/assets/fleet-02-fleet-02-tanker-reactor.svg +1 -0
  542. package/dist/assets/fleet-02-fleet-02-tanker-reactor.thick.svg +1 -0
  543. package/dist/assets/fleet-02-fleet-02-tanker-shadow-shield.painted.svg +1 -0
  544. package/dist/assets/fleet-02-fleet-02-tanker-shadow-shield.svg +1 -0
  545. package/dist/assets/fleet-02-fleet-02-tanker-shadow-shield.thick.svg +1 -0
  546. package/dist/assets/fleet-02-fleet-02-tanker-shield.painted.svg +1 -0
  547. package/dist/assets/fleet-02-fleet-02-tanker-shield.svg +1 -0
  548. package/dist/assets/fleet-02-fleet-02-tanker-shield.thick.svg +1 -0
  549. package/dist/assets/fleet-02-fleet-02-tanker-spine.painted.svg +1 -0
  550. package/dist/assets/fleet-02-fleet-02-tanker-spine.svg +1 -0
  551. package/dist/assets/fleet-02-fleet-02-tanker-spine.thick.svg +1 -0
  552. package/dist/assets/fleet-02-fleet-02-tanker-tank-1.painted.svg +1 -0
  553. package/dist/assets/fleet-02-fleet-02-tanker-tank-1.svg +1 -0
  554. package/dist/assets/fleet-02-fleet-02-tanker-tank-1.thick.svg +1 -0
  555. package/dist/assets/fleet-02-fleet-02-tanker-tank-2.painted.svg +1 -0
  556. package/dist/assets/fleet-02-fleet-02-tanker-tank-2.svg +1 -0
  557. package/dist/assets/fleet-02-fleet-02-tanker-tank-2.thick.svg +1 -0
  558. package/dist/assets/fleet-02-fleet-02-tanker-tank-3.painted.svg +1 -0
  559. package/dist/assets/fleet-02-fleet-02-tanker-tank-3.svg +1 -0
  560. package/dist/assets/fleet-02-fleet-02-tanker-tank-3.thick.svg +1 -0
  561. package/dist/assets/fleet-02-fleet-02-tanker-tank-4.painted.svg +1 -0
  562. package/dist/assets/fleet-02-fleet-02-tanker-tank-4.svg +1 -0
  563. package/dist/assets/fleet-02-fleet-02-tanker-tank-4.thick.svg +1 -0
  564. package/dist/assets/fleet-02-fleet-02-tanker-tank-inside.painted.svg +1 -0
  565. package/dist/assets/fleet-02-fleet-02-tanker-tank-inside.svg +1 -0
  566. package/dist/assets/fleet-02-fleet-02-tanker-tank-inside.thick.svg +1 -0
  567. package/dist/assets/fleet-02-fleet-02-tanker-tip-port.painted.svg +1 -0
  568. package/dist/assets/fleet-02-fleet-02-tanker-tip-port.svg +1 -0
  569. package/dist/assets/fleet-02-fleet-02-tanker-tip-port.thick.svg +1 -0
  570. package/dist/assets/fleet-02-fleet-02-tanker-tip-starboard.painted.svg +1 -0
  571. package/dist/assets/fleet-02-fleet-02-tanker-tip-starboard.svg +1 -0
  572. package/dist/assets/fleet-02-fleet-02-tanker-tip-starboard.thick.svg +1 -0
  573. package/dist/assets/fleet-02-fleet-02-tanker-verniers.painted.svg +1 -0
  574. package/dist/assets/fleet-02-fleet-02-tanker-verniers.svg +1 -0
  575. package/dist/assets/fleet-02-fleet-02-tanker-verniers.thick.svg +1 -0
  576. package/dist/assets/fleet-02-fleet-02-tanker.painted.svg +1 -0
  577. package/dist/assets/fleet-02-fleet-02-tanker.svg +1 -0
  578. package/dist/assets/fleet-02-fleet-02-tanker.thick.svg +1 -0
  579. package/dist/assets/fleet-02-fleet-02-tip-port.painted.svg +1 -0
  580. package/dist/assets/fleet-02-fleet-02-tip-port.svg +1 -0
  581. package/dist/assets/fleet-02-fleet-02-tip-port.thick.svg +1 -0
  582. package/dist/assets/fleet-02-fleet-02-tip-starboard.painted.svg +1 -0
  583. package/dist/assets/fleet-02-fleet-02-tip-starboard.svg +1 -0
  584. package/dist/assets/fleet-02-fleet-02-tip-starboard.thick.svg +1 -0
  585. package/dist/assets/fleet-02-fleet-02-verniers.painted.svg +1 -0
  586. package/dist/assets/fleet-02-fleet-02-verniers.svg +1 -0
  587. package/dist/assets/fleet-02-fleet-02-verniers.thick.svg +1 -0
  588. package/dist/assets/fleet-02-fleet-02.painted.svg +1 -0
  589. package/dist/assets/fleet-02-fleet-02.svg +1 -0
  590. package/dist/assets/fleet-02-fleet-02.thick.svg +1 -0
  591. package/dist/assets/fleet-cargo-cargo-bay-4.painted.svg +1 -0
  592. package/dist/assets/fleet-cargo-cargo-bay-4.svg +1 -0
  593. package/dist/assets/fleet-cargo-cargo-bay-4.thick.svg +1 -0
  594. package/dist/assets/fleet-cargo-container-12-cold-cutaway.painted.svg +1 -0
  595. package/dist/assets/fleet-cargo-container-12-cold-cutaway.svg +1 -0
  596. package/dist/assets/fleet-cargo-container-12-cold-cutaway.thick.svg +1 -0
  597. package/dist/assets/fleet-cargo-container-12-cold.painted.svg +1 -0
  598. package/dist/assets/fleet-cargo-container-12-cold.svg +1 -0
  599. package/dist/assets/fleet-cargo-container-12-cold.thick.svg +1 -0
  600. package/dist/assets/fleet-cargo-container-12-cutaway.painted.svg +1 -0
  601. package/dist/assets/fleet-cargo-container-12-cutaway.svg +1 -0
  602. package/dist/assets/fleet-cargo-container-12-cutaway.thick.svg +1 -0
  603. package/dist/assets/fleet-cargo-container-12.painted.svg +1 -0
  604. package/dist/assets/fleet-cargo-container-12.svg +1 -0
  605. package/dist/assets/fleet-cargo-container-12.thick.svg +1 -0
  606. package/dist/assets/fleet-decks-common-area-m-cutaway.painted.svg +1 -0
  607. package/dist/assets/fleet-decks-common-area-m-cutaway.svg +1 -0
  608. package/dist/assets/fleet-decks-common-area-m-cutaway.thick.svg +1 -0
  609. package/dist/assets/fleet-decks-common-area-m.painted.svg +1 -0
  610. package/dist/assets/fleet-decks-common-area-m.svg +1 -0
  611. package/dist/assets/fleet-decks-common-area-m.thick.svg +1 -0
  612. package/dist/assets/fleet-decks-dome-observation-m-cutaway.painted.svg +1 -0
  613. package/dist/assets/fleet-decks-dome-observation-m-cutaway.svg +1 -0
  614. package/dist/assets/fleet-decks-dome-observation-m-cutaway.thick.svg +1 -0
  615. package/dist/assets/fleet-decks-dome-observation-m.painted.svg +1 -0
  616. package/dist/assets/fleet-decks-dome-observation-m.svg +1 -0
  617. package/dist/assets/fleet-decks-dome-observation-m.thick.svg +1 -0
  618. package/dist/assets/fleet-decks-eva-lock-m-cutaway.painted.svg +1 -0
  619. package/dist/assets/fleet-decks-eva-lock-m-cutaway.svg +1 -0
  620. package/dist/assets/fleet-decks-eva-lock-m-cutaway.thick.svg +1 -0
  621. package/dist/assets/fleet-decks-eva-lock-m.painted.svg +1 -0
  622. package/dist/assets/fleet-decks-eva-lock-m.svg +1 -0
  623. package/dist/assets/fleet-decks-eva-lock-m.thick.svg +1 -0
  624. package/dist/assets/fleet-decks-farm-drum-cutaway.painted.svg +1 -0
  625. package/dist/assets/fleet-decks-farm-drum-cutaway.svg +1 -0
  626. package/dist/assets/fleet-decks-farm-drum-cutaway.thick.svg +1 -0
  627. package/dist/assets/fleet-decks-farm-drum.painted.svg +1 -0
  628. package/dist/assets/fleet-decks-farm-drum.svg +1 -0
  629. package/dist/assets/fleet-decks-farm-drum.thick.svg +1 -0
  630. package/dist/assets/fleet-decks-solarium-m-cutaway.painted.svg +1 -0
  631. package/dist/assets/fleet-decks-solarium-m-cutaway.svg +1 -0
  632. package/dist/assets/fleet-decks-solarium-m-cutaway.thick.svg +1 -0
  633. package/dist/assets/fleet-decks-solarium-m.painted.svg +1 -0
  634. package/dist/assets/fleet-decks-solarium-m.svg +1 -0
  635. package/dist/assets/fleet-decks-solarium-m.thick.svg +1 -0
  636. package/dist/assets/fleet-decks-store-drum-m-cutaway.painted.svg +1 -0
  637. package/dist/assets/fleet-decks-store-drum-m-cutaway.svg +1 -0
  638. package/dist/assets/fleet-decks-store-drum-m-cutaway.thick.svg +1 -0
  639. package/dist/assets/fleet-decks-store-drum-m.painted.svg +1 -0
  640. package/dist/assets/fleet-decks-store-drum-m.svg +1 -0
  641. package/dist/assets/fleet-decks-store-drum-m.thick.svg +1 -0
  642. package/dist/assets/fleet-engines-engine-fusion-1.painted.svg +1 -0
  643. package/dist/assets/fleet-engines-engine-fusion-1.svg +1 -0
  644. package/dist/assets/fleet-engines-engine-fusion-1.thick.svg +1 -0
  645. package/dist/assets/fleet-engines-engine-fusion-3.painted.svg +1 -0
  646. package/dist/assets/fleet-engines-engine-fusion-3.svg +1 -0
  647. package/dist/assets/fleet-engines-engine-fusion-3.thick.svg +1 -0
  648. package/dist/assets/fleet-engines-engine-fusion-4.painted.svg +1 -0
  649. package/dist/assets/fleet-engines-engine-fusion-4.svg +1 -0
  650. package/dist/assets/fleet-engines-engine-fusion-4.thick.svg +1 -0
  651. package/dist/assets/fleet-engines-engine-fusion-7.painted.svg +1 -0
  652. package/dist/assets/fleet-engines-engine-fusion-7.svg +1 -0
  653. package/dist/assets/fleet-engines-engine-fusion-7.thick.svg +1 -0
  654. package/dist/assets/fleet-engines-rcs-ring-m.painted.svg +1 -0
  655. package/dist/assets/fleet-engines-rcs-ring-m.svg +1 -0
  656. package/dist/assets/fleet-engines-rcs-ring-m.thick.svg +1 -0
  657. package/dist/assets/fleet-engines-thruster-pod-s.painted.svg +1 -0
  658. package/dist/assets/fleet-engines-thruster-pod-s.svg +1 -0
  659. package/dist/assets/fleet-engines-thruster-pod-s.thick.svg +1 -0
  660. package/dist/assets/fleet-habitats-habitat-drum-crew-cutaway.painted.svg +1 -0
  661. package/dist/assets/fleet-habitats-habitat-drum-crew-cutaway.svg +1 -0
  662. package/dist/assets/fleet-habitats-habitat-drum-crew-cutaway.thick.svg +1 -0
  663. package/dist/assets/fleet-habitats-habitat-drum-crew.painted.svg +1 -0
  664. package/dist/assets/fleet-habitats-habitat-drum-crew.svg +1 -0
  665. package/dist/assets/fleet-habitats-habitat-drum-crew.thick.svg +1 -0
  666. package/dist/assets/fleet-habitats-habitat-drum-large-cutaway.painted.svg +1 -0
  667. package/dist/assets/fleet-habitats-habitat-drum-large-cutaway.svg +1 -0
  668. package/dist/assets/fleet-habitats-habitat-drum-large-cutaway.thick.svg +1 -0
  669. package/dist/assets/fleet-habitats-habitat-drum-large.painted.svg +1 -0
  670. package/dist/assets/fleet-habitats-habitat-drum-large.svg +1 -0
  671. package/dist/assets/fleet-habitats-habitat-drum-large.thick.svg +1 -0
  672. package/dist/assets/fleet-habitats-habitat-ring-16-cutaway.painted.svg +1 -0
  673. package/dist/assets/fleet-habitats-habitat-ring-16-cutaway.svg +1 -0
  674. package/dist/assets/fleet-habitats-habitat-ring-16-cutaway.thick.svg +1 -0
  675. package/dist/assets/fleet-habitats-habitat-ring-16.painted.svg +1 -0
  676. package/dist/assets/fleet-habitats-habitat-ring-16.svg +1 -0
  677. package/dist/assets/fleet-habitats-habitat-ring-16.thick.svg +1 -0
  678. package/dist/assets/fleet-habitats-habitat-ring-30-cutaway.painted.svg +1 -0
  679. package/dist/assets/fleet-habitats-habitat-ring-30-cutaway.svg +1 -0
  680. package/dist/assets/fleet-habitats-habitat-ring-30-cutaway.thick.svg +1 -0
  681. package/dist/assets/fleet-habitats-habitat-ring-30.painted.svg +1 -0
  682. package/dist/assets/fleet-habitats-habitat-ring-30.svg +1 -0
  683. package/dist/assets/fleet-habitats-habitat-ring-30.thick.svg +1 -0
  684. package/dist/assets/fleet-insets-docking-port-apart.painted.svg +1 -0
  685. package/dist/assets/fleet-insets-docking-port-apart.svg +1 -0
  686. package/dist/assets/fleet-insets-docking-port-apart.thick.svg +1 -0
  687. package/dist/assets/fleet-insets-docking-port-part-1.painted.svg +1 -0
  688. package/dist/assets/fleet-insets-docking-port-part-1.svg +1 -0
  689. package/dist/assets/fleet-insets-docking-port-part-1.thick.svg +1 -0
  690. package/dist/assets/fleet-insets-docking-port-part-2.painted.svg +1 -0
  691. package/dist/assets/fleet-insets-docking-port-part-2.svg +1 -0
  692. package/dist/assets/fleet-insets-docking-port-part-2.thick.svg +1 -0
  693. package/dist/assets/fleet-insets-docking-port-part-3.painted.svg +1 -0
  694. package/dist/assets/fleet-insets-docking-port-part-3.svg +1 -0
  695. package/dist/assets/fleet-insets-docking-port-part-3.thick.svg +1 -0
  696. package/dist/assets/fleet-insets-docking-port-part-4.painted.svg +1 -0
  697. package/dist/assets/fleet-insets-docking-port-part-4.svg +1 -0
  698. package/dist/assets/fleet-insets-docking-port-part-4.thick.svg +1 -0
  699. package/dist/assets/fleet-insets-docking-port-part-5.painted.svg +1 -0
  700. package/dist/assets/fleet-insets-docking-port-part-5.svg +1 -0
  701. package/dist/assets/fleet-insets-docking-port-part-5.thick.svg +1 -0
  702. package/dist/assets/fleet-insets-docking-port.painted.svg +1 -0
  703. package/dist/assets/fleet-insets-docking-port.svg +1 -0
  704. package/dist/assets/fleet-insets-docking-port.thick.svg +1 -0
  705. package/dist/assets/fleet-insets-life-support-apart.painted.svg +1 -0
  706. package/dist/assets/fleet-insets-life-support-apart.svg +1 -0
  707. package/dist/assets/fleet-insets-life-support-apart.thick.svg +1 -0
  708. package/dist/assets/fleet-insets-life-support-part-1.painted.svg +1 -0
  709. package/dist/assets/fleet-insets-life-support-part-1.svg +1 -0
  710. package/dist/assets/fleet-insets-life-support-part-1.thick.svg +1 -0
  711. package/dist/assets/fleet-insets-life-support-part-2.painted.svg +1 -0
  712. package/dist/assets/fleet-insets-life-support-part-2.svg +1 -0
  713. package/dist/assets/fleet-insets-life-support-part-2.thick.svg +1 -0
  714. package/dist/assets/fleet-insets-life-support-part-3.painted.svg +1 -0
  715. package/dist/assets/fleet-insets-life-support-part-3.svg +1 -0
  716. package/dist/assets/fleet-insets-life-support-part-3.thick.svg +1 -0
  717. package/dist/assets/fleet-insets-life-support-part-4.painted.svg +1 -0
  718. package/dist/assets/fleet-insets-life-support-part-4.svg +1 -0
  719. package/dist/assets/fleet-insets-life-support-part-4.thick.svg +1 -0
  720. package/dist/assets/fleet-insets-life-support-part-5.painted.svg +1 -0
  721. package/dist/assets/fleet-insets-life-support-part-5.svg +1 -0
  722. package/dist/assets/fleet-insets-life-support-part-5.thick.svg +1 -0
  723. package/dist/assets/fleet-insets-life-support-part-6.painted.svg +1 -0
  724. package/dist/assets/fleet-insets-life-support-part-6.svg +1 -0
  725. package/dist/assets/fleet-insets-life-support-part-6.thick.svg +1 -0
  726. package/dist/assets/fleet-insets-life-support.painted.svg +1 -0
  727. package/dist/assets/fleet-insets-life-support.svg +1 -0
  728. package/dist/assets/fleet-insets-life-support.thick.svg +1 -0
  729. package/dist/assets/fleet-insets-nav-sensors-apart.painted.svg +1 -0
  730. package/dist/assets/fleet-insets-nav-sensors-apart.svg +1 -0
  731. package/dist/assets/fleet-insets-nav-sensors-apart.thick.svg +1 -0
  732. package/dist/assets/fleet-insets-nav-sensors-part-1.painted.svg +1 -0
  733. package/dist/assets/fleet-insets-nav-sensors-part-1.svg +1 -0
  734. package/dist/assets/fleet-insets-nav-sensors-part-1.thick.svg +1 -0
  735. package/dist/assets/fleet-insets-nav-sensors-part-2.painted.svg +1 -0
  736. package/dist/assets/fleet-insets-nav-sensors-part-2.svg +1 -0
  737. package/dist/assets/fleet-insets-nav-sensors-part-2.thick.svg +1 -0
  738. package/dist/assets/fleet-insets-nav-sensors-part-3.painted.svg +1 -0
  739. package/dist/assets/fleet-insets-nav-sensors-part-3.svg +1 -0
  740. package/dist/assets/fleet-insets-nav-sensors-part-3.thick.svg +1 -0
  741. package/dist/assets/fleet-insets-nav-sensors-part-4.painted.svg +1 -0
  742. package/dist/assets/fleet-insets-nav-sensors-part-4.svg +1 -0
  743. package/dist/assets/fleet-insets-nav-sensors-part-4.thick.svg +1 -0
  744. package/dist/assets/fleet-insets-nav-sensors-part-5.painted.svg +1 -0
  745. package/dist/assets/fleet-insets-nav-sensors-part-5.svg +1 -0
  746. package/dist/assets/fleet-insets-nav-sensors-part-5.thick.svg +1 -0
  747. package/dist/assets/fleet-insets-nav-sensors-part-6.painted.svg +1 -0
  748. package/dist/assets/fleet-insets-nav-sensors-part-6.svg +1 -0
  749. package/dist/assets/fleet-insets-nav-sensors-part-6.thick.svg +1 -0
  750. package/dist/assets/fleet-insets-nav-sensors.painted.svg +1 -0
  751. package/dist/assets/fleet-insets-nav-sensors.svg +1 -0
  752. package/dist/assets/fleet-insets-nav-sensors.thick.svg +1 -0
  753. package/dist/assets/fleet-insets-reactor-core-apart.painted.svg +1 -0
  754. package/dist/assets/fleet-insets-reactor-core-apart.svg +1 -0
  755. package/dist/assets/fleet-insets-reactor-core-apart.thick.svg +1 -0
  756. package/dist/assets/fleet-insets-reactor-core-part-1.painted.svg +1 -0
  757. package/dist/assets/fleet-insets-reactor-core-part-1.svg +1 -0
  758. package/dist/assets/fleet-insets-reactor-core-part-1.thick.svg +1 -0
  759. package/dist/assets/fleet-insets-reactor-core-part-2.painted.svg +1 -0
  760. package/dist/assets/fleet-insets-reactor-core-part-2.svg +1 -0
  761. package/dist/assets/fleet-insets-reactor-core-part-2.thick.svg +1 -0
  762. package/dist/assets/fleet-insets-reactor-core-part-3.painted.svg +1 -0
  763. package/dist/assets/fleet-insets-reactor-core-part-3.svg +1 -0
  764. package/dist/assets/fleet-insets-reactor-core-part-3.thick.svg +1 -0
  765. package/dist/assets/fleet-insets-reactor-core-part-4.painted.svg +1 -0
  766. package/dist/assets/fleet-insets-reactor-core-part-4.svg +1 -0
  767. package/dist/assets/fleet-insets-reactor-core-part-4.thick.svg +1 -0
  768. package/dist/assets/fleet-insets-reactor-core-part-5.painted.svg +1 -0
  769. package/dist/assets/fleet-insets-reactor-core-part-5.svg +1 -0
  770. package/dist/assets/fleet-insets-reactor-core-part-5.thick.svg +1 -0
  771. package/dist/assets/fleet-insets-reactor-core-part-6.painted.svg +1 -0
  772. package/dist/assets/fleet-insets-reactor-core-part-6.svg +1 -0
  773. package/dist/assets/fleet-insets-reactor-core-part-6.thick.svg +1 -0
  774. package/dist/assets/fleet-insets-reactor-core.painted.svg +1 -0
  775. package/dist/assets/fleet-insets-reactor-core.svg +1 -0
  776. package/dist/assets/fleet-insets-reactor-core.thick.svg +1 -0
  777. package/dist/assets/fleet-insets-ship-03-card-main.painted.svg +1 -0
  778. package/dist/assets/fleet-insets-ship-03-card-main.svg +1 -0
  779. package/dist/assets/fleet-insets-ship-03-card-main.thick.svg +1 -0
  780. package/dist/assets/fleet-insets-ship-03-card-vernier.painted.svg +1 -0
  781. package/dist/assets/fleet-insets-ship-03-card-vernier.svg +1 -0
  782. package/dist/assets/fleet-insets-ship-03-card-vernier.thick.svg +1 -0
  783. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-apart.painted.svg +1 -0
  784. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-apart.svg +1 -0
  785. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-apart.thick.svg +1 -0
  786. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-1.painted.svg +1 -0
  787. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-1.svg +1 -0
  788. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-1.thick.svg +1 -0
  789. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-2.painted.svg +1 -0
  790. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-2.svg +1 -0
  791. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-2.thick.svg +1 -0
  792. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-3.painted.svg +1 -0
  793. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-3.svg +1 -0
  794. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-3.thick.svg +1 -0
  795. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-4.painted.svg +1 -0
  796. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-4.svg +1 -0
  797. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-4.thick.svg +1 -0
  798. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-5.painted.svg +1 -0
  799. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-5.svg +1 -0
  800. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-5.thick.svg +1 -0
  801. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-6.painted.svg +1 -0
  802. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-6.svg +1 -0
  803. package/dist/assets/fleet-insets-ship-03-ship-03-citadel-ship-03-citadel-6.thick.svg +1 -0
  804. package/dist/assets/fleet-insets-ship-03-ship-03-citadel.painted.svg +1 -0
  805. package/dist/assets/fleet-insets-ship-03-ship-03-citadel.svg +1 -0
  806. package/dist/assets/fleet-insets-ship-03-ship-03-citadel.thick.svg +1 -0
  807. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-apart.painted.svg +1 -0
  808. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-apart.svg +1 -0
  809. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-apart.thick.svg +1 -0
  810. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-1.painted.svg +1 -0
  811. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-1.svg +1 -0
  812. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-1.thick.svg +1 -0
  813. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-2.painted.svg +1 -0
  814. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-2.svg +1 -0
  815. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-2.thick.svg +1 -0
  816. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-3.painted.svg +1 -0
  817. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-3.svg +1 -0
  818. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-3.thick.svg +1 -0
  819. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-4.painted.svg +1 -0
  820. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-4.svg +1 -0
  821. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-4.thick.svg +1 -0
  822. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-5.painted.svg +1 -0
  823. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-5.svg +1 -0
  824. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-5.thick.svg +1 -0
  825. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-6.painted.svg +1 -0
  826. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-6.svg +1 -0
  827. package/dist/assets/fleet-insets-ship-03-ship-03-hangars-ship-03-hangars-6.thick.svg +1 -0
  828. package/dist/assets/fleet-insets-ship-03-ship-03-hangars.painted.svg +1 -0
  829. package/dist/assets/fleet-insets-ship-03-ship-03-hangars.svg +1 -0
  830. package/dist/assets/fleet-insets-ship-03-ship-03-hangars.thick.svg +1 -0
  831. package/dist/assets/fleet-insets-ship-03-ship-03-medical-apart.painted.svg +1 -0
  832. package/dist/assets/fleet-insets-ship-03-ship-03-medical-apart.svg +1 -0
  833. package/dist/assets/fleet-insets-ship-03-ship-03-medical-apart.thick.svg +1 -0
  834. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-1.painted.svg +1 -0
  835. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-1.svg +1 -0
  836. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-1.thick.svg +1 -0
  837. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-2.painted.svg +1 -0
  838. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-2.svg +1 -0
  839. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-2.thick.svg +1 -0
  840. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-3.painted.svg +1 -0
  841. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-3.svg +1 -0
  842. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-3.thick.svg +1 -0
  843. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-4.painted.svg +1 -0
  844. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-4.svg +1 -0
  845. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-4.thick.svg +1 -0
  846. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-5.painted.svg +1 -0
  847. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-5.svg +1 -0
  848. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-5.thick.svg +1 -0
  849. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-6.painted.svg +1 -0
  850. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-6.svg +1 -0
  851. package/dist/assets/fleet-insets-ship-03-ship-03-medical-ship-03-medical-6.thick.svg +1 -0
  852. package/dist/assets/fleet-insets-ship-03-ship-03-medical.painted.svg +1 -0
  853. package/dist/assets/fleet-insets-ship-03-ship-03-medical.svg +1 -0
  854. package/dist/assets/fleet-insets-ship-03-ship-03-medical.thick.svg +1 -0
  855. package/dist/assets/fleet-labs-deck-nav-m-cutaway.painted.svg +1 -0
  856. package/dist/assets/fleet-labs-deck-nav-m-cutaway.svg +1 -0
  857. package/dist/assets/fleet-labs-deck-nav-m-cutaway.thick.svg +1 -0
  858. package/dist/assets/fleet-labs-deck-nav-m.painted.svg +1 -0
  859. package/dist/assets/fleet-labs-deck-nav-m.svg +1 -0
  860. package/dist/assets/fleet-labs-deck-nav-m.thick.svg +1 -0
  861. package/dist/assets/fleet-labs-lab-m-cutaway.painted.svg +1 -0
  862. package/dist/assets/fleet-labs-lab-m-cutaway.svg +1 -0
  863. package/dist/assets/fleet-labs-lab-m-cutaway.thick.svg +1 -0
  864. package/dist/assets/fleet-labs-lab-m.painted.svg +1 -0
  865. package/dist/assets/fleet-labs-lab-m.svg +1 -0
  866. package/dist/assets/fleet-labs-lab-m.thick.svg +1 -0
  867. package/dist/assets/fleet-labs-pod-medical-m-cutaway.painted.svg +1 -0
  868. package/dist/assets/fleet-labs-pod-medical-m-cutaway.svg +1 -0
  869. package/dist/assets/fleet-labs-pod-medical-m-cutaway.thick.svg +1 -0
  870. package/dist/assets/fleet-labs-pod-medical-m.painted.svg +1 -0
  871. package/dist/assets/fleet-labs-pod-medical-m.svg +1 -0
  872. package/dist/assets/fleet-labs-pod-medical-m.thick.svg +1 -0
  873. package/dist/assets/fleet-labs-pod-survey-m-cutaway.painted.svg +1 -0
  874. package/dist/assets/fleet-labs-pod-survey-m-cutaway.svg +1 -0
  875. package/dist/assets/fleet-labs-pod-survey-m-cutaway.thick.svg +1 -0
  876. package/dist/assets/fleet-labs-pod-survey-m.painted.svg +1 -0
  877. package/dist/assets/fleet-labs-pod-survey-m.svg +1 -0
  878. package/dist/assets/fleet-labs-pod-survey-m.thick.svg +1 -0
  879. package/dist/assets/fleet-samples-hauler-adapter-l-m-10.painted.svg +1 -0
  880. package/dist/assets/fleet-samples-hauler-adapter-l-m-10.svg +1 -0
  881. package/dist/assets/fleet-samples-hauler-adapter-l-m-10.thick.svg +1 -0
  882. package/dist/assets/fleet-samples-hauler-apart.painted.svg +1 -0
  883. package/dist/assets/fleet-samples-hauler-apart.svg +1 -0
  884. package/dist/assets/fleet-samples-hauler-apart.thick.svg +1 -0
  885. package/dist/assets/fleet-samples-hauler-cargo-bay-4-4.painted.svg +1 -0
  886. package/dist/assets/fleet-samples-hauler-cargo-bay-4-4.svg +1 -0
  887. package/dist/assets/fleet-samples-hauler-cargo-bay-4-4.thick.svg +1 -0
  888. package/dist/assets/fleet-samples-hauler-common-area-m-11.painted.svg +1 -0
  889. package/dist/assets/fleet-samples-hauler-common-area-m-11.svg +1 -0
  890. package/dist/assets/fleet-samples-hauler-common-area-m-11.thick.svg +1 -0
  891. package/dist/assets/fleet-samples-hauler-container-12-5.painted.svg +1 -0
  892. package/dist/assets/fleet-samples-hauler-container-12-5.svg +1 -0
  893. package/dist/assets/fleet-samples-hauler-container-12-5.thick.svg +1 -0
  894. package/dist/assets/fleet-samples-hauler-container-12-7.painted.svg +1 -0
  895. package/dist/assets/fleet-samples-hauler-container-12-7.svg +1 -0
  896. package/dist/assets/fleet-samples-hauler-container-12-7.thick.svg +1 -0
  897. package/dist/assets/fleet-samples-hauler-container-12-8.painted.svg +1 -0
  898. package/dist/assets/fleet-samples-hauler-container-12-8.svg +1 -0
  899. package/dist/assets/fleet-samples-hauler-container-12-8.thick.svg +1 -0
  900. package/dist/assets/fleet-samples-hauler-container-12-cold-6.painted.svg +1 -0
  901. package/dist/assets/fleet-samples-hauler-container-12-cold-6.svg +1 -0
  902. package/dist/assets/fleet-samples-hauler-container-12-cold-6.thick.svg +1 -0
  903. package/dist/assets/fleet-samples-hauler-deck-nav-m-16.painted.svg +1 -0
  904. package/dist/assets/fleet-samples-hauler-deck-nav-m-16.svg +1 -0
  905. package/dist/assets/fleet-samples-hauler-deck-nav-m-16.thick.svg +1 -0
  906. package/dist/assets/fleet-samples-hauler-engine-fusion-7-1.painted.svg +1 -0
  907. package/dist/assets/fleet-samples-hauler-engine-fusion-7-1.svg +1 -0
  908. package/dist/assets/fleet-samples-hauler-engine-fusion-7-1.thick.svg +1 -0
  909. package/dist/assets/fleet-samples-hauler-eva-lock-m-13.painted.svg +1 -0
  910. package/dist/assets/fleet-samples-hauler-eva-lock-m-13.svg +1 -0
  911. package/dist/assets/fleet-samples-hauler-eva-lock-m-13.thick.svg +1 -0
  912. package/dist/assets/fleet-samples-hauler-habitat-drum-large-9.painted.svg +1 -0
  913. package/dist/assets/fleet-samples-hauler-habitat-drum-large-9.svg +1 -0
  914. package/dist/assets/fleet-samples-hauler-habitat-drum-large-9.thick.svg +1 -0
  915. package/dist/assets/fleet-samples-hauler-habitat-ring-16-12.painted.svg +1 -0
  916. package/dist/assets/fleet-samples-hauler-habitat-ring-16-12.svg +1 -0
  917. package/dist/assets/fleet-samples-hauler-habitat-ring-16-12.thick.svg +1 -0
  918. package/dist/assets/fleet-samples-hauler-lab-m-15.painted.svg +1 -0
  919. package/dist/assets/fleet-samples-hauler-lab-m-15.svg +1 -0
  920. package/dist/assets/fleet-samples-hauler-lab-m-15.thick.svg +1 -0
  921. package/dist/assets/fleet-samples-hauler-mast-sensor-40-17.painted.svg +1 -0
  922. package/dist/assets/fleet-samples-hauler-mast-sensor-40-17.svg +1 -0
  923. package/dist/assets/fleet-samples-hauler-mast-sensor-40-17.thick.svg +1 -0
  924. package/dist/assets/fleet-samples-hauler-pod-survey-m-14.painted.svg +1 -0
  925. package/dist/assets/fleet-samples-hauler-pod-survey-m-14.svg +1 -0
  926. package/dist/assets/fleet-samples-hauler-pod-survey-m-14.thick.svg +1 -0
  927. package/dist/assets/fleet-samples-hauler-reactor-fusion-3.painted.svg +1 -0
  928. package/dist/assets/fleet-samples-hauler-reactor-fusion-3.svg +1 -0
  929. package/dist/assets/fleet-samples-hauler-reactor-fusion-3.thick.svg +1 -0
  930. package/dist/assets/fleet-samples-hauler-tank-cryo-24-2.painted.svg +1 -0
  931. package/dist/assets/fleet-samples-hauler-tank-cryo-24-2.svg +1 -0
  932. package/dist/assets/fleet-samples-hauler-tank-cryo-24-2.thick.svg +1 -0
  933. package/dist/assets/fleet-samples-hauler.painted.svg +1 -0
  934. package/dist/assets/fleet-samples-hauler.svg +1 -0
  935. package/dist/assets/fleet-samples-hauler.thick.svg +1 -0
  936. package/dist/assets/fleet-ship-03-miyamoto-apart.painted.svg +1 -0
  937. package/dist/assets/fleet-ship-03-miyamoto-apart.svg +1 -0
  938. package/dist/assets/fleet-ship-03-miyamoto-apart.thick.svg +1 -0
  939. package/dist/assets/fleet-ship-03-miyamoto-array-apart.painted.svg +1 -0
  940. package/dist/assets/fleet-ship-03-miyamoto-array-apart.svg +1 -0
  941. package/dist/assets/fleet-ship-03-miyamoto-array-apart.thick.svg +1 -0
  942. package/dist/assets/fleet-ship-03-miyamoto-array-array.painted.svg +1 -0
  943. package/dist/assets/fleet-ship-03-miyamoto-array-array.svg +1 -0
  944. package/dist/assets/fleet-ship-03-miyamoto-array-array.thick.svg +1 -0
  945. package/dist/assets/fleet-ship-03-miyamoto-array-bow.painted.svg +1 -0
  946. package/dist/assets/fleet-ship-03-miyamoto-array-bow.svg +1 -0
  947. package/dist/assets/fleet-ship-03-miyamoto-array-bow.thick.svg +1 -0
  948. package/dist/assets/fleet-ship-03-miyamoto-array-command.painted.svg +1 -0
  949. package/dist/assets/fleet-ship-03-miyamoto-array-command.svg +1 -0
  950. package/dist/assets/fleet-ship-03-miyamoto-array-command.thick.svg +1 -0
  951. package/dist/assets/fleet-ship-03-miyamoto-array-drive-collar.painted.svg +1 -0
  952. package/dist/assets/fleet-ship-03-miyamoto-array-drive-collar.svg +1 -0
  953. package/dist/assets/fleet-ship-03-miyamoto-array-drive-collar.thick.svg +1 -0
  954. package/dist/assets/fleet-ship-03-miyamoto-array-drive.painted.svg +1 -0
  955. package/dist/assets/fleet-ship-03-miyamoto-array-drive.svg +1 -0
  956. package/dist/assets/fleet-ship-03-miyamoto-array-drive.thick.svg +1 -0
  957. package/dist/assets/fleet-ship-03-miyamoto-array-engineering.painted.svg +1 -0
  958. package/dist/assets/fleet-ship-03-miyamoto-array-engineering.svg +1 -0
  959. package/dist/assets/fleet-ship-03-miyamoto-array-engineering.thick.svg +1 -0
  960. package/dist/assets/fleet-ship-03-miyamoto-array-fuel-aft.painted.svg +1 -0
  961. package/dist/assets/fleet-ship-03-miyamoto-array-fuel-aft.svg +1 -0
  962. package/dist/assets/fleet-ship-03-miyamoto-array-fuel-aft.thick.svg +1 -0
  963. package/dist/assets/fleet-ship-03-miyamoto-array-fuel-fore.painted.svg +1 -0
  964. package/dist/assets/fleet-ship-03-miyamoto-array-fuel-fore.svg +1 -0
  965. package/dist/assets/fleet-ship-03-miyamoto-array-fuel-fore.thick.svg +1 -0
  966. package/dist/assets/fleet-ship-03-miyamoto-array-habitat.painted.svg +1 -0
  967. package/dist/assets/fleet-ship-03-miyamoto-array-habitat.svg +1 -0
  968. package/dist/assets/fleet-ship-03-miyamoto-array-habitat.thick.svg +1 -0
  969. package/dist/assets/fleet-ship-03-miyamoto-array-hangar-port.painted.svg +1 -0
  970. package/dist/assets/fleet-ship-03-miyamoto-array-hangar-port.svg +1 -0
  971. package/dist/assets/fleet-ship-03-miyamoto-array-hangar-port.thick.svg +1 -0
  972. package/dist/assets/fleet-ship-03-miyamoto-array-hangar-starboard.painted.svg +1 -0
  973. package/dist/assets/fleet-ship-03-miyamoto-array-hangar-starboard.svg +1 -0
  974. package/dist/assets/fleet-ship-03-miyamoto-array-hangar-starboard.thick.svg +1 -0
  975. package/dist/assets/fleet-ship-03-miyamoto-array-pod.painted.svg +1 -0
  976. package/dist/assets/fleet-ship-03-miyamoto-array-pod.svg +1 -0
  977. package/dist/assets/fleet-ship-03-miyamoto-array-pod.thick.svg +1 -0
  978. package/dist/assets/fleet-ship-03-miyamoto-array-radiators-dorsal.painted.svg +1 -0
  979. package/dist/assets/fleet-ship-03-miyamoto-array-radiators-dorsal.svg +1 -0
  980. package/dist/assets/fleet-ship-03-miyamoto-array-radiators-dorsal.thick.svg +1 -0
  981. package/dist/assets/fleet-ship-03-miyamoto-array-radiators-ventral.painted.svg +1 -0
  982. package/dist/assets/fleet-ship-03-miyamoto-array-radiators-ventral.svg +1 -0
  983. package/dist/assets/fleet-ship-03-miyamoto-array-radiators-ventral.thick.svg +1 -0
  984. package/dist/assets/fleet-ship-03-miyamoto-array.painted.svg +1 -0
  985. package/dist/assets/fleet-ship-03-miyamoto-array.svg +1 -0
  986. package/dist/assets/fleet-ship-03-miyamoto-array.thick.svg +1 -0
  987. package/dist/assets/fleet-ship-03-miyamoto-bow.painted.svg +1 -0
  988. package/dist/assets/fleet-ship-03-miyamoto-bow.svg +1 -0
  989. package/dist/assets/fleet-ship-03-miyamoto-bow.thick.svg +1 -0
  990. package/dist/assets/fleet-ship-03-miyamoto-command.painted.svg +1 -0
  991. package/dist/assets/fleet-ship-03-miyamoto-command.svg +1 -0
  992. package/dist/assets/fleet-ship-03-miyamoto-command.thick.svg +1 -0
  993. package/dist/assets/fleet-ship-03-miyamoto-cutaway-apart.painted.svg +1 -0
  994. package/dist/assets/fleet-ship-03-miyamoto-cutaway-apart.svg +1 -0
  995. package/dist/assets/fleet-ship-03-miyamoto-cutaway-apart.thick.svg +1 -0
  996. package/dist/assets/fleet-ship-03-miyamoto-cutaway-array.painted.svg +1 -0
  997. package/dist/assets/fleet-ship-03-miyamoto-cutaway-array.svg +1 -0
  998. package/dist/assets/fleet-ship-03-miyamoto-cutaway-array.thick.svg +1 -0
  999. package/dist/assets/fleet-ship-03-miyamoto-cutaway-bow.painted.svg +1 -0
  1000. package/dist/assets/fleet-ship-03-miyamoto-cutaway-bow.svg +1 -0
  1001. package/dist/assets/fleet-ship-03-miyamoto-cutaway-bow.thick.svg +1 -0
  1002. package/dist/assets/fleet-ship-03-miyamoto-cutaway-command.painted.svg +1 -0
  1003. package/dist/assets/fleet-ship-03-miyamoto-cutaway-command.svg +1 -0
  1004. package/dist/assets/fleet-ship-03-miyamoto-cutaway-command.thick.svg +1 -0
  1005. package/dist/assets/fleet-ship-03-miyamoto-cutaway-drive-collar.painted.svg +1 -0
  1006. package/dist/assets/fleet-ship-03-miyamoto-cutaway-drive-collar.svg +1 -0
  1007. package/dist/assets/fleet-ship-03-miyamoto-cutaway-drive-collar.thick.svg +1 -0
  1008. package/dist/assets/fleet-ship-03-miyamoto-cutaway-drive.painted.svg +1 -0
  1009. package/dist/assets/fleet-ship-03-miyamoto-cutaway-drive.svg +1 -0
  1010. package/dist/assets/fleet-ship-03-miyamoto-cutaway-drive.thick.svg +1 -0
  1011. package/dist/assets/fleet-ship-03-miyamoto-cutaway-engineering.painted.svg +1 -0
  1012. package/dist/assets/fleet-ship-03-miyamoto-cutaway-engineering.svg +1 -0
  1013. package/dist/assets/fleet-ship-03-miyamoto-cutaway-engineering.thick.svg +1 -0
  1014. package/dist/assets/fleet-ship-03-miyamoto-cutaway-fuel-aft.painted.svg +1 -0
  1015. package/dist/assets/fleet-ship-03-miyamoto-cutaway-fuel-aft.svg +1 -0
  1016. package/dist/assets/fleet-ship-03-miyamoto-cutaway-fuel-aft.thick.svg +1 -0
  1017. package/dist/assets/fleet-ship-03-miyamoto-cutaway-fuel-fore.painted.svg +1 -0
  1018. package/dist/assets/fleet-ship-03-miyamoto-cutaway-fuel-fore.svg +1 -0
  1019. package/dist/assets/fleet-ship-03-miyamoto-cutaway-fuel-fore.thick.svg +1 -0
  1020. package/dist/assets/fleet-ship-03-miyamoto-cutaway-habitat.painted.svg +1 -0
  1021. package/dist/assets/fleet-ship-03-miyamoto-cutaway-habitat.svg +1 -0
  1022. package/dist/assets/fleet-ship-03-miyamoto-cutaway-habitat.thick.svg +1 -0
  1023. package/dist/assets/fleet-ship-03-miyamoto-cutaway-hangar-port.painted.svg +1 -0
  1024. package/dist/assets/fleet-ship-03-miyamoto-cutaway-hangar-port.svg +1 -0
  1025. package/dist/assets/fleet-ship-03-miyamoto-cutaway-hangar-port.thick.svg +1 -0
  1026. package/dist/assets/fleet-ship-03-miyamoto-cutaway-hangar-starboard.painted.svg +1 -0
  1027. package/dist/assets/fleet-ship-03-miyamoto-cutaway-hangar-starboard.svg +1 -0
  1028. package/dist/assets/fleet-ship-03-miyamoto-cutaway-hangar-starboard.thick.svg +1 -0
  1029. package/dist/assets/fleet-ship-03-miyamoto-cutaway-pod.painted.svg +1 -0
  1030. package/dist/assets/fleet-ship-03-miyamoto-cutaway-pod.svg +1 -0
  1031. package/dist/assets/fleet-ship-03-miyamoto-cutaway-pod.thick.svg +1 -0
  1032. package/dist/assets/fleet-ship-03-miyamoto-cutaway-radiators-dorsal.painted.svg +1 -0
  1033. package/dist/assets/fleet-ship-03-miyamoto-cutaway-radiators-dorsal.svg +1 -0
  1034. package/dist/assets/fleet-ship-03-miyamoto-cutaway-radiators-dorsal.thick.svg +1 -0
  1035. package/dist/assets/fleet-ship-03-miyamoto-cutaway-radiators-ventral.painted.svg +1 -0
  1036. package/dist/assets/fleet-ship-03-miyamoto-cutaway-radiators-ventral.svg +1 -0
  1037. package/dist/assets/fleet-ship-03-miyamoto-cutaway-radiators-ventral.thick.svg +1 -0
  1038. package/dist/assets/fleet-ship-03-miyamoto-cutaway.painted.svg +1 -0
  1039. package/dist/assets/fleet-ship-03-miyamoto-cutaway.svg +1 -0
  1040. package/dist/assets/fleet-ship-03-miyamoto-cutaway.thick.svg +1 -0
  1041. package/dist/assets/fleet-ship-03-miyamoto-deployed-apart.painted.svg +1 -0
  1042. package/dist/assets/fleet-ship-03-miyamoto-deployed-apart.svg +1 -0
  1043. package/dist/assets/fleet-ship-03-miyamoto-deployed-apart.thick.svg +1 -0
  1044. package/dist/assets/fleet-ship-03-miyamoto-deployed-array.painted.svg +1 -0
  1045. package/dist/assets/fleet-ship-03-miyamoto-deployed-array.svg +1 -0
  1046. package/dist/assets/fleet-ship-03-miyamoto-deployed-array.thick.svg +1 -0
  1047. package/dist/assets/fleet-ship-03-miyamoto-deployed-bow.painted.svg +1 -0
  1048. package/dist/assets/fleet-ship-03-miyamoto-deployed-bow.svg +1 -0
  1049. package/dist/assets/fleet-ship-03-miyamoto-deployed-bow.thick.svg +1 -0
  1050. package/dist/assets/fleet-ship-03-miyamoto-deployed-command.painted.svg +1 -0
  1051. package/dist/assets/fleet-ship-03-miyamoto-deployed-command.svg +1 -0
  1052. package/dist/assets/fleet-ship-03-miyamoto-deployed-command.thick.svg +1 -0
  1053. package/dist/assets/fleet-ship-03-miyamoto-deployed-drive-collar.painted.svg +1 -0
  1054. package/dist/assets/fleet-ship-03-miyamoto-deployed-drive-collar.svg +1 -0
  1055. package/dist/assets/fleet-ship-03-miyamoto-deployed-drive-collar.thick.svg +1 -0
  1056. package/dist/assets/fleet-ship-03-miyamoto-deployed-drive.painted.svg +1 -0
  1057. package/dist/assets/fleet-ship-03-miyamoto-deployed-drive.svg +1 -0
  1058. package/dist/assets/fleet-ship-03-miyamoto-deployed-drive.thick.svg +1 -0
  1059. package/dist/assets/fleet-ship-03-miyamoto-deployed-engineering.painted.svg +1 -0
  1060. package/dist/assets/fleet-ship-03-miyamoto-deployed-engineering.svg +1 -0
  1061. package/dist/assets/fleet-ship-03-miyamoto-deployed-engineering.thick.svg +1 -0
  1062. package/dist/assets/fleet-ship-03-miyamoto-deployed-fuel-aft.painted.svg +1 -0
  1063. package/dist/assets/fleet-ship-03-miyamoto-deployed-fuel-aft.svg +1 -0
  1064. package/dist/assets/fleet-ship-03-miyamoto-deployed-fuel-aft.thick.svg +1 -0
  1065. package/dist/assets/fleet-ship-03-miyamoto-deployed-fuel-fore.painted.svg +1 -0
  1066. package/dist/assets/fleet-ship-03-miyamoto-deployed-fuel-fore.svg +1 -0
  1067. package/dist/assets/fleet-ship-03-miyamoto-deployed-fuel-fore.thick.svg +1 -0
  1068. package/dist/assets/fleet-ship-03-miyamoto-deployed-habitat.painted.svg +1 -0
  1069. package/dist/assets/fleet-ship-03-miyamoto-deployed-habitat.svg +1 -0
  1070. package/dist/assets/fleet-ship-03-miyamoto-deployed-habitat.thick.svg +1 -0
  1071. package/dist/assets/fleet-ship-03-miyamoto-deployed-hangar-port.painted.svg +1 -0
  1072. package/dist/assets/fleet-ship-03-miyamoto-deployed-hangar-port.svg +1 -0
  1073. package/dist/assets/fleet-ship-03-miyamoto-deployed-hangar-port.thick.svg +1 -0
  1074. package/dist/assets/fleet-ship-03-miyamoto-deployed-hangar-starboard.painted.svg +1 -0
  1075. package/dist/assets/fleet-ship-03-miyamoto-deployed-hangar-starboard.svg +1 -0
  1076. package/dist/assets/fleet-ship-03-miyamoto-deployed-hangar-starboard.thick.svg +1 -0
  1077. package/dist/assets/fleet-ship-03-miyamoto-deployed-pod.painted.svg +1 -0
  1078. package/dist/assets/fleet-ship-03-miyamoto-deployed-pod.svg +1 -0
  1079. package/dist/assets/fleet-ship-03-miyamoto-deployed-pod.thick.svg +1 -0
  1080. package/dist/assets/fleet-ship-03-miyamoto-deployed-radiators-dorsal.painted.svg +1 -0
  1081. package/dist/assets/fleet-ship-03-miyamoto-deployed-radiators-dorsal.svg +1 -0
  1082. package/dist/assets/fleet-ship-03-miyamoto-deployed-radiators-dorsal.thick.svg +1 -0
  1083. package/dist/assets/fleet-ship-03-miyamoto-deployed-radiators-ventral.painted.svg +1 -0
  1084. package/dist/assets/fleet-ship-03-miyamoto-deployed-radiators-ventral.svg +1 -0
  1085. package/dist/assets/fleet-ship-03-miyamoto-deployed-radiators-ventral.thick.svg +1 -0
  1086. package/dist/assets/fleet-ship-03-miyamoto-deployed.painted.svg +1 -0
  1087. package/dist/assets/fleet-ship-03-miyamoto-deployed.svg +1 -0
  1088. package/dist/assets/fleet-ship-03-miyamoto-deployed.thick.svg +1 -0
  1089. package/dist/assets/fleet-ship-03-miyamoto-drive-collar.painted.svg +1 -0
  1090. package/dist/assets/fleet-ship-03-miyamoto-drive-collar.svg +1 -0
  1091. package/dist/assets/fleet-ship-03-miyamoto-drive-collar.thick.svg +1 -0
  1092. package/dist/assets/fleet-ship-03-miyamoto-drive.painted.svg +1 -0
  1093. package/dist/assets/fleet-ship-03-miyamoto-drive.svg +1 -0
  1094. package/dist/assets/fleet-ship-03-miyamoto-drive.thick.svg +1 -0
  1095. package/dist/assets/fleet-ship-03-miyamoto-engineering.painted.svg +1 -0
  1096. package/dist/assets/fleet-ship-03-miyamoto-engineering.svg +1 -0
  1097. package/dist/assets/fleet-ship-03-miyamoto-engineering.thick.svg +1 -0
  1098. package/dist/assets/fleet-ship-03-miyamoto-fuel-aft.painted.svg +1 -0
  1099. package/dist/assets/fleet-ship-03-miyamoto-fuel-aft.svg +1 -0
  1100. package/dist/assets/fleet-ship-03-miyamoto-fuel-aft.thick.svg +1 -0
  1101. package/dist/assets/fleet-ship-03-miyamoto-fuel-fore.painted.svg +1 -0
  1102. package/dist/assets/fleet-ship-03-miyamoto-fuel-fore.svg +1 -0
  1103. package/dist/assets/fleet-ship-03-miyamoto-fuel-fore.thick.svg +1 -0
  1104. package/dist/assets/fleet-ship-03-miyamoto-habitat.painted.svg +1 -0
  1105. package/dist/assets/fleet-ship-03-miyamoto-habitat.svg +1 -0
  1106. package/dist/assets/fleet-ship-03-miyamoto-habitat.thick.svg +1 -0
  1107. package/dist/assets/fleet-ship-03-miyamoto-hangar-port.painted.svg +1 -0
  1108. package/dist/assets/fleet-ship-03-miyamoto-hangar-port.svg +1 -0
  1109. package/dist/assets/fleet-ship-03-miyamoto-hangar-port.thick.svg +1 -0
  1110. package/dist/assets/fleet-ship-03-miyamoto-hangar-starboard.painted.svg +1 -0
  1111. package/dist/assets/fleet-ship-03-miyamoto-hangar-starboard.svg +1 -0
  1112. package/dist/assets/fleet-ship-03-miyamoto-hangar-starboard.thick.svg +1 -0
  1113. package/dist/assets/fleet-ship-03-miyamoto-no-collar-apart.painted.svg +1 -0
  1114. package/dist/assets/fleet-ship-03-miyamoto-no-collar-apart.svg +1 -0
  1115. package/dist/assets/fleet-ship-03-miyamoto-no-collar-apart.thick.svg +1 -0
  1116. package/dist/assets/fleet-ship-03-miyamoto-no-collar-array.painted.svg +1 -0
  1117. package/dist/assets/fleet-ship-03-miyamoto-no-collar-array.svg +1 -0
  1118. package/dist/assets/fleet-ship-03-miyamoto-no-collar-array.thick.svg +1 -0
  1119. package/dist/assets/fleet-ship-03-miyamoto-no-collar-bow.painted.svg +1 -0
  1120. package/dist/assets/fleet-ship-03-miyamoto-no-collar-bow.svg +1 -0
  1121. package/dist/assets/fleet-ship-03-miyamoto-no-collar-bow.thick.svg +1 -0
  1122. package/dist/assets/fleet-ship-03-miyamoto-no-collar-command.painted.svg +1 -0
  1123. package/dist/assets/fleet-ship-03-miyamoto-no-collar-command.svg +1 -0
  1124. package/dist/assets/fleet-ship-03-miyamoto-no-collar-command.thick.svg +1 -0
  1125. package/dist/assets/fleet-ship-03-miyamoto-no-collar-drive-collar.painted.svg +1 -0
  1126. package/dist/assets/fleet-ship-03-miyamoto-no-collar-drive-collar.svg +1 -0
  1127. package/dist/assets/fleet-ship-03-miyamoto-no-collar-drive-collar.thick.svg +1 -0
  1128. package/dist/assets/fleet-ship-03-miyamoto-no-collar-drive.painted.svg +1 -0
  1129. package/dist/assets/fleet-ship-03-miyamoto-no-collar-drive.svg +1 -0
  1130. package/dist/assets/fleet-ship-03-miyamoto-no-collar-drive.thick.svg +1 -0
  1131. package/dist/assets/fleet-ship-03-miyamoto-no-collar-engineering.painted.svg +1 -0
  1132. package/dist/assets/fleet-ship-03-miyamoto-no-collar-engineering.svg +1 -0
  1133. package/dist/assets/fleet-ship-03-miyamoto-no-collar-engineering.thick.svg +1 -0
  1134. package/dist/assets/fleet-ship-03-miyamoto-no-collar-fuel-aft.painted.svg +1 -0
  1135. package/dist/assets/fleet-ship-03-miyamoto-no-collar-fuel-aft.svg +1 -0
  1136. package/dist/assets/fleet-ship-03-miyamoto-no-collar-fuel-aft.thick.svg +1 -0
  1137. package/dist/assets/fleet-ship-03-miyamoto-no-collar-fuel-fore.painted.svg +1 -0
  1138. package/dist/assets/fleet-ship-03-miyamoto-no-collar-fuel-fore.svg +1 -0
  1139. package/dist/assets/fleet-ship-03-miyamoto-no-collar-fuel-fore.thick.svg +1 -0
  1140. package/dist/assets/fleet-ship-03-miyamoto-no-collar-habitat.painted.svg +1 -0
  1141. package/dist/assets/fleet-ship-03-miyamoto-no-collar-habitat.svg +1 -0
  1142. package/dist/assets/fleet-ship-03-miyamoto-no-collar-habitat.thick.svg +1 -0
  1143. package/dist/assets/fleet-ship-03-miyamoto-no-collar-hangar-port.painted.svg +1 -0
  1144. package/dist/assets/fleet-ship-03-miyamoto-no-collar-hangar-port.svg +1 -0
  1145. package/dist/assets/fleet-ship-03-miyamoto-no-collar-hangar-port.thick.svg +1 -0
  1146. package/dist/assets/fleet-ship-03-miyamoto-no-collar-hangar-starboard.painted.svg +1 -0
  1147. package/dist/assets/fleet-ship-03-miyamoto-no-collar-hangar-starboard.svg +1 -0
  1148. package/dist/assets/fleet-ship-03-miyamoto-no-collar-hangar-starboard.thick.svg +1 -0
  1149. package/dist/assets/fleet-ship-03-miyamoto-no-collar-pod.painted.svg +1 -0
  1150. package/dist/assets/fleet-ship-03-miyamoto-no-collar-pod.svg +1 -0
  1151. package/dist/assets/fleet-ship-03-miyamoto-no-collar-pod.thick.svg +1 -0
  1152. package/dist/assets/fleet-ship-03-miyamoto-no-collar-radiators-dorsal.painted.svg +1 -0
  1153. package/dist/assets/fleet-ship-03-miyamoto-no-collar-radiators-dorsal.svg +1 -0
  1154. package/dist/assets/fleet-ship-03-miyamoto-no-collar-radiators-dorsal.thick.svg +1 -0
  1155. package/dist/assets/fleet-ship-03-miyamoto-no-collar-radiators-ventral.painted.svg +1 -0
  1156. package/dist/assets/fleet-ship-03-miyamoto-no-collar-radiators-ventral.svg +1 -0
  1157. package/dist/assets/fleet-ship-03-miyamoto-no-collar-radiators-ventral.thick.svg +1 -0
  1158. package/dist/assets/fleet-ship-03-miyamoto-no-collar.painted.svg +1 -0
  1159. package/dist/assets/fleet-ship-03-miyamoto-no-collar.svg +1 -0
  1160. package/dist/assets/fleet-ship-03-miyamoto-no-collar.thick.svg +1 -0
  1161. package/dist/assets/fleet-ship-03-miyamoto-pod.painted.svg +1 -0
  1162. package/dist/assets/fleet-ship-03-miyamoto-pod.svg +1 -0
  1163. package/dist/assets/fleet-ship-03-miyamoto-pod.thick.svg +1 -0
  1164. package/dist/assets/fleet-ship-03-miyamoto-radiators-dorsal.painted.svg +1 -0
  1165. package/dist/assets/fleet-ship-03-miyamoto-radiators-dorsal.svg +1 -0
  1166. package/dist/assets/fleet-ship-03-miyamoto-radiators-dorsal.thick.svg +1 -0
  1167. package/dist/assets/fleet-ship-03-miyamoto-radiators-ventral.painted.svg +1 -0
  1168. package/dist/assets/fleet-ship-03-miyamoto-radiators-ventral.svg +1 -0
  1169. package/dist/assets/fleet-ship-03-miyamoto-radiators-ventral.thick.svg +1 -0
  1170. package/dist/assets/fleet-ship-03-miyamoto-relief-apart.painted.svg +1 -0
  1171. package/dist/assets/fleet-ship-03-miyamoto-relief-apart.svg +1 -0
  1172. package/dist/assets/fleet-ship-03-miyamoto-relief-apart.thick.svg +1 -0
  1173. package/dist/assets/fleet-ship-03-miyamoto-relief-array.painted.svg +1 -0
  1174. package/dist/assets/fleet-ship-03-miyamoto-relief-array.svg +1 -0
  1175. package/dist/assets/fleet-ship-03-miyamoto-relief-array.thick.svg +1 -0
  1176. package/dist/assets/fleet-ship-03-miyamoto-relief-bow.painted.svg +1 -0
  1177. package/dist/assets/fleet-ship-03-miyamoto-relief-bow.svg +1 -0
  1178. package/dist/assets/fleet-ship-03-miyamoto-relief-bow.thick.svg +1 -0
  1179. package/dist/assets/fleet-ship-03-miyamoto-relief-command.painted.svg +1 -0
  1180. package/dist/assets/fleet-ship-03-miyamoto-relief-command.svg +1 -0
  1181. package/dist/assets/fleet-ship-03-miyamoto-relief-command.thick.svg +1 -0
  1182. package/dist/assets/fleet-ship-03-miyamoto-relief-drive-collar.painted.svg +1 -0
  1183. package/dist/assets/fleet-ship-03-miyamoto-relief-drive-collar.svg +1 -0
  1184. package/dist/assets/fleet-ship-03-miyamoto-relief-drive-collar.thick.svg +1 -0
  1185. package/dist/assets/fleet-ship-03-miyamoto-relief-drive.painted.svg +1 -0
  1186. package/dist/assets/fleet-ship-03-miyamoto-relief-drive.svg +1 -0
  1187. package/dist/assets/fleet-ship-03-miyamoto-relief-drive.thick.svg +1 -0
  1188. package/dist/assets/fleet-ship-03-miyamoto-relief-engineering.painted.svg +1 -0
  1189. package/dist/assets/fleet-ship-03-miyamoto-relief-engineering.svg +1 -0
  1190. package/dist/assets/fleet-ship-03-miyamoto-relief-engineering.thick.svg +1 -0
  1191. package/dist/assets/fleet-ship-03-miyamoto-relief-fuel-aft.painted.svg +1 -0
  1192. package/dist/assets/fleet-ship-03-miyamoto-relief-fuel-aft.svg +1 -0
  1193. package/dist/assets/fleet-ship-03-miyamoto-relief-fuel-aft.thick.svg +1 -0
  1194. package/dist/assets/fleet-ship-03-miyamoto-relief-fuel-fore.painted.svg +1 -0
  1195. package/dist/assets/fleet-ship-03-miyamoto-relief-fuel-fore.svg +1 -0
  1196. package/dist/assets/fleet-ship-03-miyamoto-relief-fuel-fore.thick.svg +1 -0
  1197. package/dist/assets/fleet-ship-03-miyamoto-relief-habitat.painted.svg +1 -0
  1198. package/dist/assets/fleet-ship-03-miyamoto-relief-habitat.svg +1 -0
  1199. package/dist/assets/fleet-ship-03-miyamoto-relief-habitat.thick.svg +1 -0
  1200. package/dist/assets/fleet-ship-03-miyamoto-relief-hangar-port.painted.svg +1 -0
  1201. package/dist/assets/fleet-ship-03-miyamoto-relief-hangar-port.svg +1 -0
  1202. package/dist/assets/fleet-ship-03-miyamoto-relief-hangar-port.thick.svg +1 -0
  1203. package/dist/assets/fleet-ship-03-miyamoto-relief-hangar-starboard.painted.svg +1 -0
  1204. package/dist/assets/fleet-ship-03-miyamoto-relief-hangar-starboard.svg +1 -0
  1205. package/dist/assets/fleet-ship-03-miyamoto-relief-hangar-starboard.thick.svg +1 -0
  1206. package/dist/assets/fleet-ship-03-miyamoto-relief-pod.painted.svg +1 -0
  1207. package/dist/assets/fleet-ship-03-miyamoto-relief-pod.svg +1 -0
  1208. package/dist/assets/fleet-ship-03-miyamoto-relief-pod.thick.svg +1 -0
  1209. package/dist/assets/fleet-ship-03-miyamoto-relief-radiators-dorsal.painted.svg +1 -0
  1210. package/dist/assets/fleet-ship-03-miyamoto-relief-radiators-dorsal.svg +1 -0
  1211. package/dist/assets/fleet-ship-03-miyamoto-relief-radiators-dorsal.thick.svg +1 -0
  1212. package/dist/assets/fleet-ship-03-miyamoto-relief-radiators-ventral.painted.svg +1 -0
  1213. package/dist/assets/fleet-ship-03-miyamoto-relief-radiators-ventral.svg +1 -0
  1214. package/dist/assets/fleet-ship-03-miyamoto-relief-radiators-ventral.thick.svg +1 -0
  1215. package/dist/assets/fleet-ship-03-miyamoto-relief.painted.svg +1 -0
  1216. package/dist/assets/fleet-ship-03-miyamoto-relief.svg +1 -0
  1217. package/dist/assets/fleet-ship-03-miyamoto-relief.thick.svg +1 -0
  1218. package/dist/assets/fleet-ship-03-miyamoto.painted.svg +1 -0
  1219. package/dist/assets/fleet-ship-03-miyamoto.svg +1 -0
  1220. package/dist/assets/fleet-ship-03-miyamoto.thick.svg +1 -0
  1221. package/dist/assets/fleet-ship-ariake-ariake-apart.painted.svg +1 -0
  1222. package/dist/assets/fleet-ship-ariake-ariake-apart.svg +1 -0
  1223. package/dist/assets/fleet-ship-ariake-ariake-apart.thick.svg +1 -0
  1224. package/dist/assets/fleet-ship-ariake-ariake-bow.painted.svg +1 -0
  1225. package/dist/assets/fleet-ship-ariake-ariake-bow.svg +1 -0
  1226. package/dist/assets/fleet-ship-ariake-ariake-bow.thick.svg +1 -0
  1227. package/dist/assets/fleet-ship-ariake-ariake-command.painted.svg +1 -0
  1228. package/dist/assets/fleet-ship-ariake-ariake-command.svg +1 -0
  1229. package/dist/assets/fleet-ship-ariake-ariake-command.thick.svg +1 -0
  1230. package/dist/assets/fleet-ship-ariake-ariake-cutaway-apart.painted.svg +1 -0
  1231. package/dist/assets/fleet-ship-ariake-ariake-cutaway-apart.svg +1 -0
  1232. package/dist/assets/fleet-ship-ariake-ariake-cutaway-apart.thick.svg +1 -0
  1233. package/dist/assets/fleet-ship-ariake-ariake-cutaway-bow.painted.svg +1 -0
  1234. package/dist/assets/fleet-ship-ariake-ariake-cutaway-bow.svg +1 -0
  1235. package/dist/assets/fleet-ship-ariake-ariake-cutaway-bow.thick.svg +1 -0
  1236. package/dist/assets/fleet-ship-ariake-ariake-cutaway-command.painted.svg +1 -0
  1237. package/dist/assets/fleet-ship-ariake-ariake-cutaway-command.svg +1 -0
  1238. package/dist/assets/fleet-ship-ariake-ariake-cutaway-command.thick.svg +1 -0
  1239. package/dist/assets/fleet-ship-ariake-ariake-cutaway-drive-collar.painted.svg +1 -0
  1240. package/dist/assets/fleet-ship-ariake-ariake-cutaway-drive-collar.svg +1 -0
  1241. package/dist/assets/fleet-ship-ariake-ariake-cutaway-drive-collar.thick.svg +1 -0
  1242. package/dist/assets/fleet-ship-ariake-ariake-cutaway-drive.painted.svg +1 -0
  1243. package/dist/assets/fleet-ship-ariake-ariake-cutaway-drive.svg +1 -0
  1244. package/dist/assets/fleet-ship-ariake-ariake-cutaway-drive.thick.svg +1 -0
  1245. package/dist/assets/fleet-ship-ariake-ariake-cutaway-engineering.painted.svg +1 -0
  1246. package/dist/assets/fleet-ship-ariake-ariake-cutaway-engineering.svg +1 -0
  1247. package/dist/assets/fleet-ship-ariake-ariake-cutaway-engineering.thick.svg +1 -0
  1248. package/dist/assets/fleet-ship-ariake-ariake-cutaway-fuel-aft.painted.svg +1 -0
  1249. package/dist/assets/fleet-ship-ariake-ariake-cutaway-fuel-aft.svg +1 -0
  1250. package/dist/assets/fleet-ship-ariake-ariake-cutaway-fuel-aft.thick.svg +1 -0
  1251. package/dist/assets/fleet-ship-ariake-ariake-cutaway-fuel-fore.painted.svg +1 -0
  1252. package/dist/assets/fleet-ship-ariake-ariake-cutaway-fuel-fore.svg +1 -0
  1253. package/dist/assets/fleet-ship-ariake-ariake-cutaway-fuel-fore.thick.svg +1 -0
  1254. package/dist/assets/fleet-ship-ariake-ariake-cutaway-habitat.painted.svg +1 -0
  1255. package/dist/assets/fleet-ship-ariake-ariake-cutaway-habitat.svg +1 -0
  1256. package/dist/assets/fleet-ship-ariake-ariake-cutaway-habitat.thick.svg +1 -0
  1257. package/dist/assets/fleet-ship-ariake-ariake-cutaway-hangar-port-aft.painted.svg +1 -0
  1258. package/dist/assets/fleet-ship-ariake-ariake-cutaway-hangar-port-aft.svg +1 -0
  1259. package/dist/assets/fleet-ship-ariake-ariake-cutaway-hangar-port-aft.thick.svg +1 -0
  1260. package/dist/assets/fleet-ship-ariake-ariake-cutaway-hangar-port.painted.svg +1 -0
  1261. package/dist/assets/fleet-ship-ariake-ariake-cutaway-hangar-port.svg +1 -0
  1262. package/dist/assets/fleet-ship-ariake-ariake-cutaway-hangar-port.thick.svg +1 -0
  1263. package/dist/assets/fleet-ship-ariake-ariake-cutaway-hangar-starboard-fore.painted.svg +1 -0
  1264. package/dist/assets/fleet-ship-ariake-ariake-cutaway-hangar-starboard-fore.svg +1 -0
  1265. package/dist/assets/fleet-ship-ariake-ariake-cutaway-hangar-starboard-fore.thick.svg +1 -0
  1266. package/dist/assets/fleet-ship-ariake-ariake-cutaway-hangar-starboard.painted.svg +1 -0
  1267. package/dist/assets/fleet-ship-ariake-ariake-cutaway-hangar-starboard.svg +1 -0
  1268. package/dist/assets/fleet-ship-ariake-ariake-cutaway-hangar-starboard.thick.svg +1 -0
  1269. package/dist/assets/fleet-ship-ariake-ariake-cutaway-pod.painted.svg +1 -0
  1270. package/dist/assets/fleet-ship-ariake-ariake-cutaway-pod.svg +1 -0
  1271. package/dist/assets/fleet-ship-ariake-ariake-cutaway-pod.thick.svg +1 -0
  1272. package/dist/assets/fleet-ship-ariake-ariake-cutaway-radiators-dorsal.painted.svg +1 -0
  1273. package/dist/assets/fleet-ship-ariake-ariake-cutaway-radiators-dorsal.svg +1 -0
  1274. package/dist/assets/fleet-ship-ariake-ariake-cutaway-radiators-dorsal.thick.svg +1 -0
  1275. package/dist/assets/fleet-ship-ariake-ariake-cutaway-radiators-ventral.painted.svg +1 -0
  1276. package/dist/assets/fleet-ship-ariake-ariake-cutaway-radiators-ventral.svg +1 -0
  1277. package/dist/assets/fleet-ship-ariake-ariake-cutaway-radiators-ventral.thick.svg +1 -0
  1278. package/dist/assets/fleet-ship-ariake-ariake-cutaway.painted.svg +1 -0
  1279. package/dist/assets/fleet-ship-ariake-ariake-cutaway.svg +1 -0
  1280. package/dist/assets/fleet-ship-ariake-ariake-cutaway.thick.svg +1 -0
  1281. package/dist/assets/fleet-ship-ariake-ariake-drive-collar.painted.svg +1 -0
  1282. package/dist/assets/fleet-ship-ariake-ariake-drive-collar.svg +1 -0
  1283. package/dist/assets/fleet-ship-ariake-ariake-drive-collar.thick.svg +1 -0
  1284. package/dist/assets/fleet-ship-ariake-ariake-drive.painted.svg +1 -0
  1285. package/dist/assets/fleet-ship-ariake-ariake-drive.svg +1 -0
  1286. package/dist/assets/fleet-ship-ariake-ariake-drive.thick.svg +1 -0
  1287. package/dist/assets/fleet-ship-ariake-ariake-engineering.painted.svg +1 -0
  1288. package/dist/assets/fleet-ship-ariake-ariake-engineering.svg +1 -0
  1289. package/dist/assets/fleet-ship-ariake-ariake-engineering.thick.svg +1 -0
  1290. package/dist/assets/fleet-ship-ariake-ariake-fuel-aft.painted.svg +1 -0
  1291. package/dist/assets/fleet-ship-ariake-ariake-fuel-aft.svg +1 -0
  1292. package/dist/assets/fleet-ship-ariake-ariake-fuel-aft.thick.svg +1 -0
  1293. package/dist/assets/fleet-ship-ariake-ariake-fuel-fore.painted.svg +1 -0
  1294. package/dist/assets/fleet-ship-ariake-ariake-fuel-fore.svg +1 -0
  1295. package/dist/assets/fleet-ship-ariake-ariake-fuel-fore.thick.svg +1 -0
  1296. package/dist/assets/fleet-ship-ariake-ariake-habitat.painted.svg +1 -0
  1297. package/dist/assets/fleet-ship-ariake-ariake-habitat.svg +1 -0
  1298. package/dist/assets/fleet-ship-ariake-ariake-habitat.thick.svg +1 -0
  1299. package/dist/assets/fleet-ship-ariake-ariake-hangar-port-aft.painted.svg +1 -0
  1300. package/dist/assets/fleet-ship-ariake-ariake-hangar-port-aft.svg +1 -0
  1301. package/dist/assets/fleet-ship-ariake-ariake-hangar-port-aft.thick.svg +1 -0
  1302. package/dist/assets/fleet-ship-ariake-ariake-hangar-port.painted.svg +1 -0
  1303. package/dist/assets/fleet-ship-ariake-ariake-hangar-port.svg +1 -0
  1304. package/dist/assets/fleet-ship-ariake-ariake-hangar-port.thick.svg +1 -0
  1305. package/dist/assets/fleet-ship-ariake-ariake-hangar-starboard-fore.painted.svg +1 -0
  1306. package/dist/assets/fleet-ship-ariake-ariake-hangar-starboard-fore.svg +1 -0
  1307. package/dist/assets/fleet-ship-ariake-ariake-hangar-starboard-fore.thick.svg +1 -0
  1308. package/dist/assets/fleet-ship-ariake-ariake-hangar-starboard.painted.svg +1 -0
  1309. package/dist/assets/fleet-ship-ariake-ariake-hangar-starboard.svg +1 -0
  1310. package/dist/assets/fleet-ship-ariake-ariake-hangar-starboard.thick.svg +1 -0
  1311. package/dist/assets/fleet-ship-ariake-ariake-pod.painted.svg +1 -0
  1312. package/dist/assets/fleet-ship-ariake-ariake-pod.svg +1 -0
  1313. package/dist/assets/fleet-ship-ariake-ariake-pod.thick.svg +1 -0
  1314. package/dist/assets/fleet-ship-ariake-ariake-radiators-dorsal.painted.svg +1 -0
  1315. package/dist/assets/fleet-ship-ariake-ariake-radiators-dorsal.svg +1 -0
  1316. package/dist/assets/fleet-ship-ariake-ariake-radiators-dorsal.thick.svg +1 -0
  1317. package/dist/assets/fleet-ship-ariake-ariake-radiators-ventral.painted.svg +1 -0
  1318. package/dist/assets/fleet-ship-ariake-ariake-radiators-ventral.svg +1 -0
  1319. package/dist/assets/fleet-ship-ariake-ariake-radiators-ventral.thick.svg +1 -0
  1320. package/dist/assets/fleet-ship-ariake-ariake.painted.svg +1 -0
  1321. package/dist/assets/fleet-ship-ariake-ariake.svg +1 -0
  1322. package/dist/assets/fleet-ship-ariake-ariake.thick.svg +1 -0
  1323. package/dist/assets/fleet-structure-adapter-l-m.painted.svg +1 -0
  1324. package/dist/assets/fleet-structure-adapter-l-m.svg +1 -0
  1325. package/dist/assets/fleet-structure-adapter-l-m.thick.svg +1 -0
  1326. package/dist/assets/fleet-structure-adapter-m-l.painted.svg +1 -0
  1327. package/dist/assets/fleet-structure-adapter-m-l.svg +1 -0
  1328. package/dist/assets/fleet-structure-adapter-m-l.thick.svg +1 -0
  1329. package/dist/assets/fleet-structure-node-four.painted.svg +1 -0
  1330. package/dist/assets/fleet-structure-node-four.svg +1 -0
  1331. package/dist/assets/fleet-structure-node-four.thick.svg +1 -0
  1332. package/dist/assets/fleet-structure-node-two.painted.svg +1 -0
  1333. package/dist/assets/fleet-structure-node-two.svg +1 -0
  1334. package/dist/assets/fleet-structure-node-two.thick.svg +1 -0
  1335. package/dist/assets/fleet-structure-shield-forward.painted.svg +1 -0
  1336. package/dist/assets/fleet-structure-shield-forward.svg +1 -0
  1337. package/dist/assets/fleet-structure-shield-forward.thick.svg +1 -0
  1338. package/dist/assets/fleet-structure-truss-l-24.painted.svg +1 -0
  1339. package/dist/assets/fleet-structure-truss-l-24.svg +1 -0
  1340. package/dist/assets/fleet-structure-truss-l-24.thick.svg +1 -0
  1341. package/dist/assets/fleet-structure-truss-m-12.painted.svg +1 -0
  1342. package/dist/assets/fleet-structure-truss-m-12.svg +1 -0
  1343. package/dist/assets/fleet-structure-truss-m-12.thick.svg +1 -0
  1344. package/dist/assets/fleet-systems-comms-array-m-cutaway.painted.svg +1 -0
  1345. package/dist/assets/fleet-systems-comms-array-m-cutaway.svg +1 -0
  1346. package/dist/assets/fleet-systems-comms-array-m-cutaway.thick.svg +1 -0
  1347. package/dist/assets/fleet-systems-comms-array-m.painted.svg +1 -0
  1348. package/dist/assets/fleet-systems-comms-array-m.svg +1 -0
  1349. package/dist/assets/fleet-systems-comms-array-m.thick.svg +1 -0
  1350. package/dist/assets/fleet-systems-mast-sensor-40.painted.svg +1 -0
  1351. package/dist/assets/fleet-systems-mast-sensor-40.svg +1 -0
  1352. package/dist/assets/fleet-systems-mast-sensor-40.thick.svg +1 -0
  1353. package/dist/assets/fleet-systems-radiator-deployed.painted.svg +1 -0
  1354. package/dist/assets/fleet-systems-radiator-deployed.svg +1 -0
  1355. package/dist/assets/fleet-systems-radiator-deployed.thick.svg +1 -0
  1356. package/dist/assets/fleet-systems-radiator-stowed.painted.svg +1 -0
  1357. package/dist/assets/fleet-systems-radiator-stowed.svg +1 -0
  1358. package/dist/assets/fleet-systems-radiator-stowed.thick.svg +1 -0
  1359. package/dist/assets/fleet-systems-reactor-fusion-cutaway.painted.svg +1 -0
  1360. package/dist/assets/fleet-systems-reactor-fusion-cutaway.svg +1 -0
  1361. package/dist/assets/fleet-systems-reactor-fusion-cutaway.thick.svg +1 -0
  1362. package/dist/assets/fleet-systems-reactor-fusion.painted.svg +1 -0
  1363. package/dist/assets/fleet-systems-reactor-fusion.svg +1 -0
  1364. package/dist/assets/fleet-systems-reactor-fusion.thick.svg +1 -0
  1365. package/dist/assets/fleet-tanks-tank-cryo-12-cutaway.painted.svg +1 -0
  1366. package/dist/assets/fleet-tanks-tank-cryo-12-cutaway.svg +1 -0
  1367. package/dist/assets/fleet-tanks-tank-cryo-12-cutaway.thick.svg +1 -0
  1368. package/dist/assets/fleet-tanks-tank-cryo-12.painted.svg +1 -0
  1369. package/dist/assets/fleet-tanks-tank-cryo-12.svg +1 -0
  1370. package/dist/assets/fleet-tanks-tank-cryo-12.thick.svg +1 -0
  1371. package/dist/assets/fleet-tanks-tank-cryo-24-cutaway.painted.svg +1 -0
  1372. package/dist/assets/fleet-tanks-tank-cryo-24-cutaway.svg +1 -0
  1373. package/dist/assets/fleet-tanks-tank-cryo-24-cutaway.thick.svg +1 -0
  1374. package/dist/assets/fleet-tanks-tank-cryo-24.painted.svg +1 -0
  1375. package/dist/assets/fleet-tanks-tank-cryo-24.svg +1 -0
  1376. package/dist/assets/fleet-tanks-tank-cryo-24.thick.svg +1 -0
  1377. package/dist/assets/fleet-tanks-tank-header-9-cutaway.painted.svg +1 -0
  1378. package/dist/assets/fleet-tanks-tank-header-9-cutaway.svg +1 -0
  1379. package/dist/assets/fleet-tanks-tank-header-9-cutaway.thick.svg +1 -0
  1380. package/dist/assets/fleet-tanks-tank-header-9.painted.svg +1 -0
  1381. package/dist/assets/fleet-tanks-tank-header-9.svg +1 -0
  1382. package/dist/assets/fleet-tanks-tank-header-9.thick.svg +1 -0
  1383. package/dist/assets/fleet-tanks-tank-slim-18-cutaway.painted.svg +1 -0
  1384. package/dist/assets/fleet-tanks-tank-slim-18-cutaway.svg +1 -0
  1385. package/dist/assets/fleet-tanks-tank-slim-18-cutaway.thick.svg +1 -0
  1386. package/dist/assets/fleet-tanks-tank-slim-18.painted.svg +1 -0
  1387. package/dist/assets/fleet-tanks-tank-slim-18.svg +1 -0
  1388. package/dist/assets/fleet-tanks-tank-slim-18.thick.svg +1 -0
  1389. package/dist/assets/fleet-tanks-tank-spheres-4-cutaway.painted.svg +1 -0
  1390. package/dist/assets/fleet-tanks-tank-spheres-4-cutaway.svg +1 -0
  1391. package/dist/assets/fleet-tanks-tank-spheres-4-cutaway.thick.svg +1 -0
  1392. package/dist/assets/fleet-tanks-tank-spheres-4.painted.svg +1 -0
  1393. package/dist/assets/fleet-tanks-tank-spheres-4.svg +1 -0
  1394. package/dist/assets/fleet-tanks-tank-spheres-4.thick.svg +1 -0
  1395. package/dist/assets/parts/fleet-02-nozzle-main.glb +0 -0
  1396. package/dist/assets/parts/fleet-02-nozzle-main.painted.svg +1 -0
  1397. package/dist/assets/parts/fleet-02-nozzle-main.svg +1 -0
  1398. package/dist/assets/parts/fleet-02-nozzle-main.thick.svg +1 -0
  1399. package/dist/assets/parts/fleet-02-vernier-cluster.glb +0 -0
  1400. package/dist/assets/parts/fleet-02-vernier-cluster.painted.svg +1 -0
  1401. package/dist/assets/parts/fleet-02-vernier-cluster.svg +1 -0
  1402. package/dist/assets/parts/fleet-02-vernier-cluster.thick.svg +1 -0
  1403. package/dist/build/glb.js +3 -2
  1404. package/dist/build/index.d.ts +16 -1
  1405. package/dist/build/index.js +38 -9
  1406. package/dist/build/lineup.d.ts +9 -1
  1407. package/dist/build/lineup.js +80 -8
  1408. package/dist/builder.js +2 -1
  1409. package/dist/data/fleet.d.ts +27 -0
  1410. package/dist/data/fleet.js +96 -0
  1411. package/dist/data/makers.d.ts +2 -1
  1412. package/dist/data/makers.js +5 -1
  1413. package/dist/data/ship-03.d.ts +12 -0
  1414. package/dist/data/ship-03.js +103 -0
  1415. package/dist/data/ship02.d.ts +3 -0
  1416. package/dist/data/ship02.js +100 -0
  1417. package/dist/data/sources.d.ts +16 -0
  1418. package/dist/data/sources.js +2 -0
  1419. package/dist/data/types.d.ts +59 -1
  1420. package/dist/element/panel.d.ts +34 -0
  1421. package/dist/element/panel.js +144 -0
  1422. package/dist/element/scene.d.ts +45 -1
  1423. package/dist/element/scene.js +173 -2
  1424. package/dist/element.d.ts +22 -0
  1425. package/dist/element.js +112 -5
  1426. package/dist/embed.d.ts +2 -0
  1427. package/dist/embed.js +3 -2
  1428. package/dist/index.d.ts +14 -0
  1429. package/dist/index.js +7 -0
  1430. package/dist/model/detail.d.ts +10 -0
  1431. package/dist/model/detail.js +19 -0
  1432. package/dist/model/fleet/ancestors.d.ts +5 -0
  1433. package/dist/model/fleet/ancestors.js +47 -0
  1434. package/dist/model/fleet/collars.d.ts +76 -0
  1435. package/dist/model/fleet/collars.js +76 -0
  1436. package/dist/model/fleet/detail.d.ts +445 -0
  1437. package/dist/model/fleet/detail.js +1095 -0
  1438. package/dist/model/fleet/engines.d.ts +217 -0
  1439. package/dist/model/fleet/engines.js +207 -0
  1440. package/dist/model/fleet/glossary.d.ts +44 -0
  1441. package/dist/model/fleet/glossary.js +34 -0
  1442. package/dist/model/fleet/hull.d.ts +58 -0
  1443. package/dist/model/fleet/hull.js +174 -0
  1444. package/dist/model/fleet/insets.d.ts +51 -0
  1445. package/dist/model/fleet/insets.js +69 -0
  1446. package/dist/model/fleet/kit.d.ts +254 -0
  1447. package/dist/model/fleet/kit.js +345 -0
  1448. package/dist/model/fleet/layers.d.ts +84 -0
  1449. package/dist/model/fleet/layers.js +122 -0
  1450. package/dist/model/fleet/levels.d.ts +30 -0
  1451. package/dist/model/fleet/levels.js +41 -0
  1452. package/dist/model/fleet/modules.d.ts +76 -0
  1453. package/dist/model/fleet/modules.js +1223 -0
  1454. package/dist/model/fleet/palette.d.ts +66 -0
  1455. package/dist/model/fleet/palette.js +57 -0
  1456. package/dist/model/fleet/sections.d.ts +45 -0
  1457. package/dist/model/fleet/sections.js +234 -0
  1458. package/dist/model/fleet/sheet.d.ts +343 -0
  1459. package/dist/model/fleet/sheet.js +275 -0
  1460. package/dist/model/fleet/ship-02/adapter.d.ts +110 -0
  1461. package/dist/model/fleet/ship-02/adapter.js +453 -0
  1462. package/dist/model/fleet/ship-02/cargo.d.ts +6 -0
  1463. package/dist/model/fleet/ship-02/cargo.js +173 -0
  1464. package/dist/model/fleet/ship-02/command.d.ts +5 -0
  1465. package/dist/model/fleet/ship-02/command.js +99 -0
  1466. package/dist/model/fleet/ship-02/dims.d.ts +93 -0
  1467. package/dist/model/fleet/ship-02/dims.js +40 -0
  1468. package/dist/model/fleet/ship-02/dock.d.ts +3 -0
  1469. package/dist/model/fleet/ship-02/dock.js +102 -0
  1470. package/dist/model/fleet/ship-02/drive.d.ts +10 -0
  1471. package/dist/model/fleet/ship-02/drive.js +146 -0
  1472. package/dist/model/fleet/ship-02/farm.d.ts +3 -0
  1473. package/dist/model/fleet/ship-02/farm.js +91 -0
  1474. package/dist/model/fleet/ship-02/habitat.d.ts +4 -0
  1475. package/dist/model/fleet/ship-02/habitat.js +124 -0
  1476. package/dist/model/fleet/ship-02/headers.d.ts +7 -0
  1477. package/dist/model/fleet/ship-02/headers.js +34 -0
  1478. package/dist/model/fleet/ship-02/index.d.ts +65 -0
  1479. package/dist/model/fleet/ship-02/index.js +102 -0
  1480. package/dist/model/fleet/ship-02/journey.d.ts +59 -0
  1481. package/dist/model/fleet/ship-02/journey.js +59 -0
  1482. package/dist/model/fleet/ship-02/lines.d.ts +2 -0
  1483. package/dist/model/fleet/ship-02/lines.js +53 -0
  1484. package/dist/model/fleet/ship-02/pod.d.ts +17 -0
  1485. package/dist/model/fleet/ship-02/pod.js +119 -0
  1486. package/dist/model/fleet/ship-02/radiators.d.ts +5 -0
  1487. package/dist/model/fleet/ship-02/radiators.js +62 -0
  1488. package/dist/model/fleet/ship-02/reactor.d.ts +6 -0
  1489. package/dist/model/fleet/ship-02/reactor.js +133 -0
  1490. package/dist/model/fleet/ship-02/sections.d.ts +15 -0
  1491. package/dist/model/fleet/ship-02/sections.js +74 -0
  1492. package/dist/model/fleet/ship-02/shield.d.ts +2 -0
  1493. package/dist/model/fleet/ship-02/shield.js +72 -0
  1494. package/dist/model/fleet/ship-02/specs.d.ts +122 -0
  1495. package/dist/model/fleet/ship-02/specs.js +276 -0
  1496. package/dist/model/fleet/ship-02/spine.d.ts +2 -0
  1497. package/dist/model/fleet/ship-02/spine.js +64 -0
  1498. package/dist/model/fleet/ship-02/tanks.d.ts +5 -0
  1499. package/dist/model/fleet/ship-02/tanks.js +131 -0
  1500. package/dist/model/fleet/ship-02/tips.d.ts +3 -0
  1501. package/dist/model/fleet/ship-02/tips.js +18 -0
  1502. package/dist/model/fleet/ship-03/adapter.d.ts +41 -0
  1503. package/dist/model/fleet/ship-03/adapter.js +73 -0
  1504. package/dist/model/fleet/ship-03/ariake.d.ts +12 -0
  1505. package/dist/model/fleet/ship-03/ariake.js +62 -0
  1506. package/dist/model/fleet/ship-03/bow.d.ts +2 -0
  1507. package/dist/model/fleet/ship-03/bow.js +101 -0
  1508. package/dist/model/fleet/ship-03/command.d.ts +8 -0
  1509. package/dist/model/fleet/ship-03/command.js +231 -0
  1510. package/dist/model/fleet/ship-03/dims.d.ts +201 -0
  1511. package/dist/model/fleet/ship-03/dims.js +66 -0
  1512. package/dist/model/fleet/ship-03/drive.d.ts +11 -0
  1513. package/dist/model/fleet/ship-03/drive.js +266 -0
  1514. package/dist/model/fleet/ship-03/engineering.d.ts +5 -0
  1515. package/dist/model/fleet/ship-03/engineering.js +59 -0
  1516. package/dist/model/fleet/ship-03/faces.d.ts +78 -0
  1517. package/dist/model/fleet/ship-03/faces.js +218 -0
  1518. package/dist/model/fleet/ship-03/habitat.d.ts +19 -0
  1519. package/dist/model/fleet/ship-03/habitat.js +98 -0
  1520. package/dist/model/fleet/ship-03/hangar.d.ts +10 -0
  1521. package/dist/model/fleet/ship-03/hangar.js +278 -0
  1522. package/dist/model/fleet/ship-03/hex.d.ts +24 -0
  1523. package/dist/model/fleet/ship-03/hex.js +48 -0
  1524. package/dist/model/fleet/ship-03/hulls.d.ts +50 -0
  1525. package/dist/model/fleet/ship-03/hulls.js +140 -0
  1526. package/dist/model/fleet/ship-03/index.d.ts +37 -0
  1527. package/dist/model/fleet/ship-03/index.js +134 -0
  1528. package/dist/model/fleet/ship-03/insets.d.ts +18 -0
  1529. package/dist/model/fleet/ship-03/insets.js +55 -0
  1530. package/dist/model/fleet/ship-03/nose.d.ts +2 -0
  1531. package/dist/model/fleet/ship-03/nose.js +136 -0
  1532. package/dist/model/fleet/ship-03/pod.d.ts +3 -0
  1533. package/dist/model/fleet/ship-03/pod.js +133 -0
  1534. package/dist/model/fleet/ship-03/radiators.d.ts +3 -0
  1535. package/dist/model/fleet/ship-03/radiators.js +97 -0
  1536. package/dist/model/fleet/ship-03/shapes.d.ts +18 -0
  1537. package/dist/model/fleet/ship-03/shapes.js +51 -0
  1538. package/dist/model/fleet/ship-03/solar.d.ts +4 -0
  1539. package/dist/model/fleet/ship-03/solar.js +93 -0
  1540. package/dist/model/fleet/ship-03/specs.d.ts +231 -0
  1541. package/dist/model/fleet/ship-03/specs.js +297 -0
  1542. package/dist/model/fleet/ship-03/tanks.d.ts +5 -0
  1543. package/dist/model/fleet/ship-03/tanks.js +180 -0
  1544. package/dist/model/fleet/ship-03/variants.d.ts +4 -0
  1545. package/dist/model/fleet/ship-03/variants.js +25 -0
  1546. package/dist/model/fleet/sizes.d.ts +1 -0
  1547. package/dist/model/fleet/sizes.js +43 -0
  1548. package/dist/model/fleet/types.d.ts +149 -0
  1549. package/dist/model/fleet/types.js +1 -0
  1550. package/dist/model/materials.d.ts +276 -0
  1551. package/dist/model/materials.js +43 -0
  1552. package/dist/model/pieces.d.ts +23 -0
  1553. package/dist/model/pieces.js +198 -3
  1554. package/dist/model/registry.js +22 -2
  1555. package/dist/model/ship-03.d.ts +5 -0
  1556. package/dist/model/ship-03.js +39 -0
  1557. package/dist/model/ship02.d.ts +2 -0
  1558. package/dist/model/ship02.js +23 -0
  1559. package/dist/parts.d.ts +1 -1
  1560. package/dist/react.d.ts +4 -4
  1561. package/dist/rockets.js +41 -0
  1562. package/package.json +2 -2
@@ -0,0 +1,1095 @@
1
+ // The fleet's detail kit: the small shapes every module is covered with, so no surface is bare. Panels, hatches, conduits, radiators, thermal tiles, joints, antennae, lamps, vents, ladders, stencils and
2
+ // greebles, all plain pieces in metres (the same `Piece` every other part is made of), all deterministic: a seeded random number, never a clock. Pure: no three.js and no DOM.
3
+ //
4
+ // A cylinder's surface is addressed by azimuth (radians round the Y axis from +Z towards +X), height and radius. A shape lying on it is a `Plate` in the tangent frame `patch(r, az, y)`: u along the circle,
5
+ // v up, w outwards. Repeated shapes go through `stamp`, which places one template many times; every stamp is merged into the part's mesh, so detail costs vertices and no draw calls.
6
+ import { deg } from "../../framing.js";
7
+ import { pointOf } from "../pieces.js";
8
+ /** @param seed Any text. @returns A function giving numbers from 0 up to (not including) 1, always the same ones for the same seed. */
9
+ export function rng(seed) {
10
+ let h = 2166136261;
11
+ for (let i = 0; i < seed.length; i++)
12
+ h = Math.imul(h ^ seed.charCodeAt(i), 16777619);
13
+ let a = h >>> 0;
14
+ return () => {
15
+ a = (a + 0x6d2b79f5) | 0;
16
+ let t = Math.imul(a ^ (a >>> 15), 1 | a);
17
+ t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t;
18
+ return ((t ^ (t >>> 14)) >>> 0) / 4294967296;
19
+ };
20
+ }
21
+ const add = (a, b) => [a[0] + b[0], a[1] + b[1], a[2] + b[2]];
22
+ const sub = (a, b) => [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
23
+ const mul = (a, k) => [a[0] * k, a[1] * k, a[2] * k];
24
+ const len = (a) => Math.hypot(a[0], a[1], a[2]);
25
+ const unit = (a) => mul(a, 1 / (len(a) || 1));
26
+ const cross = (a, b) => [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
27
+ // ---------------------------------------------------------------------------------------------------------------------------------
28
+ // frames and solids
29
+ /** The tangent frame at a point of a cylinder: u along the circle, v up, w outwards. A plate lying in it lies on the surface. */
30
+ export function patch(r, az, y) {
31
+ const n = [Math.sin(az), 0, Math.cos(az)];
32
+ return { o: [n[0] * r, y, n[2] * r], u: [n[2], 0, -n[0]], v: [0, 1, 0], w: n };
33
+ }
34
+ /** The sag of a flat piece `wide` across on a cylinder of radius `r`: how far its edges stand off the surface. */
35
+ export const sagOf = (r, wide) => (r > wide / 2 ? r - Math.sqrt(r * r - (wide / 2) ** 2) : 0);
36
+ /** A raised rectangle lying on a cylinder, `wide` along the circle and `tall` up it, `raise` metres proud of the surface. */
37
+ export function panel(material, r, az, y, wide, tall, raise, extra = {}) {
38
+ const f = patch(r, az, y);
39
+ const lift = raise / 2 - sagOf(r, wide) / 2;
40
+ const o = add(f.o, mul(f.w, lift));
41
+ return { kind: "plate", material, frame: { ...f, o }, outline: [[-wide / 2, -tall / 2], [wide / 2, -tall / 2], [wide / 2, tall / 2], [-wide / 2, tall / 2]], thickness: raise + sagOf(r, wide), plain: false, only: "mesh", ...extra };
42
+ }
43
+ /** A box standing on a plane: centre of its base at `at`, turned `yaw` degrees about Y; `wide` along its u, `deep` along its v, `tall` up. */
44
+ export function box(material, at, wide, deep, tall, yaw = 0, extra = {}) {
45
+ const c = Math.cos(deg(yaw));
46
+ const s = Math.sin(deg(yaw));
47
+ return { kind: "plate", material, frame: { o: [at[0], at[1] + tall / 2, at[2]], u: [c, 0, s], v: [-s, 0, c], w: [0, 1, 0] }, outline: [[-wide / 2, -deep / 2], [wide / 2, -deep / 2], [wide / 2, deep / 2], [-wide / 2, deep / 2]], thickness: tall, plain: true, only: "mesh", ...extra };
48
+ }
49
+ /** Two perpendicular directions to a unit axis. */
50
+ function across(w) {
51
+ const seed = Math.abs(w[1]) < 0.9 ? [0, 1, 0] : [1, 0, 0];
52
+ const u = unit(cross(seed, w));
53
+ return [u, cross(w, u)];
54
+ }
55
+ /** A round rod (a prism with `sides` faces) from a to b: a pipe, a boom, a cable, a strut. */
56
+ export function rod(material, a, b, radius, sides = 10, extra = {}) {
57
+ const along = sub(b, a);
58
+ const w = unit(along);
59
+ const [u, v] = across(w);
60
+ const outline = [];
61
+ for (let i = 0; i < sides; i++)
62
+ outline.push([radius * Math.cos((2 * Math.PI * i) / sides), radius * Math.sin((2 * Math.PI * i) / sides)]);
63
+ return { kind: "plate", material, frame: { o: mul(add(a, b), 0.5), u, v, w }, outline, thickness: len(along), plain: true, only: "mesh", ...extra };
64
+ }
65
+ /** A flat-sided beam from a to b, `wide` by `deep`. */
66
+ export function beam(material, a, b, wide, deep, extra = {}) {
67
+ const along = sub(b, a);
68
+ const w = unit(along);
69
+ const [u, v] = across(w);
70
+ return { kind: "plate", material, frame: { o: mul(add(a, b), 0.5), u, v, w }, outline: [[-wide / 2, -deep / 2], [wide / 2, -deep / 2], [wide / 2, deep / 2], [-wide / 2, deep / 2]], thickness: len(along), plain: true, only: "mesh", ...extra };
71
+ }
72
+ /** A cone or bowl on any axis, built from a few stacked prisms, `radii` from the `a` end to the `b` end: a dish, a horn, a sensor head. */
73
+ export function horn(material, a, b, radii, sides = 12, extra = {}) {
74
+ const out = [];
75
+ const n = radii.length;
76
+ for (let i = 0; i < n; i++) {
77
+ const p = add(a, mul(sub(b, a), i / n));
78
+ const q = add(a, mul(sub(b, a), (i + 1) / n));
79
+ out.push(rod(material, p, q, radii[i], sides, extra));
80
+ }
81
+ return out;
82
+ }
83
+ /** A vertical lathe, simple: a straight tube or taper at an offset, from y0 to y1. */
84
+ export const post = (material, at, r0, y0, r1, y1, segs = 8, extra = {}) => ({ kind: "lathe", material, at, segs, profile: [[r0, y0], [r1, y1]], only: "mesh", ...extra });
85
+ /** A vertical disc (a lid, a plate, a pad) at height y, closed on both faces. */
86
+ export const disc = (material, at, r, y, thick, segs = 16, extra = {}) => ({ kind: "lathe", material, at, segs, profile: [[0.001, y], [r, y], [r, y + thick], [0.001, y + thick]], only: "mesh", ...extra });
87
+ /** A ring of rectangular section round the axis: inside radius `r0`, outside `r1`, from y0 to y1. */
88
+ export const annulus = (material, r0, r1, y0, y1, segs = 48, extra = {}) => ({ kind: "lathe", material, segs, profile: [[r1, y0], [r1, y1], [r0, y1], [r0, y0], [r1, y0]], ...extra });
89
+ /** A round tube bent into a ring (a torus) of major radius `major` and tube radius `minor`, at height y: a cable ring, a field coil, a hoop. */
90
+ export function hoop(material, major, y, minor, segs = 32, sides = 8, extra = {}) {
91
+ const profile = [];
92
+ for (let i = 0; i <= sides; i++) {
93
+ const t = -Math.PI / 2 + (2 * Math.PI * i) / sides;
94
+ profile.push([major + minor * Math.cos(t), y + minor * Math.sin(t)]);
95
+ }
96
+ return { kind: "lathe", material, segs, profile, only: "mesh", ...extra };
97
+ }
98
+ /** Lines in the drawing only: seams, so the line looks read the same as the mesh. */
99
+ export const seams = (weight, paths) => ({ kind: "lines", weight, paths, only: "drawing" });
100
+ /** Pieces moved to a pose: turned about Y, then moved. A lathe keeps its axis (vertical): its offset, arc and lean turn with it. Everything the kit draws goes through this, and so does a ship's assembly. */
101
+ export function place(pieces, pose) {
102
+ const t = deg(pose.yaw ?? 0);
103
+ const c = Math.cos(t);
104
+ const s = Math.sin(t);
105
+ const turn = (p) => [p[0] * c + p[2] * s, p[1], -p[0] * s + p[2] * c];
106
+ const at = (p) => add(turn(p), pose.at);
107
+ return pieces.map((piece) => {
108
+ const move = piece.move ? { ...piece.move, pivot: at(piece.move.pivot), axis: turn(piece.move.axis) } : undefined;
109
+ const common = move ? { move } : {};
110
+ if (piece.kind === "plate")
111
+ return { ...piece, ...common, frame: { o: at(piece.frame.o), u: turn(piece.frame.u), v: turn(piece.frame.v), w: turn(piece.frame.w) } };
112
+ if (piece.kind === "lines")
113
+ return { ...piece, ...common, paths: piece.paths.map((path) => path.map(at)) };
114
+ const [ox, oz] = piece.at ?? [0, 0];
115
+ const o = at([ox, 0, oz]);
116
+ const dy = pose.at[1];
117
+ const lean = piece.lean ? [piece.lean[0] * c + piece.lean[1] * s, -piece.lean[0] * s + piece.lean[1] * c] : undefined;
118
+ const arc = piece.arc;
119
+ return {
120
+ ...piece,
121
+ ...common,
122
+ at: [o[0], o[2]],
123
+ profile: piece.profile.map(([r, y]) => [r, y + dy]),
124
+ ...(piece.rings ? { rings: piece.rings.map((y) => y + dy) } : {}),
125
+ ...(piece.welds ? { welds: piece.welds.map((y) => y + dy) } : {}),
126
+ ...(lean ? { lean } : {}),
127
+ ...(arc ? { arc: (y) => [arc(y - dy)[0] + t, arc(y - dy)[1] + t] } : {}),
128
+ };
129
+ });
130
+ }
131
+ /** One template put at many poses. The way to repeat bolts, windows, tiles, nozzles, containers: the template is written once and every copy is merged into the part's mesh. */
132
+ export const stamp = (template, poses) => poses.flatMap((pose) => place(template, pose));
133
+ /** `count` poses evenly round a circle of radius `r` at height `y`, the first at `start` degrees, each turned to face outwards. */
134
+ export function ringOf(count, r, y, start = 0) {
135
+ return Array.from({ length: count }, (_, i) => {
136
+ const a = start + (360 * i) / count;
137
+ return { at: [r * Math.sin(deg(a)), y, r * Math.cos(deg(a))], yaw: a };
138
+ });
139
+ }
140
+ /**
141
+ * The fleet's liveries. Every one is mostly white thermal blanket, with a few rigid panels in light grey or white, foil on the hardware that wears it, and orange only on small removable access panels (blue on the command scheme): colour is
142
+ * small and functional, as on the ISS, JWST and Orion's service module.
143
+ *
144
+ * @example
145
+ * ```ts
146
+ * import { LIVERY } from "@johnmorrisdotca/uchusen-rockets";
147
+ *
148
+ * console.log(LIVERY.industrial.main, LIVERY.command.block);
149
+ * ```
150
+ */
151
+ export const LIVERY = {
152
+ industrial: { main: "blanket", mainWorn: "blanket-worn", block: "hull-white", blockWorn: "hull-white-worn", accent: "hull-orange", dark: "panel-dark", under: "hull-grey", foil: "kapton" },
153
+ science: { main: "blanket", mainWorn: "blanket-worn", block: "hull-white", blockWorn: "hull-white-worn", accent: "hull-orange", dark: "panel-dark", under: "hull-grey", foil: "foil" },
154
+ command: { main: "blanket", mainWorn: "blanket-worn", block: "hull-grey", blockWorn: "hull-grey-dark", accent: "hull-blue", dark: "panel-dark", under: "hull-grey", foil: "foil" },
155
+ foil: { main: "blanket", mainWorn: "blanket-worn", block: "kapton", blockWorn: "foil", accent: "hull-orange", dark: "panel-dark", under: "hull-grey", foil: "kapton" },
156
+ transport: { main: "blanket", mainWorn: "blanket-worn", block: "hull-white", blockWorn: "hull-white-worn", accent: "hull-orange", dark: "panel-dark", under: "hull-grey", foil: "foil" },
157
+ };
158
+ /** Hexagonal bolt heads on a frame's face, as flat hexes standing `lift` metres off it: the rows of fixings on a panel's frame. */
159
+ export function bolts(f, spots, size, lift, material = "hull-grey-dark") {
160
+ const outline = Array.from({ length: 6 }, (_, i) => [(size / 2) * Math.cos((Math.PI * i) / 3), (size / 2) * Math.sin((Math.PI * i) / 3)]);
161
+ return spots.map(([a, b]) => ({ kind: "plate", material, frame: { o: pointOf(f, a, b, lift), u: f.u, v: f.v, w: f.w }, outline, thickness: 0.004, plain: true, sheet: true, only: "mesh" }));
162
+ }
163
+ /** A grab handle: two stanchions and a round bar, standing `lift` off a frame's face, `length` long along u, centred at (a, b). */
164
+ export function grabHandle(f, a, b, length, lift) {
165
+ const at = (p, h) => pointOf(f, a + p, b, h);
166
+ return [rod("hull-yellow", at(-length / 2, lift + 0.11), at(length / 2, lift + 0.11), 0.026, 8), rod("hull-grey-dark", at(-length / 2, lift), at(-length / 2, lift + 0.11), 0.018, 6), rod("hull-grey-dark", at(length / 2, lift), at(length / 2, lift + 0.11), 0.018, 6)];
167
+ }
168
+ /** How many cells a quilt of this size has along a side: about every 0.7 m. */
169
+ const cellsOf = (size) => Math.max(1, Math.min(6, Math.round(size / 0.7)));
170
+ /** A quilted thermal blanket on a cylinder: a raised skin of pillows with a crease where two meet, so light and shadow run across it. */
171
+ export function blanketPanel(material, r, az, y, wide, tall, raise) {
172
+ const nu = cellsOf(wide);
173
+ const nv = cellsOf(tall);
174
+ const bulge = Math.min(0.1, 0.16 * Math.min(wide / nu, tall / nv));
175
+ return panel(material, r, az, y, wide, tall, raise, { quilt: { nu, nv, bulge } });
176
+ }
177
+ /** A rigid panel with a raised frame round a sunk field, and bolts in the frame's corners (and along it when it is big): plating, an access panel, a louvre. */
178
+ export function framedPanel(frame, field, r, az, y, wide, tall, raise, bolted = true) {
179
+ const margin = Math.min(0.1, Math.min(wide, tall) * 0.1);
180
+ const out = [panel(frame, r, az, y, wide, tall, raise, { top: field, inset: { margin, depth: Math.min(0.035, raise * 0.6) } })];
181
+ if (bolted && Math.min(wide, tall) > 0.5) {
182
+ const f = patch(r, az, y);
183
+ const lift = raise + 0.01 - sagOf(r, wide) * 0.5;
184
+ const hw = wide / 2 - margin / 2;
185
+ const hh = tall / 2 - margin / 2;
186
+ const spots = [[-hw, -hh], [hw, -hh], [hw, hh], [-hw, hh]];
187
+ if (wide > 1.6)
188
+ spots.push([0, -hh], [0, hh]);
189
+ out.push(...bolts(f, spots, Math.min(0.07, margin * 0.7), lift));
190
+ }
191
+ return out;
192
+ }
193
+ /**
194
+ * A window in a hull of radius `r` at azimuth `az` and height `y`: a framed port with a raised frame and bolts, a pane that reflects the sky (and glows when the engines are lit), mullions across it every metre or so and a lit sill strip under it.
195
+ * Glass reads as glass: a dark reflective pane held in a frame, never a flat coloured slab.
196
+ */
197
+ export function glazing(r, az, y, wide, tall, raise = 0.1, pane = "window") {
198
+ const out = framedPanel("hull-grey", pane, r, az, y, wide, tall, raise, wide > 0.9);
199
+ const f = patch(r, az, y);
200
+ const lift = raise + 0.012 - sagOf(r, wide) * 0.5;
201
+ const bars = Math.floor(wide / 1.1);
202
+ for (let k = 1; k <= bars; k++) {
203
+ const a = (k / (bars + 1) - 0.5) * (wide - 0.2);
204
+ out.push(beam("hull-grey", pointOf(f, a, -tall / 2 + 0.08, lift), pointOf(f, a, tall / 2 - 0.08, lift), 0.05, 0.04, { plain: false }));
205
+ }
206
+ if (tall > 0.7)
207
+ out.push(beam("hull-grey", pointOf(f, -wide / 2 + 0.12, 0, lift), pointOf(f, wide / 2 - 0.12, 0, lift), 0.035, 0.04, { plain: false }));
208
+ out.push(panel("lamp-blue", r, az, y - tall / 2 + 0.06, Math.max(0.1, wide - 0.4), 0.05, raise + 0.02));
209
+ return out;
210
+ }
211
+ /**
212
+ * Crinkled foil on a cylinder: a skin of flat triangles with each corner pushed in or out a little, so every facet takes the light on its own, as the multi-layer insulation of Hubble, JWST and the lunar module does. `cell` is the size of a facet's cell,
213
+ * `crumple` how far a corner can be pushed.
214
+ *
215
+ * @param material `foil` (silver) or `kapton` (gold), or any material.
216
+ * @param r Radius of the surface under it.
217
+ * @param y0 Bottom of the band.
218
+ * @param y1 Top of the band.
219
+ * @param a0 First azimuth, radians.
220
+ * @param a1 Last azimuth, radians.
221
+ * @param seed Any text: the same text gives the same crinkles.
222
+ * @param cell Size of a facet's cell, metres.
223
+ * @param crumple How far a corner is pushed in or out, metres.
224
+ * @returns The pieces: a few plates, each holding a few hundred facets.
225
+ */
226
+ export function foilBand(material, r, y0, y1, a0, a1, seed, cell = 0.3, crumple = 0.035) {
227
+ const random = rng(`${seed}/foil/${r.toFixed(2)}/${y0.toFixed(2)}/${a0.toFixed(2)}`);
228
+ const cols = Math.max(2, Math.round(((a1 - a0) * r) / cell));
229
+ const rows = Math.max(2, Math.round((y1 - y0) / cell));
230
+ const grid = [];
231
+ for (let i = 0; i <= cols; i++) {
232
+ grid.push([]);
233
+ for (let j = 0; j <= rows; j++) {
234
+ const edgeU = i === 0 || i === cols;
235
+ const edgeV = j === 0 || j === rows;
236
+ const a = a0 + ((a1 - a0) * (i + (edgeU ? 0 : (random() - 0.5) * 0.5))) / cols;
237
+ const y = y0 + ((y1 - y0) * (j + (edgeV ? 0 : (random() - 0.5) * 0.5))) / rows;
238
+ const h = crumple * (random() * 2 - 1) * (edgeU || edgeV ? 0.5 : 1) + crumple * 0.4 * Math.sin(i * 1.9 + j * 0.7);
239
+ grid[i].push([(r + h) * Math.sin(a), y, (r + h) * Math.cos(a)]);
240
+ }
241
+ }
242
+ const facets = [];
243
+ const wind = (a, b, c) => {
244
+ const n = cross(sub(b, a), sub(c, a));
245
+ const centre = [(a[0] + b[0] + c[0]) / 3, 0, (a[2] + b[2] + c[2]) / 3];
246
+ return n[0] * centre[0] + n[2] * centre[2] >= 0 ? [a, b, c] : [a, c, b];
247
+ };
248
+ for (let i = 0; i < cols; i++)
249
+ for (let j = 0; j < rows; j++) {
250
+ const [p00, p10, p11, p01] = [grid[i][j], grid[i + 1][j], grid[i + 1][j + 1], grid[i][j + 1]];
251
+ if (random() < 0.5)
252
+ facets.push(wind(p00, p10, p11), wind(p00, p11, p01));
253
+ else
254
+ facets.push(wind(p00, p10, p01), wind(p10, p11, p01));
255
+ }
256
+ const out = [];
257
+ const per = 300;
258
+ for (let k = 0; k < facets.length; k += per)
259
+ out.push({ kind: "plate", material, frame: { o: [0, 0, 0], u: [1, 0, 0], v: [0, 1, 0], w: [0, 0, 1] }, outline: [[-1, -1], [1, -1], [1, 1], [-1, 1]], thickness: 0.01, plain: true, only: "mesh", facets: facets.slice(k, k + per) });
260
+ return out;
261
+ }
262
+ /**
263
+ * Plating: rows of panels with a gap between, each a quilted thermal blanket (most of them: the hull reads as white blanket), a rigid panel with a raised frame, bolts and sometimes a grab handle, a patch of crinkled foil, a louvre, or, rarely, a small
264
+ * orange access panel standing on a blanket. Some are worn, some bare, and a seam line for each row and column is in the drawing. The skin of every hull.
265
+ */
266
+ export function hullPanels(o) {
267
+ const random = rng(`${o.seed}/panels`);
268
+ const [a0, a1] = o.az ?? [0, 2 * Math.PI];
269
+ const wide = o.wide ?? 2.2;
270
+ const tall = o.tall ?? 1.5;
271
+ const raise = o.raise ?? 0.04;
272
+ const gap = Math.min(0.07, Math.max(0.04, wide * 0.03));
273
+ const bare = o.bare ?? 0.03;
274
+ const L = o.livery;
275
+ const out = [];
276
+ const seamPaths = [];
277
+ let y = o.y0;
278
+ while (y < o.y1 - 0.2) {
279
+ const h = Math.min(o.y1 - y, tall * (0.7 + random() * 0.7));
280
+ const arcLen = (a1 - a0) * o.r;
281
+ const cols = Math.max(1, Math.round(arcLen / wide));
282
+ const cuts = [0];
283
+ for (let i = 1; i < cols; i++)
284
+ cuts.push(i + (random() - 0.5) * 0.5);
285
+ cuts.push(cols);
286
+ for (let i = 0; i < cols; i++) {
287
+ const left = a0 + ((a1 - a0) * cuts[i]) / cols;
288
+ const right = a0 + ((a1 - a0) * cuts[i + 1]) / cols;
289
+ const width = (right - left) * o.r - gap;
290
+ if (width < 0.2 || h - gap < 0.2)
291
+ continue;
292
+ const roll = random();
293
+ if (roll < bare)
294
+ continue;
295
+ const az = (left + right) / 2;
296
+ const yc = y + h / 2;
297
+ const ph = h - gap;
298
+ if (o.clear?.some((c) => Math.abs(az - c.az) * o.r < c.wide / 2 + width * 0.12 && Math.abs(yc - c.y) < c.tall / 2 + ph * 0.12))
299
+ continue;
300
+ const lift = raise * (0.6 + random() * 0.9);
301
+ const r = o.r + 0.005;
302
+ if (roll < 0.5)
303
+ out.push(blanketPanel(L.main, r, az, yc, width, ph, lift));
304
+ else if (roll < 0.65)
305
+ out.push(blanketPanel(L.mainWorn, r, az, yc, width, ph, lift));
306
+ else if (roll < 0.79)
307
+ out.push(...framedPanel("hull-grey", L.block, r, az, yc, width, ph, lift));
308
+ else if (roll < 0.86)
309
+ out.push(...framedPanel("hull-grey-dark", L.blockWorn, r, az, yc, width, ph, lift));
310
+ else if (roll < 0.92 && width > 0.5 && ph > 0.5)
311
+ out.push(...foilBand(L.foil ?? "foil", r + lift * 0.4, yc - ph / 2, yc + ph / 2, az - (width / 2) / o.r, az + (width / 2) / o.r, o.seed, Math.max(0.28, Math.min(0.5, width / 5))));
312
+ else if (roll < 0.95 && width < 1.5 && ph < 1.1)
313
+ out.push(...framedPanel("hull-grey", L.dark, r, az, yc, width, ph, lift, false));
314
+ else
315
+ out.push(blanketPanel(L.main, r, az, yc, width, ph, lift));
316
+ // a big rigid panel carries a grab handle; a few blankets carry a small orange access panel with its own frame, bolts and handle
317
+ if (roll >= 0.65 && roll < 0.86 && width > 1.5 && random() < 0.5)
318
+ out.push(...grabHandle(patch(r, az, yc), 0, ph * 0.28, Math.min(0.6, width * 0.3), lift + 0.01));
319
+ if (roll < 0.65 && width > 1.0 && ph > 0.9 && random() < 0.16) {
320
+ const aw = Math.min(0.9, width * 0.55);
321
+ const ah = Math.min(0.65, ph * 0.55);
322
+ out.push(...framedPanel(L.accent, "hull-orange-worn", r, az + (random() - 0.5) * 0.3 * (width / o.r), yc + (random() - 0.5) * 0.2, aw, ah, lift + 0.07));
323
+ }
324
+ }
325
+ const ringPath = [];
326
+ const steps = Math.max(8, Math.ceil(((a1 - a0) * 24) / (2 * Math.PI)));
327
+ for (let k = 0; k <= steps; k++) {
328
+ const a = a0 + ((a1 - a0) * k) / steps;
329
+ ringPath.push([(o.r + 0.02) * Math.sin(a), y + h, (o.r + 0.02) * Math.cos(a)]);
330
+ }
331
+ seamPaths.push(ringPath);
332
+ for (let i = 1; i < cols; i++) {
333
+ const a = a0 + ((a1 - a0) * cuts[i]) / cols;
334
+ seamPaths.push([[(o.r + 0.02) * Math.sin(a), y, (o.r + 0.02) * Math.cos(a)], [(o.r + 0.02) * Math.sin(a), y + h, (o.r + 0.02) * Math.cos(a)]]);
335
+ }
336
+ y += h;
337
+ }
338
+ out.push(seams("weld", seamPaths));
339
+ return out;
340
+ }
341
+ /** An access hatch: a raised frame, a door in its own colour with hinges, a latch or a handwheel, a warning stripe and a lamp. */
342
+ export function hatch(o) {
343
+ const s = o.size ?? 1.2;
344
+ const f = patch(o.r, o.az, o.y);
345
+ const at = (a, b, c) => pointOf(f, a, b, c);
346
+ const out = [];
347
+ const raise = 0.06;
348
+ const slab = (material, a, b, w, h, thick, lift) => {
349
+ const centre = pointOf(f, a, b, lift + thick / 2 - sagOf(o.r, w) / 2);
350
+ return { kind: "plate", material, frame: { o: centre, u: f.u, v: f.v, w: f.w }, outline: [[-w / 2, -h / 2], [w / 2, -h / 2], [w / 2, h / 2], [-w / 2, h / 2]], thickness: thick + sagOf(o.r, w), plain: true, only: "mesh" };
351
+ };
352
+ if (o.round) {
353
+ const sides = 14;
354
+ const ring = (material, radius, lift, thick) => ({ kind: "plate", material, frame: { o: at(0, 0, lift + thick / 2 - sagOf(o.r, radius * 2) / 2), u: f.u, v: f.v, w: f.w }, outline: Array.from({ length: sides }, (_, i) => [radius * Math.cos((2 * Math.PI * i) / sides), radius * Math.sin((2 * Math.PI * i) / sides)]), thickness: thick + sagOf(o.r, radius * 2), plain: true, only: "mesh" });
355
+ out.push(ring("hull-grey-dark", s * 0.62, 0, raise), ring("hull-grey", s * 0.5, raise, 0.05), ring("hull-grey-dark", s * 0.12, raise + 0.05, 0.05));
356
+ out.push(rod("hull-grey", at(0, 0, raise + 0.1), at(0, 0, raise + 0.2), s * 0.2, 8), ...[0, 90].map((a) => rod("hull-grey", at(Math.cos(deg(a)) * s * 0.3, Math.sin(deg(a)) * s * 0.3, raise + 0.2), at(-Math.cos(deg(a)) * s * 0.3, -Math.sin(deg(a)) * s * 0.3, raise + 0.2), 0.025, 6)));
357
+ }
358
+ else {
359
+ // the frame: four jambs round a door
360
+ out.push(slab("hull-grey-dark", 0, s * 0.56, s * 1.2, s * 0.08, raise, 0), slab("hull-grey-dark", 0, -s * 0.56, s * 1.2, s * 0.08, raise, 0), slab("hull-grey-dark", s * 0.56, 0, s * 0.08, s * 1.0, raise, 0), slab("hull-grey-dark", -s * 0.56, 0, s * 0.08, s * 1.0, raise, 0));
361
+ out.push(slab("hull-grey", 0, 0, s * 0.98, s * 0.98, 0.04, raise - 0.02));
362
+ // hinges on one side, a latch on the other
363
+ out.push(slab("panel-dark", -s * 0.5, s * 0.3, 0.1, 0.22, 0.06, raise + 0.02), slab("panel-dark", -s * 0.5, -s * 0.3, 0.1, 0.22, 0.06, raise + 0.02), slab("lamp-amber", s * 0.38, 0, 0.12, 0.3, 0.05, raise + 0.02));
364
+ out.push(slab("hazard", 0, -s * 0.4, s * 0.8, 0.07, 0.015, raise + 0.02), slab("hazard", 0, s * 0.4, s * 0.8, 0.07, 0.015, raise + 0.02));
365
+ }
366
+ out.push(rod("lamp-amber", at(s * 0.7, s * 0.45, raise), at(s * 0.7, s * 0.45, raise + 0.1), 0.05, 6));
367
+ return out;
368
+ }
369
+ /** A conduit run up a hull: pipes in a bundle held off the surface by clamps, each leaving the structure through a gland and an elbow at the bottom and going back in at the top, with a flange joint half way. Pipes come in the colours pipes come in: stainless, white, grey and a coloured one. */
370
+ export function conduitRun(o) {
371
+ const random = rng(`${o.seed}/conduit/${o.az.toFixed(3)}/${o.y0.toFixed(2)}`);
372
+ const count = o.count ?? 3;
373
+ const pr = o.pipe ?? 0.08;
374
+ const pitch = pr * 3;
375
+ const stand = pr * 4.2;
376
+ const mats = ["pipe-steel", "hull-white-worn", "pipe-steel", "hull-grey", o.material ?? "coolant"];
377
+ const out = [];
378
+ const f = patch(o.r, o.az, 0);
379
+ for (let i = 0; i < count; i++) {
380
+ const side = (i - (count - 1) / 2) * pitch;
381
+ const base = pointOf(f, side, 0, stand);
382
+ const r = Math.hypot(base[0], base[2]);
383
+ const a = Math.atan2(base[0], base[2]);
384
+ const x = r * Math.sin(a);
385
+ const z = r * Math.cos(a);
386
+ const material = mats[Math.floor(random() * mats.length)];
387
+ const into = pointOf(f, side, 0, -sagOf(o.r, Math.abs(side) * 2));
388
+ out.push(post(material, [x, z], pr, o.y0, pr, o.y1, 12));
389
+ for (const [y, down] of [[o.y0, 1], [o.y1, -1]]) {
390
+ const corner = [x, y, z];
391
+ const wall = [into[0], y, into[2]];
392
+ out.push(ball(material, corner, pr * 1.08), rod(material, corner, wall, pr, 10), rod("hull-grey-dark", wall, add(wall, mul(unit(sub(corner, wall)), pr * 0.5)), pr * 2.6, 10), rod("hull-grey", add(wall, mul(unit(sub(corner, wall)), pr * 0.5)), add(wall, mul(unit(sub(corner, wall)), pr * 1.6)), pr * 1.6, 10));
393
+ out.push(post("hull-grey-dark", [x, z], pr * 1.5, y + down * pr * 1.2, pr * 1.5, y + down * pr * 2.6, 12));
394
+ }
395
+ const mid = (o.y0 + o.y1) / 2 + (random() - 0.5) * 0.4 * (o.y1 - o.y0);
396
+ out.push(post("hull-grey-dark", [x, z], pr * 1.75, mid, pr * 1.75, mid + pr * 0.7, 12), post("black", [x, z], pr * 1.6, mid + pr * 0.7, pr * 1.6, mid + pr * 0.95, 12), post("hull-grey-dark", [x, z], pr * 1.75, mid + pr * 0.95, pr * 1.75, mid + pr * 1.65, 12));
397
+ if (random() < 0.5)
398
+ out.push(post(random() < 0.5 ? "coolant" : "copper", [x, z], pr * 1.2, mid - pr * 2.2, pr * 1.2, mid - pr * 1.2, 12));
399
+ }
400
+ // clamps
401
+ const clampEvery = 1.4;
402
+ for (let y = o.y0 + 0.3; y < o.y1 - 0.1; y += clampEvery) {
403
+ const centre = pointOf(f, 0, 0, stand * 0.55);
404
+ out.push({ kind: "plate", material: "hull-grey-dark", frame: { o: [centre[0], y, centre[2]], u: f.u, v: f.v, w: f.w }, outline: [[-((count - 1) * pitch) / 2 - pr * 1.5, -0.045], [((count - 1) * pitch) / 2 + pr * 1.5, -0.045], [((count - 1) * pitch) / 2 + pr * 1.5, 0.045], [-((count - 1) * pitch) / 2 - pr * 1.5, 0.045]], thickness: stand * 1.5, plain: true, only: "mesh" });
405
+ }
406
+ return out;
407
+ }
408
+ /** A ring of pipe round a hull at height y: a coolant or cable ring, with a clamp and a valve. */
409
+ export function pipeRing(material, r, y, pipe = 0.09, segs = 32) {
410
+ return [hoop(material, r + pipe * 1.2, y, pipe, Math.min(segs, 32), 6), annulus("hull-grey-dark", r, r + pipe * 0.9, y - pipe * 1.8, y + pipe * 1.8, 20, { only: "mesh" })];
411
+ }
412
+ /** A cable tray up a hull: a channel with cables lying in it. */
413
+ export function cableTray(r, az, y0, y1, width = 0.5, seed = "tray") {
414
+ const random = rng(`${seed}/tray/${az.toFixed(3)}`);
415
+ const f = patch(r, az, 0);
416
+ const side = (a, w, lift) => beam("hull-grey-dark", pointOf(f, a, y0, lift), pointOf(f, a, y1, lift), w, 0.06);
417
+ const out = [side(0, width, 0.03), side(-width / 2, 0.05, 0.1), side(width / 2, 0.05, 0.1)];
418
+ const cables = Math.max(2, Math.floor(width / 0.12));
419
+ const mats = ["lamp-red", "coolant", "hull-white-worn", "lamp-blue", "hull-yellow"];
420
+ for (let i = 0; i < cables; i++)
421
+ out.push(rod(mats[Math.floor(random() * mats.length)], pointOf(f, ((i + 0.5) / cables - 0.5) * (width - 0.1), y0, 0.09), pointOf(f, ((i + 0.5) / cables - 0.5) * (width - 0.1), y1, 0.09), 0.025, 6));
422
+ return out;
423
+ }
424
+ /** A louvred vent: a frame with slats. */
425
+ export function vent(r, az, y, wide = 1.0, tall = 0.7, slats = 6) {
426
+ const f = patch(r, az, y);
427
+ const out = [panel("panel-dark", r, az, y, wide, tall, 0.05)];
428
+ for (let i = 0; i < slats; i++) {
429
+ const b = ((i + 0.5) / slats - 0.5) * (tall - 0.1);
430
+ const centre = pointOf(f, 0, b, 0.09 - sagOf(r, wide) / 2);
431
+ out.push({ kind: "plate", material: "hull-grey", frame: { o: centre, u: f.u, v: f.v, w: f.w }, outline: [[-wide / 2 + 0.06, -tall / slats / 4], [wide / 2 - 0.06, -tall / slats / 4], [wide / 2 - 0.06, tall / slats / 4], [-wide / 2 + 0.06, tall / slats / 4]], thickness: 0.03, plain: true, only: "mesh" });
432
+ }
433
+ return out;
434
+ }
435
+ /** A ladder up a hull: two rails and rungs. */
436
+ export function ladder(r, az, y0, y1, width = 0.5) {
437
+ const f = patch(r, az, 0);
438
+ const out = [rod("hull-yellow", pointOf(f, -width / 2, y0, 0.12), pointOf(f, -width / 2, y1, 0.12), 0.03, 6), rod("hull-yellow", pointOf(f, width / 2, y0, 0.12), pointOf(f, width / 2, y1, 0.12), 0.03, 6)];
439
+ for (let y = y0 + 0.25; y < y1; y += 0.3)
440
+ out.push(rod("hull-yellow", pointOf(f, -width / 2, y, 0.12), pointOf(f, width / 2, y, 0.12), 0.02, 6));
441
+ for (let y = y0 + 0.5; y < y1; y += 1.6)
442
+ for (const s of [-width / 2, width / 2])
443
+ out.push(rod("hull-grey-dark", pointOf(f, s, y, 0.02), pointOf(f, s, y, 0.12), 0.025, 6));
444
+ return out;
445
+ }
446
+ /** A hazard stripe: alternating blocks of warning yellow and black round a hull between two heights. */
447
+ export function hazardBand(r, y0, y1, blocks = 24, az = [0, 2 * Math.PI]) {
448
+ const out = [];
449
+ const span = (az[1] - az[0]) / blocks;
450
+ for (let i = 0; i < blocks; i++) {
451
+ const a0 = az[0] + i * span;
452
+ out.push({ kind: "lathe", material: i % 2 ? "black" : "hazard", segs: 3, only: "mesh", profile: [[r + 0.02, y0], [r + 0.02, y1]], arc: () => [a0, a0 + span] });
453
+ }
454
+ return out;
455
+ }
456
+ const SEGMENTS = { "0": "abcdef", "1": "bc", "2": "abdeg", "3": "abcdg", "4": "bcfg", "5": "acdfg", "6": "acdefg", "7": "abc", "8": "abcdefg", "9": "abcdfg" };
457
+ /** Digits in seven bars on a hull: the module's number, in our own simple figures. `size` is the height of a digit in metres. */
458
+ export function stencil(digits, r, az, y, size, material = "black") {
459
+ const out = [];
460
+ const w = size * 0.5;
461
+ const t = size * 0.12;
462
+ const pitch = w + t * 2.5;
463
+ const f0 = patch(r, az, y);
464
+ const total = (digits.length - 1) * pitch;
465
+ [...digits].forEach((d, i) => {
466
+ const cx = i * pitch - total / 2;
467
+ const bar = (name) => {
468
+ const h = size / 2;
469
+ return { a: [0, h, w, t], b: [w / 2, h / 2, t, h], c: [w / 2, -h / 2, t, h], d: [0, -h, w, t], e: [-w / 2, -h / 2, t, h], f: [-w / 2, h / 2, t, h], g: [0, 0, w, t] }[name];
470
+ };
471
+ for (const name of SEGMENTS[d] ?? "") {
472
+ const [bx, by, bw, bh] = bar(name);
473
+ const centre = pointOf(f0, cx + bx, by, 0.02);
474
+ out.push({ kind: "plate", material, frame: { o: centre, u: f0.u, v: f0.v, w: f0.w }, outline: [[-bw / 2, -bh / 2], [bw / 2, -bh / 2], [bw / 2, bh / 2], [-bw / 2, bh / 2]], thickness: 0.03, plain: true, only: "mesh" });
475
+ }
476
+ });
477
+ return out;
478
+ }
479
+ /** A ring of bolt heads (hexagons) on a flat face, at radius `r`, standing from height `y` up (`down` false) or down (`down` true). */
480
+ export function boltRing(r, y, count, size, down = false, material = "hull-grey-dark") {
481
+ const head = { kind: "lathe", material, segs: 6, only: "mesh", profile: down ? [[size * 0.5, y], [size * 0.5, y - size * 0.6], [size * 0.001, y - size * 0.6]] : [[size * 0.5, y], [size * 0.5, y + size * 0.6], [size * 0.001, y + size * 0.6]] };
482
+ return stamp([head], ringOf(count, r, 0));
483
+ }
484
+ const LAMP_MATERIAL = { amber: "lamp-amber", blue: "lamp-blue", red: "lamp-red", port: "nav-red", starboard: "nav-green", strobe: "strobe", flood: "flood" };
485
+ /** Lamps: small domes in a bright colour. They glow when the viewer's engines are lit. */
486
+ export function lamps(list) {
487
+ return list.map(({ at, colour, size = 0.1 }) => ({ kind: "lathe", material: LAMP_MATERIAL[colour], at: [at[0], at[2]], segs: 8, only: "mesh", profile: [[size, at[1]], [size * 0.85, at[1] + size * 0.5], [size * 0.001, at[1] + size * 0.8]] }));
488
+ }
489
+ /** A navigation light on a hull of radius `r` at azimuth `az` (radians) and height `y`: a housing, a stalk and a lens, red (`port`) or green (`starboard`), or a white `strobe`. Lit with the engines. */
490
+ export function navLight(colour, r, az, y, size = 0.16) {
491
+ const f = patch(r, az, y);
492
+ const out = [box("hull-grey-dark", pointOf(f, 0, 0, 0.02), size * 2.6, size * 2.2, size * 0.8, (az * 180) / Math.PI)];
493
+ const tip = pointOf(f, 0, 0, size * 0.8);
494
+ out.push(rod("hull-grey", pointOf(f, 0, 0, 0.02), tip, size * 0.45, 8), ...lamps([{ at: [tip[0], tip[1] + size * 0.1, tip[2]], colour, size }]));
495
+ return out;
496
+ }
497
+ /** A floodlight on a hull of radius `r` at azimuth `az` and height `y`, aimed along the hull by `tilt` (radians, up positive): a bracket, a round housing with cooling fins and a bright lens. Lit with the engines. */
498
+ export function floodlight(r, az, y, tilt = 0) {
499
+ const f = patch(r, az, y);
500
+ const out = [box("hull-grey-dark", pointOf(f, 0, -0.1, 0.02), 0.42, 0.3, 0.18, (az * 180) / Math.PI)];
501
+ const base = pointOf(f, 0, 0.02, 0.2);
502
+ const dir = unit(add(mul(f.w, Math.cos(tilt)), mul(f.v, Math.sin(tilt))));
503
+ const mouth = add(base, mul(dir, 0.42));
504
+ out.push(rod("hull-grey", pointOf(f, 0, -0.1, 0.1), base, 0.04, 6), rod("hull-grey", base, mouth, 0.2, 12), rod("hull-grey-dark", add(base, mul(dir, 0.04)), add(base, mul(dir, 0.1)), 0.23, 12), rod("hull-grey-dark", add(base, mul(dir, 0.16)), add(base, mul(dir, 0.22)), 0.23, 12), rod("flood", mouth, add(mouth, mul(dir, 0.03)), 0.17, 12));
505
+ return out;
506
+ }
507
+ /**
508
+ * A separation joint at a module boundary: where a ship is planned to come apart in flight. A split collar ring with a groove between its halves, hooked latches round it, pyrotechnic bolt caps, umbilical plates with their
509
+ * sockets and strobes, and a hazard stencil along the cut. Place it at the height `y` where two modules meet, on a hull of radius `r` (a collar's outer radius).
510
+ *
511
+ * @param r Radius of the joint's ring, metres.
512
+ * @param y Height of the joint plane.
513
+ * @param options How many latches and umbilical plates.
514
+ * @returns The pieces: mesh only, apart from the groove's seam line.
515
+ */
516
+ export function separationJoint(r, y, options = {}) {
517
+ const latches = options.latches ?? 12;
518
+ const umbilicals = options.umbilicals ?? 4;
519
+ const out = [];
520
+ out.push(annulus("hull-grey", r - 0.1, r + 0.2, y - 0.3, y - 0.04, 56, { only: "mesh" }), annulus("hull-grey", r - 0.1, r + 0.2, y + 0.04, y + 0.3, 56, { only: "mesh" }), annulus("black", r - 0.1, r + 0.17, y - 0.04, y + 0.04, 56, { only: "mesh" }));
521
+ out.push(seams("weld", [Array.from({ length: 49 }, (_, k) => [(r + 0.21) * Math.sin((2 * Math.PI * k) / 48), y, (r + 0.21) * Math.cos((2 * Math.PI * k) / 48)])]));
522
+ // a latch: a body across the joint, a hook that closes over the upper ring, its pin and a flag
523
+ const latch = [box("hull-grey-dark", [0, -0.28, r + 0.2], 0.5, 0.34, 0.56), box("hull-grey", [0, 0.1, r + 0.34], 0.34, 0.2, 0.2), rod("hull-grey", [0, 0.24, r + 0.22], [0, 0.24, r + 0.56], 0.07, 8), rod("hull-yellow", [-0.2, -0.05, r + 0.48], [0.2, -0.05, r + 0.48], 0.035, 6)];
524
+ out.push(...stamp(place(latch, { at: [0, y, 0] }), ringOf(latches, 0, 0)));
525
+ // the pyrotechnic bolts: hex caps in two rings either side of the groove
526
+ out.push(...boltRing(r + 0.08, y + 0.3, latches * 2, 0.16), ...boltRing(r + 0.08, y - 0.3, latches * 2, 0.16, true));
527
+ // umbilical plates between the latches: a plate, a hazard strip, round sockets and a strobe
528
+ const plate = [box("hull-grey-dark", [0, -0.55, r + 0.12], 1.1, 0.22, 1.1), box("hazard", [0, -0.55, r + 0.26], 1.0, 0.02, 0.1), ...[-0.3, 0, 0.3].flatMap((x) => [rod("pipe-steel", [x, -0.15, r + 0.14], [x, -0.15, r + 0.34], 0.09, 10), rod("black", [x, -0.15, r + 0.34], [x, -0.15, r + 0.36], 0.06, 10)]), ...lamps([{ at: [0.4, 0.34, r + 0.26], colour: "strobe", size: 0.07 }])];
529
+ out.push(...stamp(place(plate, { at: [0, y, 0] }), ringOf(umbilicals, 0, 0, 180 / Math.max(1, latches))));
530
+ return out;
531
+ }
532
+ /** An antenna on a base point, pointing along `dir` (a unit direction; up is [0, 1, 0]): a whip, a dish on a pole, a boom with elements, a phased panel, a ball or a horn. `size` is its length or width in metres. */
533
+ export function antenna(kind, base, dir, size, seed = "antenna") {
534
+ const d = unit(dir);
535
+ const [u, v] = across(d);
536
+ const tip = add(base, mul(d, size));
537
+ const out = [];
538
+ const random = rng(`${seed}/${kind}/${base.join(",")}`);
539
+ const foot = rod("hull-grey-dark", base, add(base, mul(d, size * 0.12)), size * 0.04, 8);
540
+ if (kind === "whip")
541
+ out.push(foot, rod("hull-grey", base, tip, size * 0.008 + 0.01, 6), rod("lamp-red", add(tip, mul(d, -0.0)), add(tip, mul(d, size * 0.03)), size * 0.012 + 0.012, 6));
542
+ if (kind === "dish") {
543
+ const stalk = add(base, mul(d, size * 0.45));
544
+ out.push(foot, rod("hull-grey", base, stalk, size * 0.025, 8));
545
+ out.push(...horn("hull-white", add(stalk, mul(d, size * 0.02)), add(stalk, mul(d, size * 0.2)), [size * 0.5, size * 0.44, size * 0.34, size * 0.2], 16));
546
+ out.push(rod("hull-grey-dark", add(stalk, mul(d, size * 0.2)), add(stalk, mul(d, size * 0.42)), size * 0.012, 6), rod("copper", add(stalk, mul(d, size * 0.38)), add(stalk, mul(d, size * 0.46)), size * 0.04, 8));
547
+ for (const s of [0, 1, 2])
548
+ out.push(rod("hull-grey", add(stalk, mul(d, size * 0.2)), add(add(stalk, mul(d, size * 0.02)), add(mul(u, Math.cos((s * 2 * Math.PI) / 3) * size * 0.42), mul(v, Math.sin((s * 2 * Math.PI) / 3) * size * 0.42))), size * 0.008, 5));
549
+ }
550
+ if (kind === "yagi") {
551
+ out.push(foot, rod("hull-grey", add(base, mul(d, size * 0.12)), tip, size * 0.012, 6));
552
+ const n = 6;
553
+ for (let i = 0; i < n; i++) {
554
+ const p = add(base, mul(d, size * (0.2 + (0.78 * i) / n)));
555
+ const half = size * (0.28 - 0.025 * i);
556
+ out.push(rod("hull-grey", add(p, mul(u, -half)), add(p, mul(u, half)), size * 0.008, 5), rod("hull-grey", add(p, mul(v, -half * 0.8)), add(p, mul(v, half * 0.8)), size * 0.008, 5));
557
+ }
558
+ }
559
+ if (kind === "phased") {
560
+ const c = add(base, mul(d, size * 0.06));
561
+ out.push(foot, { kind: "plate", material: "hull-grey-dark", frame: { o: c, u, v, w: d }, outline: [[-size / 2, -size / 3], [size / 2, -size / 3], [size / 2, size / 3], [-size / 2, size / 3]], thickness: size * 0.06, plain: true, only: "mesh" });
562
+ const nx = 6;
563
+ const ny = 4;
564
+ for (let i = 0; i < nx; i++)
565
+ for (let j = 0; j < ny; j++)
566
+ out.push(rod(random() < 0.1 ? "lamp-blue" : "hull-white", add(add(c, mul(d, size * 0.03)), add(mul(u, ((i + 0.5) / nx - 0.5) * size * 0.9), mul(v, ((j + 0.5) / ny - 0.5) * size * 0.6))), add(add(c, mul(d, size * 0.06)), add(mul(u, ((i + 0.5) / nx - 0.5) * size * 0.9), mul(v, ((j + 0.5) / ny - 0.5) * size * 0.6))), size * 0.03, 6));
567
+ }
568
+ if (kind === "omni")
569
+ out.push(foot, rod("hull-grey", base, add(base, mul(d, size * 0.7)), size * 0.02, 6), ...horn("hull-white", add(base, mul(d, size * 0.6)), add(base, mul(d, size)), [size * 0.12, size * 0.16, size * 0.12], 12));
570
+ if (kind === "horn")
571
+ out.push(foot, ...horn("hull-white-worn", add(base, mul(d, size * 0.1)), tip, [size * 0.12, size * 0.18, size * 0.26, size * 0.34], 12), rod("panel-dark", add(base, mul(d, size * 0.94)), tip, size * 0.3, 12));
572
+ return out;
573
+ }
574
+ /** A radiator wing, stowed or deployed. Deployed: a boom out from the hull, hinged panels along it with coolant pipes in them and a manifold. Stowed: the same panels folded into a closed box with latches. */
575
+ export function radiator(o) {
576
+ const n = o.panels ?? Math.max(2, Math.round(o.reach / 2.2));
577
+ const f = { o: [o.r0 * Math.sin(o.az), o.y, o.r0 * Math.cos(o.az)], u: [Math.sin(o.az), 0, Math.cos(o.az)], v: [0, 1, 0], w: [Math.cos(o.az), 0, -Math.sin(o.az)] };
578
+ const at = (a, b, c) => pointOf(f, a, b, c);
579
+ const out = [];
580
+ if (o.stowed) {
581
+ const depth = 0.12 * n + 0.3;
582
+ out.push({ kind: "plate", material: "hull-white", frame: { o: at(depth / 2, 0, 0), u: f.v, v: f.w, w: f.u }, outline: [[-o.height / 2, -o.reach / 4], [o.height / 2, -o.reach / 4], [o.height / 2, o.reach / 4], [-o.height / 2, o.reach / 4]], thickness: depth, plain: true, only: "mesh" });
583
+ for (let i = 0; i < 5; i++)
584
+ out.push(beam("hull-grey-dark", at(0.05, ((i + 0.5) / 5 - 0.5) * o.height, o.reach / 4 + 0.02), at(depth, ((i + 0.5) / 5 - 0.5) * o.height, o.reach / 4 + 0.02), 0.1, 0.04), beam("hull-grey-dark", at(0.05, ((i + 0.5) / 5 - 0.5) * o.height, -o.reach / 4 - 0.02), at(depth, ((i + 0.5) / 5 - 0.5) * o.height, -o.reach / 4 - 0.02), 0.1, 0.04));
585
+ for (let i = 0; i < 6; i++)
586
+ out.push(beam("hull-grey", at(depth + 0.01, ((i + 0.5) / 6 - 0.5) * o.height, 0), at(depth + 0.01, ((i + 0.5) / 6 - 0.5) * o.height, 0.0001), o.reach / 2.4, 0.02));
587
+ out.push(...lamps([{ at: at(depth + 0.03, o.height * 0.4, o.reach / 8), colour: "red", size: 0.07 }]));
588
+ return out;
589
+ }
590
+ // deployed: a boom, hinges, panels in a row along it, pipes
591
+ const gap = 0.12;
592
+ const wide = (o.reach - gap * (n + 1)) / n;
593
+ out.push(beam("hull-grey-dark", at(0, o.height / 2 + 0.05, 0), at(o.reach, o.height / 2 + 0.05, 0), 0.14, 0.14), beam("hull-grey-dark", at(0, -o.height / 2 - 0.05, 0), at(o.reach, -o.height / 2 - 0.05, 0), 0.14, 0.14));
594
+ out.push(beam("hull-grey-dark", at(0.05, -o.height / 2, 0), at(0.05, o.height / 2, 0), 0.2, 0.2));
595
+ for (let i = 0; i < n; i++) {
596
+ const a0 = gap + i * (wide + gap);
597
+ const centre = at(a0 + wide / 2, 0, 0);
598
+ out.push({ kind: "plate", material: i % 3 === 2 ? "radiator-hot" : "radiator", frame: { o: centre, u: f.u, v: f.v, w: f.w }, outline: [[-wide / 2, -o.height / 2], [wide / 2, -o.height / 2], [wide / 2, o.height / 2], [-wide / 2, o.height / 2]], thickness: 0.07, plain: true, only: "mesh" });
599
+ // pipes along the panel, both faces
600
+ const pipes = Math.max(3, Math.round(o.height / 0.75));
601
+ for (let k = 0; k < pipes; k++) {
602
+ const b = ((k + 0.5) / pipes - 0.5) * (o.height - 0.3);
603
+ for (const c of [0.06, -0.06])
604
+ out.push(beam("copper", at(a0 + 0.1, b, c), at(a0 + wide - 0.1, b, c), 0.05, 0.05));
605
+ }
606
+ out.push(beam("hull-grey", at(a0 + 0.02, -o.height / 2, 0), at(a0 + 0.02, o.height / 2, 0), 0.05, 0.12), beam("hull-grey", at(a0 + wide - 0.02, -o.height / 2, 0), at(a0 + wide - 0.02, o.height / 2, 0), 0.05, 0.12));
607
+ out.push(rod("hull-grey-dark", at(a0 - gap, o.height / 2, 0), at(a0, o.height / 2, 0), 0.06, 6), rod("hull-grey-dark", at(a0 - gap, -o.height / 2, 0), at(a0, -o.height / 2, 0), 0.06, 6));
608
+ }
609
+ out.push(seams("feature", [[at(0, o.height / 2, 0), at(o.reach, o.height / 2, 0), at(o.reach, -o.height / 2, 0), at(0, -o.height / 2, 0), at(0, o.height / 2, 0)]]));
610
+ return out;
611
+ }
612
+ /** A shield or heat-shield dome: tiles in a mosaic on a cone or a dome (`profile` is [radius, y] going up), with a ring of seam line at each step, radial seams, and a band of fixings at the rim. */
613
+ export function tileShield(profile, seed, segs = 48, radial = 24) {
614
+ const random = rng(`${seed}/tiles`);
615
+ const out = [{ kind: "lathe", material: "tile", segs, body: true, outline: true, profile, rings: profile.slice(1, -1).map(([, y]) => y) }];
616
+ // a second skin of tile blocks: rings of plates on the surface, each tile slightly raised
617
+ const paths = [];
618
+ for (let k = 0; k < radial; k++) {
619
+ const a = (2 * Math.PI * k) / radial;
620
+ paths.push(profile.map(([r, y]) => [(r + 0.02) * Math.sin(a), y, (r + 0.02) * Math.cos(a)]));
621
+ }
622
+ out.push(seams("weld", paths));
623
+ for (let i = 0; i + 1 < profile.length; i++) {
624
+ const [r0, y0] = profile[i];
625
+ const [r1, y1] = profile[i + 1];
626
+ const rings = Math.max(1, Math.round(Math.hypot(r1 - r0, y1 - y0) / 0.9));
627
+ for (let j = 0; j < rings; j++) {
628
+ const t = (j + 0.5) / rings;
629
+ const r = r0 + (r1 - r0) * t;
630
+ const y = y0 + (y1 - y0) * t;
631
+ const n = Math.max(6, Math.round((2 * Math.PI * r) / 1.1));
632
+ for (let q = 0; q < n; q++) {
633
+ if (random() < 0.3)
634
+ continue;
635
+ const a = (2 * Math.PI * (q + 0.5)) / n;
636
+ const slope = Math.atan2(r0 - r1, y1 - y0);
637
+ out.push(tileBlock(r, y, a, slope, 2 * Math.PI * r / n * 0.82, Math.hypot(r1 - r0, y1 - y0) / rings * 0.82, random() < 0.5 ? "tile-plain" : "panel-dark"));
638
+ }
639
+ }
640
+ }
641
+ return out;
642
+ }
643
+ /** One raised tile on a cone: a plate lying on the surface at radius r, height y, azimuth a, the surface leaning `slope` radians from vertical. */
644
+ function tileBlock(r, y, a, slope, wide, tall, material) {
645
+ const n = [Math.sin(a), 0, Math.cos(a)];
646
+ const tangent = [n[2], 0, -n[0]];
647
+ // up the surface: along the profile; out of it: the surface normal
648
+ const up = [-n[0] * Math.sin(slope), Math.cos(slope), -n[2] * Math.sin(slope)];
649
+ const out = [n[0] * Math.cos(slope), Math.sin(slope), n[2] * Math.cos(slope)];
650
+ const o = [n[0] * r + out[0] * 0.012, y + out[1] * 0.012, n[2] * r + out[2] * 0.012];
651
+ return { kind: "plate", material, frame: { o, u: tangent, v: up, w: out }, outline: [[-wide / 2, -tall / 2], [wide / 2, -tall / 2], [wide / 2, tall / 2], [-wide / 2, tall / 2]], thickness: 0.025, plain: true, only: "mesh" };
652
+ }
653
+ /** Small machinery scattered over a patch of hull: junction boxes, valve wheels, sensor posts, pump housings, bollards, in sizes from a hand to a person. */
654
+ export function greebles(o) {
655
+ const random = rng(`${o.seed}/greebles`);
656
+ const out = [];
657
+ for (let i = 0; i < o.count; i++) {
658
+ const az = o.az[0] + random() * (o.az[1] - o.az[0]);
659
+ const y = o.y0 + random() * (o.y1 - o.y0);
660
+ const f = patch(o.r, az, y);
661
+ const kind = random();
662
+ const size = 0.12 + random() * 0.3;
663
+ const lift = (c) => pointOf(f, 0, 0, c);
664
+ if (kind < 0.35)
665
+ out.push(box(random() < 0.5 ? "hull-grey-dark" : "panel-dark", lift(0.03), size * 1.4, size, size * 0.6, (az * 180) / Math.PI));
666
+ else if (kind < 0.55)
667
+ out.push(post("hull-grey", [lift(0.02)[0], lift(0.02)[2]], size * 0.5, y - 0.02, size * 0.5, y + size * 0.35, 8, { only: "mesh" }));
668
+ else if (kind < 0.7)
669
+ out.push(rod("hull-grey", lift(0), lift(0.1 + size), size * 0.12, 6), rod("lamp-red", lift(0.1 + size), lift(0.16 + size), size * 0.28, 8));
670
+ else if (kind < 0.85)
671
+ out.push(rod("hull-grey-dark", lift(0), lift(0.12), size * 0.5, 8), rod("copper", lift(0.12), lift(0.2), size * 0.38, 8));
672
+ else
673
+ out.push(rod("hull-grey", lift(-0.01), lift(0.18 + size * 0.6), size * 0.14, 6), ...horn("hull-white-worn", lift(0.15 + size * 0.6), lift(0.35 + size), [size * 0.2, size * 0.34], 8));
674
+ }
675
+ return out;
676
+ }
677
+ // ---------------------------------------------------------------------------------------------------------------------------------
678
+ // round pipes with flanges, bends and brackets; I-beams, channels and round struts
679
+ /** A sphere, for the elbow where two pipes meet: round whichever way they run. */
680
+ export const ball = (material, at, radius) => ({
681
+ kind: "lathe",
682
+ material,
683
+ at: [at[0], at[2]],
684
+ segs: 10,
685
+ only: "mesh",
686
+ profile: Array.from({ length: 7 }, (_, i) => [Math.max(0.001, radius * Math.sin((Math.PI * i) / 6)), at[1] - radius * Math.cos((Math.PI * i) / 6)]),
687
+ });
688
+ /** Hexagonal bolt heads in a circle of radius `r` on a flange face at `c` facing `d`: flat hexes, so a bolt costs six vertices. */
689
+ function boltCircle(c, d, r, head, count = 6, rotate = 0.4) {
690
+ const [u, v] = across(d);
691
+ const hex = Array.from({ length: 6 }, (_, i) => [head * Math.cos((Math.PI * i) / 3), head * Math.sin((Math.PI * i) / 3)]);
692
+ return Array.from({ length: count }, (_, k) => {
693
+ const dir = add(mul(u, Math.cos((k * 2 * Math.PI) / count + rotate)), mul(v, Math.sin((k * 2 * Math.PI) / count + rotate)));
694
+ return { kind: "plate", material: "hull-grey", frame: { o: add(add(c, mul(dir, r)), mul(d, head * 0.12)), u, v, w: d }, outline: hex, thickness: 0.004, plain: true, sheet: true, only: "mesh" };
695
+ });
696
+ }
697
+ /** A bolted flange joint across a pipe at `c` running along `d`: two flange discs with a gasket between and a bolt circle on each face. `blind` closes the far side with a bolted cap and a test boss. */
698
+ function flangeJoint(c, d, radius, fittings, blind, band) {
699
+ const t = radius * 0.34;
700
+ const R = radius * 1.75;
701
+ const sides = radius < 0.12 ? 10 : 14;
702
+ const out = [rod(fittings, c, add(c, mul(d, t)), R, sides), rod("black", add(c, mul(d, t)), add(c, mul(d, t * 1.25)), R * 0.93, sides), rod(fittings, add(c, mul(d, t * 1.25)), add(c, mul(d, t * 2.25)), R, sides)];
703
+ out.push(...boltCircle(c, d, R * 0.78, radius * 0.24, 6, 0.4), ...boltCircle(add(c, mul(d, t * 2.25)), d, R * 0.78, radius * 0.24, 6, 0.4));
704
+ if (blind) {
705
+ out.push(rod(fittings, add(c, mul(d, t * 2.25)), add(c, mul(d, t * 2.5)), R * 0.9, sides), rod("hull-grey", add(c, mul(d, t * 2.5)), add(c, mul(d, t * 3.3)), radius * 0.55, 6));
706
+ }
707
+ else {
708
+ out.push(rod("hull-grey", add(c, mul(d, t * 2.25)), add(c, mul(d, t * 2.25 + radius * 1.1)), radius * 1.18, sides));
709
+ }
710
+ if (band)
711
+ out.push(rod(band, add(c, mul(d, -radius * 0.9)), add(c, mul(d, -radius * 0.4)), radius * 1.12, sides));
712
+ return out;
713
+ }
714
+ /** A gland where a pipe passes through the structure at `c`, the pipe running along `d` into it: a pad, a seal boot, a nut ring and a bolt circle. */
715
+ function gland(c, d, radius, fittings) {
716
+ const out = [rod(fittings, c, add(c, mul(d, radius * 0.4)), radius * 3.1, 12), rod("black", add(c, mul(d, radius * 0.4)), add(c, mul(d, radius * 0.62)), radius * 2.1, 12)];
717
+ out.push(rod("hull-grey", add(c, mul(d, radius * 0.62)), add(c, mul(d, radius * 1.5)), radius * 1.8, 12), rod("hull-grey", add(c, mul(d, radius * 1.5)), add(c, mul(d, radius * 2.7)), radius * 1.4, 12), rod(fittings, add(c, mul(d, radius * 2.7)), add(c, mul(d, radius * 3.3)), radius * 1.5, 12));
718
+ out.push(...boltCircle(c, d, radius * 2.55, radius * 0.3, 8));
719
+ return out;
720
+ }
721
+ /** A valve in a pipe at `c` along `d`: a round body between two flanges, a stem and a handwheel. */
722
+ function valve(c, d, radius, fittings) {
723
+ const [u] = across(d);
724
+ const body = add(c, mul(d, radius * 1.4));
725
+ const out = [rod("hull-grey", c, add(c, mul(d, radius * 2.8)), radius * 1.55, 12), rod(fittings, c, add(c, mul(d, radius * 0.3)), radius * 1.9, 12), rod(fittings, add(c, mul(d, radius * 2.5)), add(c, mul(d, radius * 2.8)), radius * 1.9, 12)];
726
+ const top = add(body, mul(u, radius * 3.1));
727
+ out.push(rod("hull-grey-dark", body, top, radius * 0.35, 8), rod("lamp-red", add(top, mul(u, -radius * 0.1)), add(top, mul(u, radius * 0.2)), radius * 1.2, 12), rod("hull-grey-dark", add(top, mul(across(u)[0], -radius * 1.2)), add(top, mul(across(u)[0], radius * 1.2)), radius * 0.14, 6));
728
+ return out;
729
+ }
730
+ /** A clamp bracket on a pipe at `c`: a band round the pipe, a saddle and a stand-off post to a base pad on the structure (`s` is the way the structure lies), with two bolts through the pad. */
731
+ function clamp(c, d, s, radius, fittings) {
732
+ const out = [rod(fittings, add(c, mul(d, -radius * 0.45)), add(c, mul(d, radius * 0.45)), radius * 1.28, 12)];
733
+ const [u] = across(d);
734
+ out.push(rod(fittings, add(c, mul(u, -radius * 1.45)), add(c, mul(u, radius * 1.45)), radius * 0.2, 6));
735
+ const foot = add(c, mul(s, radius * 3.4));
736
+ out.push(rod("hull-grey", add(c, mul(s, radius * 1.2)), foot, radius * 0.4, 8), rod("hull-grey-dark", foot, add(foot, mul(s, radius * 0.3)), radius * 1.3, 8));
737
+ for (const q of [-1, 1])
738
+ out.push(rod("hull-grey", add(add(foot, mul(d, q * radius * 0.85)), mul(s, -radius * 0.1)), add(add(foot, mul(d, q * radius * 0.85)), mul(s, radius * 0.45)), radius * 0.2, 6));
739
+ return out;
740
+ }
741
+ /**
742
+ * A pipe along a path: a round tube for each straight run, corners rounded to a real bend (a chain of short tubes with a round joint at each, `bend` pipe radii of curve), bolted flange joints at an interval, clamp brackets with stand-off
743
+ * posts, and a proper end for each run: a flange bolted to a mating flange, a blind cap, a gland through the structure or a valve. Never a bare end, never a square bar: the tube has twelve sides by default.
744
+ *
745
+ * @param points The path, in metres: two or more points.
746
+ * @param radius The pipe's radius.
747
+ * @param material The pipe's material: `pipe-steel` for stainless, `coolant` for a coolant or feed line, `copper` for a power or coil line.
748
+ * @param options Sides, spacing of flanges and brackets, the way the structure is, the fittings' material, the ends, the bend and a colour-coding band.
749
+ * @returns The pieces.
750
+ */
751
+ export function pipeRun(points, radius, material, options = {}) {
752
+ const sides = options.sides ?? 12;
753
+ const fittings = options.fittings ?? "hull-grey-dark";
754
+ const [first, last] = options.ends ?? ["flange", "flange"];
755
+ const bendK = options.bend ?? 3;
756
+ const out = [];
757
+ // round the corners: each interior point is replaced by an arc of short straight steps
758
+ const path = [{ p: points[0], joint: false }];
759
+ for (let i = 1; i + 1 < points.length; i++) {
760
+ const [p0, p1, p2] = [points[i - 1], points[i], points[i + 1]];
761
+ const d1 = unit(sub(p1, p0));
762
+ const d2 = unit(sub(p2, p1));
763
+ const turn = Math.acos(Math.max(-1, Math.min(1, d1[0] * d2[0] + d1[1] * d2[1] + d1[2] * d2[2])));
764
+ if (turn < 0.05) {
765
+ path.push({ p: p1, joint: false });
766
+ continue;
767
+ }
768
+ const trim = Math.min(bendK * radius * Math.tan(turn / 2), 0.45 * len(sub(p1, p0)), 0.45 * len(sub(p2, p1)));
769
+ if (bendK <= 0 || trim < radius) {
770
+ path.push({ p: p1, joint: true });
771
+ continue;
772
+ }
773
+ const a = sub(p1, mul(d1, trim));
774
+ const b = add(p1, mul(d2, trim));
775
+ const steps = Math.max(2, Math.ceil(turn / 0.4));
776
+ for (let k = 0; k <= steps; k++) {
777
+ const s = k / steps;
778
+ const q = [(1 - s) * (1 - s) * a[0] + 2 * s * (1 - s) * p1[0] + s * s * b[0], (1 - s) * (1 - s) * a[1] + 2 * s * (1 - s) * p1[1] + s * s * b[1], (1 - s) * (1 - s) * a[2] + 2 * s * (1 - s) * p1[2] + s * s * b[2]];
779
+ path.push({ p: q, joint: k > 0 && k < steps });
780
+ }
781
+ }
782
+ path.push({ p: points[points.length - 1], joint: false });
783
+ for (let i = 0; i + 1 < path.length; i++) {
784
+ const a = path[i].p;
785
+ const b = path[i + 1].p;
786
+ const length = len(sub(b, a));
787
+ if (length < radius * 0.5)
788
+ continue;
789
+ const d = unit(sub(b, a));
790
+ out.push(rod(material, a, b, radius, sides));
791
+ const at = (t) => add(a, mul(d, t));
792
+ const every = options.flangeEvery ?? Math.max(radius * 40, 2);
793
+ const flanges = Math.floor(length / every);
794
+ for (let k = 1; k <= flanges; k++)
795
+ out.push(...flangeJoint(at((length * k) / (flanges + 1) - radius * 0.5), d, radius, fittings, false, options.band));
796
+ const bracketEvery = options.bracketEvery ?? Math.max(radius * 30, 1.5);
797
+ const brackets = Math.floor(length / bracketEvery);
798
+ if (options.support)
799
+ for (let k = 1; k <= brackets; k++)
800
+ out.push(...clamp(at(((k - 0.5) * length) / brackets), d, unit(options.support), radius, fittings));
801
+ else
802
+ for (let k = 1; k <= brackets; k++)
803
+ out.push(rod(fittings, add(at(((k - 0.5) * length) / brackets), mul(d, -radius * 0.3)), add(at(((k - 0.5) * length) / brackets), mul(d, radius * 0.3)), radius * 1.25, sides));
804
+ if (path[i + 1].joint)
805
+ out.push(ball(material, b, radius * 1.04));
806
+ }
807
+ // the ends
808
+ const finish = (kind, p, away) => {
809
+ // `away` points from the end back along the pipe, so the fitting stands beyond the end
810
+ const out_ = mul(away, -1);
811
+ if (kind === "bulkhead")
812
+ out.push(...gland(p, away, radius, fittings));
813
+ else if (kind === "valve")
814
+ out.push(...valve(p, out_, radius, fittings));
815
+ else
816
+ out.push(...flangeJoint(p, out_, radius, fittings, kind === "cap", options.band));
817
+ };
818
+ if (path.length >= 2) {
819
+ finish(first, path[0].p, unit(sub(path[1].p, path[0].p)));
820
+ finish(last, path[path.length - 1].p, unit(sub(path[path.length - 2].p, path[path.length - 1].p)));
821
+ }
822
+ return out;
823
+ }
824
+ /** A section extruded along a path: convex outlines in (side, up) coordinates, the up direction fixed so a beam lies the way it was asked to. */
825
+ function section(material, a, b, up, outline, extra = {}) {
826
+ const w = unit(sub(b, a));
827
+ const side = unit(cross(up, w));
828
+ const v = cross(w, side);
829
+ return { kind: "plate", material, frame: { o: mul(add(a, b), 0.5), u: side, v, w }, outline, thickness: len(sub(b, a)), plain: true, only: "mesh", ...extra };
830
+ }
831
+ const rect = (cx, cy, w, h) => [[cx - w / 2, cy - h / 2], [cx + w / 2, cy - h / 2], [cx + w / 2, cy + h / 2], [cx - w / 2, cy + h / 2]];
832
+ /**
833
+ * An I-beam from a to b: a web between two flanges. `up` is the way the web stands; `height` and `width` are the section's, `t` the plate thickness.
834
+ *
835
+ * @param material The beam's material.
836
+ * @param a The start.
837
+ * @param b The end.
838
+ * @param up The direction the web stands, a unit vector not along the beam.
839
+ * @param height The section's height.
840
+ * @param width The flange width.
841
+ * @param t The plate thickness.
842
+ * @returns Three plates: the web and the two flanges.
843
+ */
844
+ export function iBeam(material, a, b, up, height, width, t = height * 0.12) {
845
+ return [section(material, a, b, up, rect(0, 0, t, height - 2 * t)), section(material, a, b, up, rect(0, (height - t) / 2, width, t)), section(material, a, b, up, rect(0, -(height - t) / 2, width, t))];
846
+ }
847
+ /** A channel from a to b: a web with a flange at each edge on one side, the open side towards -`up`'s side axis. */
848
+ export function channel(material, a, b, up, height, width, t = height * 0.12) {
849
+ return [section(material, a, b, up, rect(-width / 2 + t / 2, 0, t, height)), section(material, a, b, up, rect(0, (height - t) / 2, width, t)), section(material, a, b, up, rect(0, -(height - t) / 2, width, t))];
850
+ }
851
+ /** A round strut: a tube with a collar at each end, for a brace. */
852
+ export function strut(material, a, b, radius, sides = 12) {
853
+ const d = unit(sub(b, a));
854
+ // a tube with a fitting at each end: a collar, a round ball for the joint, and a cap
855
+ return [rod(material, a, b, radius, sides), rod("hull-grey-dark", add(a, mul(d, radius * 0.6)), add(a, mul(d, radius * 2.0)), radius * 1.45, sides), rod("hull-grey-dark", add(b, mul(d, -radius * 2.0)), add(b, mul(d, -radius * 0.6)), radius * 1.45, sides), rod("hull-grey", add(a, mul(d, -radius * 0.1)), add(a, mul(d, radius * 0.6)), radius * 1.7, sides), rod("hull-grey", add(b, mul(d, -radius * 0.6)), add(b, mul(d, radius * 0.1)), radius * 1.7, sides)];
856
+ }
857
+ // ---------------------------------------------------------------------------------------------------------------------------------
858
+ // life aboard: portholes, observation domes, the rooms people live in
859
+ /** A round plate in a frame (a lens, a ring, a shutter): a disc of `radius` standing from `lift` to `lift` + `thick` off the frame's face. */
860
+ function roundPlate(f, material, radius, lift, thick, sides = 16, at = [0, 0]) {
861
+ return { kind: "plate", material, frame: { o: pointOf(f, at[0], at[1], lift + thick / 2), u: f.u, v: f.v, w: f.w }, outline: Array.from({ length: sides }, (_, i) => [radius * Math.cos((2 * Math.PI * (i + 0.5)) / sides), radius * Math.sin((2 * Math.PI * (i + 0.5)) / sides)]), thickness: thick, plain: true, only: "mesh" };
862
+ }
863
+ /**
864
+ * An armoured porthole in a hull of radius `r` at azimuth `az` and height `y`: a heavy frame ring with a bolt circle, a thick reflective pane in a retaining lip, and a burn shutter on a hinge arm. `open` swings the shutter back
865
+ * flat against the hull beside the port (the pane glows when the engines are lit); `closed` shuts it over the pane, with four latch dogs, a handwheel and a hazard stripe for the burn.
866
+ *
867
+ * @param r Radius of the hull.
868
+ * @param az Azimuth, radians.
869
+ * @param y Height.
870
+ * @param size Outer radius of the frame in metres (default 0.5).
871
+ * @param shutter `open` or `closed`.
872
+ * @returns The pieces.
873
+ */
874
+ export function porthole(r, az, y, size = 0.5, shutter = "open") {
875
+ const f = patch(r, az, y);
876
+ const out = [roundPlate(f, "hull-grey-dark", size * 1.28, 0, 0.1, 18), roundPlate(f, "hull-grey", size * 1.05, 0.1, 0.07, 18), roundPlate(f, "hull-grey-dark", size * 0.74, 0.17, 0.04, 16), roundPlate(f, "window", size * 0.62, 0.12, 0.07, 16)];
877
+ out.push(...bolts(f, Array.from({ length: 8 }, (_, k) => [Math.cos((k * Math.PI) / 4 + 0.2) * size * 0.92, Math.sin((k * Math.PI) / 4 + 0.2) * size * 0.92]), size * 0.1, 0.18));
878
+ // the hinge block and arm on the left of the frame
879
+ const hinge = pointOf(f, -size * 1.35, 0, 0.1);
880
+ out.push(box("hull-grey-dark", [hinge[0], hinge[1] - size * 0.3, hinge[2]], size * 0.28, size * 0.3, size * 0.6, (az * 180) / Math.PI));
881
+ if (shutter === "open") {
882
+ // folded back flat on the hull beside the port: the disc, its latch ring and the arm to the hinge
883
+ const at = [-size * 2.6, 0];
884
+ out.push(roundPlate(f, "hull-grey", size * 1.02, 0.06, 0.1, 18, at), roundPlate(f, "hull-grey-dark", size * 0.78, 0.16, 0.04, 16, at), roundPlate(f, "hazard", size * 0.16, 0.2, 0.012, 8, [at[0] - size * 0.7, at[1] + size * 0.55]));
885
+ out.push(rod("hull-grey-dark", pointOf(f, -size * 1.35, 0, 0.12), pointOf(f, at[0] + size * 1.0, 0, 0.12), size * 0.1, 8), ...lamps([{ at: pointOf(f, size * 1.2, size * 0.9, 0.12), colour: "amber", size: size * 0.1 }]));
886
+ }
887
+ else {
888
+ const dogs = [0, 90, 180, 270].map((a) => box("hull-grey-dark", pointOf(f, Math.cos(deg(a)) * size * 1.05, Math.sin(deg(a)) * size * 1.05, 0.2), size * 0.26, size * 0.26, size * 0.16, (az * 180) / Math.PI));
889
+ out.push(roundPlate(f, "hull-grey", size * 1.12, 0.21, 0.13, 18), roundPlate(f, "hull-grey-dark", size * 0.86, 0.34, 0.05, 16), ...dogs);
890
+ out.push(rod("hull-grey-dark", pointOf(f, 0, 0, 0.38), pointOf(f, 0, 0, 0.5), size * 0.1, 8), rod("hull-yellow", pointOf(f, -size * 0.34, 0, 0.5), pointOf(f, size * 0.34, 0, 0.5), size * 0.05, 6), rod("hull-yellow", pointOf(f, 0, -size * 0.34, 0.5), pointOf(f, 0, size * 0.34, 0.5), size * 0.05, 6));
891
+ out.push(roundPlate(f, "hazard", size * 0.9, 0.2, 0.016, 18), roundPlate(f, "hull-grey", size * 0.84, 0.215, 0.018, 18), ...lamps([{ at: pointOf(f, size * 1.2, size * 0.9, 0.12), colour: "red", size: size * 0.1 }]));
892
+ }
893
+ return out;
894
+ }
895
+ /**
896
+ * An armoured observation dome on a base ring at `base` (the middle of the ring, at its foot), a descendant of the ISS Cupola: a base ring with lamps, a reflective glass dome with six meridian ribs, two latitude hoops and an oculus
897
+ * on top, and six armoured petals that either lie open round the base (`open`, the dome shows its glass and glows when the engines are lit) or close over the glass (`closed`, as in a burn or a storm).
898
+ *
899
+ * @param base The middle of the ring's foot, in metres.
900
+ * @param radius Radius of the dome at its foot.
901
+ * @param shutters `open` or `closed`.
902
+ * @returns The pieces.
903
+ */
904
+ export function observationDome(base, radius, shutters = "open") {
905
+ const [bx, by, bz] = base;
906
+ const at = [bx, bz];
907
+ const high = radius * 0.78;
908
+ const shell = (extra) => Array.from({ length: 9 }, (_, i) => {
909
+ const t = (i / 8) * (Math.PI / 2) * 0.96;
910
+ return [Math.max(0.001, (radius + extra) * Math.cos(t)), by + 0.35 + (high + extra) * Math.sin(t)];
911
+ });
912
+ const out = [annulus("hull-grey-dark", radius * 0.98, radius * 1.22, by, by + 0.38, 36, { at, only: "mesh" }), annulus("hull-grey", radius * 1.0, radius * 1.14, by + 0.38, by + 0.5, 36, { at, only: "mesh" })];
913
+ out.push({ kind: "lathe", material: "glass-clear", at, segs: 36, only: "mesh", profile: shell(0) });
914
+ // six meridian ribs, two latitude hoops and the oculus ring
915
+ for (let k = 0; k < 6; k++) {
916
+ const a = (k * Math.PI) / 3;
917
+ out.push({ kind: "lathe", material: "hull-grey", at, segs: 2, only: "mesh", profile: shell(0.06), arc: () => [a - 0.05, a + 0.05] });
918
+ }
919
+ for (const f of [0.35, 0.7]) {
920
+ const t = f * (Math.PI / 2) * 0.96;
921
+ out.push(hoop("hull-grey", (radius + 0.06) * Math.cos(t), by + 0.35 + (high + 0.06) * Math.sin(t), 0.05, 36, 5, { at }));
922
+ }
923
+ out.push(hoop("hull-grey-dark", radius * 0.2, by + 0.35 + high * 0.99, 0.09, 16, 5, { at }), disc("glass-clear", at, radius * 0.17, by + 0.35 + high * 0.99, 0.03, 12));
924
+ out.push(...lamps(Array.from({ length: 6 }, (_, k) => ({ at: [bx + radius * 1.13 * Math.sin((k * Math.PI) / 3 + 0.5), by + 0.5, bz + radius * 1.13 * Math.cos((k * Math.PI) / 3 + 0.5)], colour: "amber", size: 0.1 }))));
925
+ // six armoured petals, one over each pane
926
+ for (let k = 0; k < 6; k++) {
927
+ const a0 = (k * Math.PI) / 3 + 0.07;
928
+ const a1 = ((k + 1) * Math.PI) / 3 - 0.07;
929
+ if (shutters === "closed") {
930
+ out.push({ kind: "lathe", material: "hull-grey", at, segs: 8, outline: true, profile: shell(0.17), arc: () => [a0, a1] }, { kind: "lathe", material: "hull-grey-dark", at, segs: 8, only: "mesh", profile: shell(0.22).filter((_, i) => i < 7).map(([rr, yy]) => [rr * 0.995, yy]), arc: () => [a0 + 0.06, a1 - 0.06] });
931
+ }
932
+ else {
933
+ // folded back: a plate lying out from the ring, tilted up a little, with its hinge pin
934
+ const am = (a0 + a1) / 2;
935
+ const p = (rad, a, h) => [bx + rad * Math.sin(a), by + h, bz + rad * Math.cos(a)];
936
+ out.push(quad("hull-grey", p(radius * 1.2, a0, 0.5), p(radius * 1.2, a1, 0.5), p(radius * 1.6, a1 - 0.04, 0.1), p(radius * 1.6, a0 + 0.04, 0.1), 0.1), rod("hull-grey-dark", p(radius * 1.2, a0, 0.5), p(radius * 1.2, a1, 0.5), 0.06, 6), box("hull-grey-dark", p(radius * 1.35, am, 0.3), 0.3, 0.3, 0.1, (am * 180) / Math.PI));
937
+ }
938
+ }
939
+ return out;
940
+ }
941
+ /**
942
+ * The rooms people need, named, each with a job and a size in metres: a cabin, a mess, a gym, a garden, an observation lounge, medical, a storm shelter, a recreation room, a school and a plaza. A ship places them in a cutaway
943
+ * with `room`.
944
+ *
945
+ * @example
946
+ * ```ts
947
+ * import { ROOMS } from "@johnmorrisdotca/uchusen-rockets";
948
+ *
949
+ * console.log(Object.values(ROOMS).map((room) => room.name).join(", "));
950
+ * ```
951
+ */
952
+ export const ROOMS = {
953
+ cabin: { id: "cabin", name: "Crew cabin", job: "A bunk, a desk, a locker and a porthole of one's own: privacy.", size: [3.2, 3.8, 2.6] },
954
+ mess: { id: "mess", name: "Mess and galley", job: "Long tables, a galley counter and benches where a crew eats together.", size: [7, 5, 2.8] },
955
+ gym: { id: "gym", name: "Exercise room", job: "Treadmills, a rowing machine and weight racks that keep bones strong.", size: [6, 5, 2.8] },
956
+ garden: { id: "garden", name: "Green room", job: "Planter beds under grow-lamps: fresh food and something alive to look at.", size: [6, 5, 3] },
957
+ lounge: { id: "lounge", name: "Observation lounge", job: "Low seats round a big window on the stars.", size: [6, 6, 3] },
958
+ medical: { id: "medical", name: "Medical bay", job: "Beds, a scanner and a surgical table.", size: [6, 5, 2.8] },
959
+ shelter: { id: "shelter", name: "Storm shelter", job: "A shielded, padded room for a solar storm, with water and air for days.", size: [5, 5, 2.4] },
960
+ recreation: { id: "recreation", name: "Recreation room", job: "A library, a games table and soft chairs.", size: [6, 5, 2.8] },
961
+ school: { id: "school", name: "School room", job: "Rows of desks and a board for the ship's children.", size: [7, 6, 2.8] },
962
+ plaza: { id: "plaza", name: "Plaza", job: "An open paved square with trees, benches and a fountain: the middle of a ship's town.", size: [14, 14, 6] },
963
+ };
964
+ /**
965
+ * One of the rooms in `ROOMS`, furnished, standing on its floor at the origin (the middle of its floor), ready to `place` in a cutaway. Plain boxes and rods in the fleet's materials: nothing is bare.
966
+ *
967
+ * @param kind Which room.
968
+ * @param seed Any text, so two of the same room differ a little.
969
+ * @returns The pieces.
970
+ */
971
+ export function room(kind, seed = "room") {
972
+ const [w, d, h] = ROOMS[kind].size;
973
+ const random = rng(`${seed}/${kind}`);
974
+ const out = [box("deck", [0, 0, 0], w, d, 0.06), box("hull-white", [0, h, 0], w, d, 0.05)];
975
+ const wall = (x, z, wide, deep) => void out.push(box("hull-white", [x, 0.06, z], wide, deep, h - 0.1));
976
+ wall(0, -d / 2, w, 0.06);
977
+ wall(-w / 2, 0, 0.06, d);
978
+ out.push(box("lamp-blue", [0, h - 0.04, 0], w * 0.5, 0.2, 0.04), box("lamp-blue", [0, h - 0.04, d * 0.3], w * 0.4, 0.14, 0.04));
979
+ const table = (x, z, tw, td, th = 0.75) => void out.push(box("wood", [x, th - 0.05, z], tw, td, 0.05), ...[[-1, -1], [1, -1], [-1, 1], [1, 1]].map(([sx, sz]) => rod("hull-grey", [x + (sx * tw) / 2.2, 0.06, z + (sz * td) / 2.2], [x + (sx * tw) / 2.2, th - 0.05, z + (sz * td) / 2.2], 0.025, 6)));
980
+ const chair = (x, z, yaw = 0) => void out.push(box("fabric", [x, 0.4, z], 0.5, 0.5, 0.1, yaw), box("fabric", [x, 0.5, z - 0.22], 0.5, 0.06, 0.45, yaw), rod("hull-grey", [x, 0.06, z], [x, 0.4, z], 0.03, 6));
981
+ if (kind === "cabin") {
982
+ out.push(box("hull-blue", [-w / 2 + 0.7, 0.4, -d / 2 + 1.1], 1.0, 2.0, 0.3), box("fabric", [-w / 2 + 0.7, 0.7, -d / 2 + 1.1], 0.95, 1.9, 0.14), box("fabric", [-w / 2 + 0.55, 0.84, -d / 2 + 0.5], 0.5, 0.35, 0.12), box("hull-grey", [w / 2 - 0.5, 0.06, -d / 2 + 0.4], 0.8, 0.5, 2.0));
983
+ table(w / 2 - 0.9, 0.2, 1.2, 0.6);
984
+ chair(w / 2 - 1.5, 0.2, 90);
985
+ }
986
+ else if (kind === "mess") {
987
+ for (const z of [-1.2, 0.6])
988
+ table(0.2, z, 4.6, 0.8);
989
+ for (const z of [-1.2, 0.6])
990
+ for (const x of [-1.6, 0, 1.6]) {
991
+ chair(x + 0.2, z - 0.7);
992
+ chair(x + 0.2, z + 0.7, 180);
993
+ }
994
+ out.push(box("pipe-steel", [0, 0.06, d / 2 - 0.5], w * 0.7, 0.6, 0.9), box("hull-grey-dark", [0, 0.96, d / 2 - 0.5], w * 0.7, 0.62, 0.05), box("lamp-amber", [-1.2, 1.2, d / 2 - 0.4], 0.4, 0.05, 0.1), box("lamp-amber", [1.2, 1.2, d / 2 - 0.4], 0.4, 0.05, 0.1));
995
+ }
996
+ else if (kind === "gym") {
997
+ for (const x of [-2, 0, 2])
998
+ out.push(box("hull-grey-dark", [x, 0.1, 0.4], 0.7, 1.6, 0.25), box("black", [x, 0.35, 0.4], 0.62, 1.5, 0.04), rod("hull-grey", [x - 0.3, 0.35, -0.4], [x - 0.3, 1.2, -0.5], 0.03, 6), rod("hull-grey", [x + 0.3, 0.35, -0.4], [x + 0.3, 1.2, -0.5], 0.03, 6));
999
+ out.push(box("hull-grey", [-w / 2 + 0.6, 0.06, -d / 2 + 0.5], 0.7, 2.0, 1.4), rod("hull-grey-dark", [w / 2 - 1.0, 0.9, -d / 2 + 0.3], [w / 2 - 1.0 + 1.2, 0.9, -d / 2 + 0.3], 0.03, 6), rod("black", [w / 2 - 1.5, 0.9, -d / 2 + 0.3], [w / 2 - 1.0, 0.9, -d / 2 + 0.3], 0.07, 8));
1000
+ }
1001
+ else if (kind === "garden") {
1002
+ for (const x of [-1.8, 0, 1.8]) {
1003
+ out.push(box("hull-grey", [x, 0.06, 0.2], 1.3, 3.4, 0.45), box("soil", [x, 0.46, 0.2], 1.2, 3.3, 0.04));
1004
+ for (let k = 0; k < 5; k++)
1005
+ out.push(rod("leaf", [x + (random() - 0.5) * 0.9, 0.5, -1.2 + k * 0.7], [x + (random() - 0.5) * 0.9, 0.9 + random() * 0.5, -1.2 + k * 0.7], 0.12 + random() * 0.1, 7));
1006
+ out.push(box("grow-lamp", [x, h - 0.6, 0.2], 1.0, 3.0, 0.07), rod("hull-grey", [x, h - 0.6, -1.2], [x, h, -1.2], 0.03, 6));
1007
+ }
1008
+ }
1009
+ else if (kind === "lounge") {
1010
+ out.push(box("window", [0, 0.5, d / 2 - 0.03], w * 0.9, 0.05, h * 0.7), ...[-2, -0.7, 0.7, 2].map((x) => beam("hull-grey", [x, 0.5, d / 2 - 0.05], [x, 0.5 + h * 0.7, d / 2 - 0.05], 0.06, 0.06)));
1011
+ for (const x of [-1.8, 0, 1.8])
1012
+ out.push(box("fabric", [x, 0.25, 0.5], 1.2, 0.9, 0.3), box("fabric", [x, 0.5, 0.15], 1.2, 0.2, 0.35));
1013
+ out.push(box("hull-grey", [0, 0.06, -1.2], 1.6, 0.7, 0.4));
1014
+ }
1015
+ else if (kind === "medical") {
1016
+ for (const x of [-2, 0])
1017
+ out.push(box("hull-white-worn", [x, 0.5, -0.6], 0.9, 2.0, 0.12), box("hull-grey", [x, 0.06, -0.6], 0.5, 1.4, 0.44), box("lamp-blue", [x, 1.6, -0.6], 0.5, 0.5, 0.05));
1018
+ out.push(box("hull-grey-dark", [2, 0.06, 0.5], 1.2, 2.2, 0.9), rod("hull-white", [2, 0.96, 0.5], [2, 1.9, 0.5], 0.08, 8), ...horn("hull-white", [2, 1.9, 0.5], [2.8, 1.9, 0.5], [0.35, 0.3], 10), box("hull-white", [-w / 2 + 0.5, 0.06, d / 2 - 1.0], 0.5, 1.8, 1.8));
1019
+ }
1020
+ else if (kind === "shelter") {
1021
+ out.push(box("hull-grey-dark", [0, 0.06, -d / 2 + 0.15], w - 0.2, 0.3, h - 0.1), box("hull-grey-dark", [-w / 2 + 0.15, 0.06, 0], 0.3, d - 0.2, h - 0.1));
1022
+ for (const x of [-1.5, 0, 1.5])
1023
+ out.push(box("fabric", [x, 0.4, -d / 2 + 0.8], 1.2, 0.7, 0.3), box("fabric", [x, 0.9, -d / 2 + 0.8], 1.2, 0.7, 0.3));
1024
+ out.push(box("hull-blue", [w / 2 - 0.7, 0.06, d / 2 - 0.7], 1.0, 0.8, 1.2), box("hazard", [0, h - 0.3, d / 2 - 0.1], 1.6, 0.05, 0.12));
1025
+ }
1026
+ else if (kind === "recreation") {
1027
+ out.push(box("hull-grey", [0, 0.06, -d / 2 + 0.4], w - 0.4, 0.5, 2.2));
1028
+ for (let k = 0; k < 6; k++)
1029
+ out.push(box(k % 2 ? "hull-blue" : "fabric", [-w / 2 + 0.8 + k * 0.9, 0.8 + (k % 3) * 0.6, -d / 2 + 0.7], 0.5, 0.2, 0.4));
1030
+ table(0, 0.5, 1.8, 1.0, 0.7);
1031
+ for (const [x, z, yaw] of [[-1.3, 0.5, 90], [1.3, 0.5, 270], [0, 1.4, 180]])
1032
+ chair(x, z, yaw);
1033
+ }
1034
+ else if (kind === "school") {
1035
+ for (let r = 0; r < 3; r++)
1036
+ for (let c = 0; c < 4; c++) {
1037
+ table(-2.4 + c * 1.6, -0.3 + r * 1.3, 1.1, 0.6, 0.65);
1038
+ chair(-2.4 + c * 1.6, 0.3 + r * 1.3, 180);
1039
+ }
1040
+ out.push(box("black", [0, 0.9, -d / 2 + 0.06], 4.2, 0.05, 1.3), box("hull-grey", [0, 0.06, -d / 2 + 0.5], 1.4, 0.6, 0.8));
1041
+ }
1042
+ else if (kind === "plaza") {
1043
+ out.push({ kind: "lathe", material: "concrete", segs: 40, only: "mesh", profile: [[0.01, 0.0], [w / 2 - 0.5, 0.0], [w / 2 - 0.5, 0.1], [0.01, 0.1]] }, annulus("hull-grey", w / 2 - 0.5, w / 2, 0, 0.35, 40, { only: "mesh" }));
1044
+ out.push(annulus("hull-white", 0.9, 1.5, 0.1, 0.55, 20, { only: "mesh" }), { kind: "lathe", material: "water", segs: 20, only: "mesh", profile: [[0.01, 0.4], [0.9, 0.4]] }, post("pipe-steel", [0, 0], 0.12, 0.1, 0.1, 1.4, 8), ...horn("hull-white", [0, 1.4, 0], [0, 1.9, 0], [0.5, 0.3], 10));
1045
+ for (let k = 0; k < 6; k++) {
1046
+ const a = (k * Math.PI) / 3 + 0.3;
1047
+ const x = 4.2 * Math.sin(a);
1048
+ const z = 4.2 * Math.cos(a);
1049
+ out.push(post("wood", [x, z], 0.16, 0.1, 0.12, 2.6, 8), ...horn("leaf", [x, 2.2, z], [x, 4.4, z], [1.4, 1.3, 0.9, 0.4], 10), box("wood", [3.2 * Math.sin(a + 0.25), 0.1, 3.2 * Math.cos(a + 0.25)], 1.4, 0.4, 0.45, (a + 0.25) * (180 / Math.PI)));
1050
+ }
1051
+ out.push(...lamps(Array.from({ length: 8 }, (_, k) => ({ at: [5.6 * Math.sin((k * Math.PI) / 4), 0.4, 5.6 * Math.cos((k * Math.PI) / 4)], colour: "flood", size: 0.14 }))));
1052
+ }
1053
+ return out;
1054
+ }
1055
+ // ---------------------------------------------------------------------------------------------------------------------------------
1056
+ // solids by range, by outline, by corner (from the SPX-03 Miyamoto adapter, shared)
1057
+ /** A box from a range on each axis, any of them the thin one. Mesh only unless `extra` says otherwise. */
1058
+ export function cub(material, x, y, z, extra = {}) {
1059
+ const f = { o: [(x[0] + x[1]) / 2, (y[0] + y[1]) / 2, (z[0] + z[1]) / 2], u: [1, 0, 0], v: [0, 1, 0], w: [0, 0, 1] };
1060
+ const sx = Math.abs(x[1] - x[0]);
1061
+ const sy = Math.abs(y[1] - y[0]);
1062
+ return { kind: "plate", material, frame: f, outline: [[-sx / 2, -sy / 2], [sx / 2, -sy / 2], [sx / 2, sy / 2], [-sx / 2, sy / 2]], thickness: Math.abs(z[1] - z[0]), plain: true, only: "mesh", ...extra };
1063
+ }
1064
+ /** A prism up the spine: the convex outline in (x, z), standing from y0 to y1. */
1065
+ export function prism(material, outline, y0, y1, extra = {}) {
1066
+ return { kind: "plate", material, frame: { o: [0, (y0 + y1) / 2, 0], u: [1, 0, 0], v: [0, 0, 1], w: [0, 1, 0] }, outline, thickness: Math.abs(y1 - y0), plain: true, only: "mesh", ...extra };
1067
+ }
1068
+ /** An octagon-ish outline: half widths `hx`, `hz` with the corners cut `c` metres. */
1069
+ export const chamfered = (hx, hz, c, cx = 0, cz = 0) => [
1070
+ [cx - hx + c, cz - hz], [cx + hx - c, cz - hz], [cx + hx, cz - hz + c], [cx + hx, cz + hz - c], [cx + hx - c, cz + hz], [cx - hx + c, cz + hz], [cx - hx, cz + hz - c], [cx - hx, cz - hz + c],
1071
+ ];
1072
+ /** A flat quad through four points that lie in one plane, with a thickness: for the slopes of a taper. */
1073
+ export function quad(material, a, b, c, d, thickness, extra = {}) {
1074
+ const u = unit(sub(b, a));
1075
+ const e = sub(d, a);
1076
+ const k = e[0] * u[0] + e[1] * u[1] + e[2] * u[2];
1077
+ const v = unit([e[0] - u[0] * k, e[1] - u[1] * k, e[2] - u[2] * k]);
1078
+ const w = [u[1] * v[2] - u[2] * v[1], u[2] * v[0] - u[0] * v[2], u[0] * v[1] - u[1] * v[0]];
1079
+ const o = [(a[0] + b[0] + c[0] + d[0]) / 4, (a[1] + b[1] + c[1] + d[1]) / 4, (a[2] + b[2] + c[2] + d[2]) / 4];
1080
+ const at = (p) => {
1081
+ const q = sub(p, o);
1082
+ return [q[0] * u[0] + q[1] * u[1] + q[2] * u[2], q[0] * v[0] + q[1] * v[1] + q[2] * v[2]];
1083
+ };
1084
+ return { kind: "plate", material, frame: { o, u, v, w }, outline: [at(a), at(b), at(c), at(d)], thickness, plain: true, only: "mesh", ...extra };
1085
+ }
1086
+ /** A regular polygon (a disc, near enough) facing along Z, at (x, y), standing from z0 to z1. */
1087
+ export function discZ(material, x, y, z0, z1, r, sides = 16, extra = {}) {
1088
+ const outline = Array.from({ length: sides }, (_, i) => [r * Math.cos((2 * Math.PI * i) / sides + Math.PI / sides), r * Math.sin((2 * Math.PI * i) / sides + Math.PI / sides)]);
1089
+ return { kind: "plate", material, frame: { o: [x, y, (z0 + z1) / 2], u: [1, 0, 0], v: [0, 1, 0], w: [0, 0, 1] }, outline, thickness: Math.abs(z1 - z0), plain: true, only: "mesh", ...extra };
1090
+ }
1091
+ /** The same facing along X, at (y, z), standing from x0 to x1. */
1092
+ export function discX(material, y, z, x0, x1, r, sides = 16, extra = {}) {
1093
+ const outline = Array.from({ length: sides }, (_, i) => [r * Math.cos((2 * Math.PI * i) / sides + Math.PI / sides), r * Math.sin((2 * Math.PI * i) / sides + Math.PI / sides)]);
1094
+ return { kind: "plate", material, frame: { o: [(x0 + x1) / 2, y, z], u: [0, 1, 0], v: [0, 0, 1], w: [1, 0, 0] }, outline, thickness: Math.abs(x1 - x0), plain: true, only: "mesh", ...extra };
1095
+ }