less copy protection, more size visualization
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

352 line
10 KiB

  1. function makeVehicle(name, sides, mass) {
  2. views = {
  3. }
  4. Object.entries(sides).forEach(([key, val]) => {
  5. views[key] = {
  6. attributes: {
  7. height: {
  8. name: "Height",
  9. power: 1,
  10. type: "length",
  11. base: val.height
  12. },
  13. mass: {
  14. name: "Mass",
  15. power: 3,
  16. type: "mass",
  17. base: mass
  18. }
  19. },
  20. image: val.image,
  21. name: val.name
  22. }
  23. });
  24. return makeEntity({ name: name }, views);
  25. }
  26. function makeMultiVehicle(name, sides) {
  27. views = {
  28. }
  29. Object.entries(sides).forEach(([key, val]) => {
  30. views[key] = {
  31. attributes: {
  32. height: {
  33. name: "Height",
  34. power: 1,
  35. type: "length",
  36. base: val.height
  37. },
  38. mass: {
  39. name: "Mass",
  40. power: 3,
  41. type: "mass",
  42. base: val.mass
  43. }
  44. },
  45. image: val.image,
  46. name: val.name,
  47. rename: val.rename
  48. }
  49. });
  50. return makeEntity({ name: name }, views);
  51. }
  52. function makeAircraft() {
  53. const options = [
  54. ["Antonov An-225", 84, 18.1, 285000],
  55. ["Airbus A380-800", 72.7, 24.1, 277000],
  56. ["Stratolaunch", 73, 16.5, 540000],
  57. ["Boeing 747-8", 76.3, 19.4, 220128],
  58. ["Hughes H-4 Hercules", 66.6, 24.2, 136077],
  59. ["Cessena 172", 8.28, 2.72, 757, 2.72]
  60. ],
  61. sides = {}
  62. const sorted = options.sort((a,b) => a[1]-b[1])
  63. sorted.forEach(plane => {
  64. sides[plane[0] + " (Side)"] = {
  65. name: plane[0] + " (Side)",
  66. rename: true,
  67. height: math.unit(plane[2], "meters"),
  68. mass: math.unit(plane[3], "kg"),
  69. image: { source: "./media/vehicles/planes/plane_" + plane[0].replace(/ /g, "-").toLowerCase() + "-side.svg" }
  70. };
  71. sides[plane[0] + " (Top)"] = {
  72. name: plane[0] + " (Top)",
  73. rename: true,
  74. height: math.unit(plane[1], "meters"),
  75. mass: math.unit(plane[3], "kg"),
  76. image: { source: "./media/vehicles/planes/plane_" + plane[0].replace(/ /g, "-").toLowerCase() + "-top.svg" }
  77. };
  78. if (plane.length > 4) {
  79. sides[plane[0] + " (Front)"] = {
  80. name: plane[0] + " (Front)",
  81. rename: true,
  82. height: math.unit(plane[4], "meters"),
  83. mass: math.unit(plane[3], "kg"),
  84. image: { source: "./media/vehicles/planes/plane_" + plane[0].replace(/ /g, "-").toLowerCase() + "-front.svg" }
  85. };
  86. }
  87. });
  88. const entity = makeMultiVehicle("Aircraft", sides);
  89. entity.sizes.push({
  90. name: "1:72",
  91. height: math.unit(sorted[0][2]/72, "meters")
  92. });
  93. entity.sizes.push({
  94. name: "1:24",
  95. height: math.unit(sorted[0][2]/24, "meters")
  96. });
  97. entity.sizes.push({
  98. name: "1:16",
  99. height: math.unit(sorted[0][2]/16, "meters")
  100. });
  101. entity.sizes.push({
  102. name: "1:8",
  103. height: math.unit(sorted[0][2]/8, "meters")
  104. });
  105. entity.sizes.push({
  106. name: "1:4",
  107. height: math.unit(sorted[0][2]/4, "meters")
  108. });
  109. entity.sizes.push({
  110. name: "1",
  111. height: math.unit(sorted[0][2], "meters")
  112. });
  113. return entity;
  114. }
  115. function makeCars() {
  116. const options = [
  117. ["Toyota Prius C", 3.99, 1.45, 1134, 1, 1.07, 1],
  118. ["VW New Beetle", 4.13, 1.57, 1230, 1, 1, 1],
  119. ["Honda Civic", 4.55, 1.42, 1303, 1, 1, 1],
  120. ]
  121. sides = {}
  122. const sorted = options.sort((a,b) => a[1]-b[1])
  123. sorted.forEach(car => {
  124. sides[car[0] + " (Front)"] = {
  125. name: car[0] + " (Front)",
  126. rename: true,
  127. height: math.unit(car[2], "meters"),
  128. mass: math.unit(car[3], "kg"),
  129. image: { source: "./media/vehicles/cars/car_" + car[0].replace(/ /g, "-").toLowerCase() + "-front.svg", extra: car[4] }
  130. };
  131. sides[car[0] + " (Side)"] = {
  132. name: car[0] + " (Side)",
  133. rename: true,
  134. height: math.unit(car[2], "meters"),
  135. mass: math.unit(car[3], "kg"),
  136. image: { source: "./media/vehicles/cars/car_" + car[0].replace(/ /g, "-").toLowerCase() + "-side.svg", extra: car[5] }
  137. };
  138. sides[car[0] + " (Top)"] = {
  139. name: car[0] + " (Top)",
  140. rename: true,
  141. height: math.unit(car[1], "meters"),
  142. mass: math.unit(car[3], "kg"),
  143. image: { source: "./media/vehicles/cars/car_" + car[0].replace(/ /g, "-").toLowerCase() + "-top.svg", extra: car[6] }
  144. };
  145. });
  146. const entity = makeMultiVehicle("Cars", sides);
  147. entity.sizes.push({
  148. name: "1:72",
  149. height: math.unit(sorted[0][2]/72, "meters")
  150. });
  151. entity.sizes.push({
  152. name: "1:24",
  153. height: math.unit(sorted[0][2]/24, "meters")
  154. });
  155. entity.sizes.push({
  156. name: "1:16",
  157. height: math.unit(sorted[0][2]/16, "meters")
  158. });
  159. entity.sizes.push({
  160. name: "1:8",
  161. height: math.unit(sorted[0][2]/8, "meters")
  162. });
  163. entity.sizes.push({
  164. name: "1:4",
  165. height: math.unit(sorted[0][2]/4, "meters")
  166. });
  167. entity.sizes.push({
  168. name: "1",
  169. height: math.unit(sorted[0][2], "meters")
  170. });
  171. return entity;
  172. }
  173. function makeVehicles() {
  174. const results = [];
  175. results.push({
  176. name: "Bus",
  177. constructor: () => makeVehicle(
  178. "Bus",
  179. {
  180. side: {
  181. name: "Side",
  182. height: math.unit(10.5, "feet"),
  183. image: { source: "./media/vehicles/bus.svg" }
  184. },
  185. vertical: {
  186. name: "Side (Vertical)",
  187. height: math.unit(38.5, "feet"),
  188. image: { source: "./media/vehicles/vertical-bus.svg" }
  189. },
  190. },
  191. math.unit(30000, "lb"),
  192. )
  193. });
  194. results.push({
  195. name: "Leopard 2 Rev. 1",
  196. constructor: () => makeVehicle(
  197. "Leopard 2 Rev. 1",
  198. {
  199. side: {
  200. name: "Side",
  201. height: math.unit(3, "meters"),
  202. image: { source: "./media/vehicles/leopard-2-revolution-1.svg" },
  203. },
  204. vertical: {
  205. name: "Side (Vertical)",
  206. height: math.unit(10, "meters"),
  207. image: { source: "./media/vehicles/vertical-leopard-2-revolution-1.svg" },
  208. }
  209. },
  210. math.unit(60, "tonnes")
  211. )
  212. });
  213. results.push({
  214. name: "737",
  215. constructor: () => makeVehicle(
  216. "737",
  217. {
  218. side: {
  219. name: "Side",
  220. height: math.unit(12.55, "meters"),
  221. image: { source: "./media/vehicles/737-side.svg" },
  222. },
  223. sideVertical: {
  224. name: "Side (Vertical)",
  225. height: math.unit(39.47, "meters"),
  226. image: { source: "./media/vehicles/737-side-vertical.svg" },
  227. },
  228. top: {
  229. name: "Top",
  230. height: math.unit(39.47, "meters"),
  231. image: { source: "./media/vehicles/737-top.svg" },
  232. },
  233. front: {
  234. name: "Front",
  235. height: math.unit(12.55, "meters"),
  236. image: { source: "./media/vehicles/737-front.svg" },
  237. }
  238. },
  239. math.unit(90710, "lbs")
  240. )
  241. });
  242. results.push({
  243. name: "Titanic",
  244. constructor: () => makeVehicle(
  245. "Titanic",
  246. {
  247. side: {
  248. name: "Side",
  249. height: math.unit(883*1114/4250, "feet"),
  250. image: { source: "./media/vehicles/titanic.svg" },
  251. },
  252. sideVertical: {
  253. name: "Side (Vertical)",
  254. height: math.unit(883, "feet"),
  255. image: { source: "./media/vehicles/vertical-titanic.svg" },
  256. },
  257. },
  258. math.unit(52310, "tons")
  259. )
  260. });
  261. results.push({
  262. name: "18-Wheeler",
  263. constructor: () => makeVehicle(
  264. "18-Wheeler",
  265. {
  266. side: {
  267. name: "Side",
  268. height: math.unit(13.6, "feet"),
  269. image: { source: "./media/vehicles/18-wheeler.svg" },
  270. },
  271. sideVertical: {
  272. name: "Side (Vertical)",
  273. height: math.unit(54, "feet"),
  274. image: { source: "./media/vehicles/18-wheeler-vertical.svg" },
  275. },
  276. },
  277. math.unit(52310, "tons")
  278. )
  279. });
  280. results.push({
  281. name: "Spacecraft",
  282. constructor: () => makeMultiVehicle(
  283. "Spacecraft",
  284. {
  285. "n-1": {
  286. name: "N-1",
  287. rename: true,
  288. height: math.unit(105, "meters"),
  289. mass: math.unit(95, "tons"),
  290. image: { source: "./media/vehicles/spacecraft/n-1.svg" }
  291. },
  292. "saturn-v": {
  293. name: "Saturn V",
  294. rename: true,
  295. height: math.unit(110.6, "meters"),
  296. mass: math.unit(140, "tons"),
  297. image: { source: "./media/vehicles/spacecraft/saturn-v.svg" }
  298. },
  299. "starship": {
  300. name: "Starship",
  301. rename: true,
  302. height: math.unit(118, "m"),
  303. mass: math.unit(150, "tons"),
  304. image: { source: "./media/vehicles/spacecraft/saturn-v.svg" }
  305. },
  306. }
  307. )
  308. });
  309. results.push({
  310. name: "Aircraft",
  311. constructor: () => makeAircraft()
  312. });
  313. results.push({
  314. name: "Cars",
  315. constructor: () => makeCars()
  316. });
  317. return results;
  318. }