less copy protection, more size visualization
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 

769 行
24 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. },
  14. image: val.image,
  15. name: val.name
  16. }
  17. if (mass !== undefined) {
  18. views[key].attributes.mass = {
  19. name: "Mass",
  20. power: 3,
  21. type: "mass",
  22. base: mass
  23. }
  24. }
  25. });
  26. return makeEntity({ name: name }, views);
  27. }
  28. function makeMultiVehicle(name, sides) {
  29. views = {
  30. }
  31. Object.entries(sides).forEach(([key, val]) => {
  32. views[key] = {
  33. attributes: {
  34. height: {
  35. name: "Height",
  36. power: 1,
  37. type: "length",
  38. base: val.height
  39. }
  40. },
  41. image: val.image,
  42. name: val.name,
  43. rename: val.rename
  44. }
  45. if (val.mass) {
  46. views[key].attributes.mass = {
  47. name: "Mass",
  48. power: 3,
  49. type: "mass",
  50. base: val.mass
  51. }
  52. }
  53. });
  54. return makeEntity({ name: name }, views);
  55. }
  56. function makeAircraft() {
  57. const options = [
  58. ["Antonov An-225", 84, 18.1, 285000],
  59. ["Airbus A380-800", 72.7, 24.1, 277000],
  60. ["Stratolaunch", 73, 16.5, 540000],
  61. ["Boeing 747-8", 76.3, 19.4, 220128],
  62. ["Hughes H-4 Hercules", 66.6, 24.2, 136077],
  63. ["Cessena 172", 8.28, 2.72, 757, 2.72]
  64. ],
  65. sides = {}
  66. const sorted = options.sort((a, b) => a[1] - b[1])
  67. sorted.forEach(plane => {
  68. sides[plane[0] + " (Side)"] = {
  69. name: plane[0] + " (Side)",
  70. rename: true,
  71. height: math.unit(plane[2], "meters"),
  72. mass: math.unit(plane[3], "kg"),
  73. image: { source: "./media/vehicles/planes/plane_" + plane[0].replace(/ /g, "-").toLowerCase() + "-side.svg" }
  74. };
  75. sides[plane[0] + " (Top)"] = {
  76. name: plane[0] + " (Top)",
  77. rename: true,
  78. height: math.unit(plane[1], "meters"),
  79. mass: math.unit(plane[3], "kg"),
  80. image: { source: "./media/vehicles/planes/plane_" + plane[0].replace(/ /g, "-").toLowerCase() + "-top.svg" }
  81. };
  82. if (plane.length > 4) {
  83. sides[plane[0] + " (Front)"] = {
  84. name: plane[0] + " (Front)",
  85. rename: true,
  86. height: math.unit(plane[4], "meters"),
  87. mass: math.unit(plane[3], "kg"),
  88. image: { source: "./media/vehicles/planes/plane_" + plane[0].replace(/ /g, "-").toLowerCase() + "-front.svg" }
  89. };
  90. }
  91. });
  92. const entity = makeMultiVehicle("Aircraft", sides);
  93. entity.sizes.push({
  94. name: "1:72",
  95. height: math.unit(sorted[0][2] / 72, "meters")
  96. });
  97. entity.sizes.push({
  98. name: "1:24",
  99. height: math.unit(sorted[0][2] / 24, "meters")
  100. });
  101. entity.sizes.push({
  102. name: "1:16",
  103. height: math.unit(sorted[0][2] / 16, "meters")
  104. });
  105. entity.sizes.push({
  106. name: "1:8",
  107. height: math.unit(sorted[0][2] / 8, "meters")
  108. });
  109. entity.sizes.push({
  110. name: "1:4",
  111. height: math.unit(sorted[0][2] / 4, "meters")
  112. });
  113. entity.sizes.push({
  114. name: "1",
  115. height: math.unit(sorted[0][2], "meters")
  116. });
  117. return entity;
  118. }
  119. function makeCars() {
  120. const options = [
  121. ["Toyota Prius C", 3.99, 1.45, 1134, 1, 1.07, 1],
  122. ["VW New Beetle", 4.13, 1.57, 1230, 1, 1, 1],
  123. ["Honda Civic", 4.55, 1.42, 1303, 1, 1, 1],
  124. ["Lamborghini Aventador", 4.78, 1.136, 1575, 1, 1, 1],
  125. ["Ford F-150", 5.89, 1.92, 1950, 1, 1, 1]
  126. ]
  127. sides = {}
  128. const sorted = options.sort((a, b) => a[1] - b[1])
  129. sorted.forEach(car => {
  130. sides[car[0] + " (Front)"] = {
  131. name: car[0] + " (Front)",
  132. rename: true,
  133. height: math.unit(car[2], "meters"),
  134. mass: math.unit(car[3], "kg"),
  135. image: { source: "./media/vehicles/cars/car_" + car[0].replace(/ /g, "-").toLowerCase() + "-front.svg", extra: car[4] }
  136. };
  137. sides[car[0] + " (Side)"] = {
  138. name: car[0] + " (Side)",
  139. rename: true,
  140. height: math.unit(car[2], "meters"),
  141. mass: math.unit(car[3], "kg"),
  142. image: { source: "./media/vehicles/cars/car_" + car[0].replace(/ /g, "-").toLowerCase() + "-side.svg", extra: car[5] }
  143. };
  144. sides[car[0] + " (Top)"] = {
  145. name: car[0] + " (Top)",
  146. rename: true,
  147. height: math.unit(car[1], "meters"),
  148. mass: math.unit(car[3], "kg"),
  149. image: { source: "./media/vehicles/cars/car_" + car[0].replace(/ /g, "-").toLowerCase() + "-top.svg", extra: car[6] }
  150. };
  151. });
  152. const entity = makeMultiVehicle("Cars", sides);
  153. entity.sizes.push({
  154. name: "1:72",
  155. height: math.unit(sorted[0][2] / 72, "meters")
  156. });
  157. entity.sizes.push({
  158. name: "1:24",
  159. height: math.unit(sorted[0][2] / 24, "meters")
  160. });
  161. entity.sizes.push({
  162. name: "1:16",
  163. height: math.unit(sorted[0][2] / 16, "meters")
  164. });
  165. entity.sizes.push({
  166. name: "1:8",
  167. height: math.unit(sorted[0][2] / 8, "meters")
  168. });
  169. entity.sizes.push({
  170. name: "1:4",
  171. height: math.unit(sorted[0][2] / 4, "meters")
  172. });
  173. entity.sizes.push({
  174. name: "1",
  175. height: math.unit(sorted[0][2], "meters")
  176. });
  177. return entity;
  178. }
  179. function makeBuses() {
  180. const options = [
  181. ["City Bus", 11.95, 2.99, 14000, 1, 1, 1],
  182. ["Articulated Bus", 18, 3.13, 25000, 1, 1, 1],
  183. ["Coach Bus", 12, 3.81, 18000, 1, 1, 1],
  184. ["Shuttle Bus", 7.01, 2.67, 6000, 1, 1, 1],
  185. ]
  186. sides = {}
  187. options.forEach(bus => {
  188. sides[bus[0] + " (Front)"] = {
  189. name: bus[0] + " (Front)",
  190. rename: true,
  191. height: math.unit(bus[2], "meters"),
  192. mass: math.unit(bus[3], "kg"),
  193. image: { source: "./media/vehicles/buses/bus_" + bus[0].replace(/ /g, "-").toLowerCase() + "-front.svg", extra: bus[4] }
  194. };
  195. sides[bus[0] + " (Side)"] = {
  196. name: bus[0] + " (Side)",
  197. rename: true,
  198. height: math.unit(bus[2], "meters"),
  199. mass: math.unit(bus[3], "kg"),
  200. image: { source: "./media/vehicles/buses/bus_" + bus[0].replace(/ /g, "-").toLowerCase() + "-side.svg", extra: bus[5] }
  201. };
  202. sides[bus[0] + " (Top)"] = {
  203. name: bus[0] + " (Top)",
  204. rename: true,
  205. height: math.unit(bus[1], "meters"),
  206. mass: math.unit(bus[3], "kg"),
  207. image: { source: "./media/vehicles/buses/bus_" + bus[0].replace(/ /g, "-").toLowerCase() + "-top.svg", extra: bus[6] }
  208. };
  209. });
  210. const entity = makeMultiVehicle("Buses", sides);
  211. entity.sizes.push({
  212. name: "1:72",
  213. height: math.unit(options[0][2] / 72, "meters")
  214. });
  215. entity.sizes.push({
  216. name: "1:24",
  217. height: math.unit(options[0][2] / 24, "meters")
  218. });
  219. entity.sizes.push({
  220. name: "1:16",
  221. height: math.unit(options[0][2] / 16, "meters")
  222. });
  223. entity.sizes.push({
  224. name: "1:8",
  225. height: math.unit(options[0][2] / 8, "meters")
  226. });
  227. entity.sizes.push({
  228. name: "1:4",
  229. height: math.unit(options[0][2] / 4, "meters")
  230. });
  231. entity.sizes.push({
  232. name: "1",
  233. height: math.unit(options[0][2], "meters")
  234. });
  235. return entity;
  236. }
  237. // TODO this should be named something more generic and put in objects.js
  238. function makeVehicleGroup(info, name, prefix, directory="vehicles") {
  239. sides = {}
  240. let defaultHeight;
  241. info.forEach(vehicle => {
  242. Object.entries(vehicle.sides).forEach(([sideName, data]) => {
  243. if (!defaultHeight) {
  244. defaultHeight = data.height;
  245. }
  246. sides[vehicle.name + " (" + sideName + ")"] = {
  247. name: vehicle.name + " (" + sideName + ")",
  248. rename: true,
  249. height: data.height,
  250. mass: vehicle.mass,
  251. image: { source: "./media/" + directory + "/" + name.replace(/ /g, "-").toLowerCase() + "/" + (prefix == "" ? "" : prefix + "_") + vehicle.name.replace(/ /g, "-").toLowerCase() + "-" + sideName.replace(/ /g, "-").toLowerCase() + ".svg", extra: (data.extra ? data.extra : 1) }
  252. };
  253. });
  254. });
  255. const entity = makeMultiVehicle(name, sides);
  256. entity.sizes.push({
  257. name: "1:72",
  258. height: math.unit(math.divide(defaultHeight, 72))
  259. });
  260. entity.sizes.push({
  261. name: "1:24",
  262. height: math.unit(math.divide(defaultHeight, 24))
  263. });
  264. entity.sizes.push({
  265. name: "1:16",
  266. height: math.unit(math.divide(defaultHeight, 16))
  267. });
  268. entity.sizes.push({
  269. name: "1:8",
  270. height: math.unit(math.divide(defaultHeight, 8))
  271. });
  272. entity.sizes.push({
  273. name: "1:4",
  274. height: math.unit(math.divide(defaultHeight, 4))
  275. });
  276. return entity;
  277. }
  278. function makeAutoVehicleGroup(info, name) {
  279. sides = {}
  280. let defaultHeight;
  281. info.forEach(vehicle => {
  282. Object.entries(vehicle.sides).forEach(([sideName, data]) => {
  283. if (!defaultHeight) {
  284. defaultHeight = data.height;
  285. }
  286. sides[vehicle.name + " (" + sideName + ")"] = {
  287. name: vehicle.name + " (" + sideName + ")",
  288. rename: true,
  289. height: data.height,
  290. image: { source: "./media/vehicles/" + name + "/" + vehicle.name + "-" + sideName + ".svg" }
  291. };
  292. });
  293. });
  294. const entity = makeMultiVehicle(name, sides);
  295. entity.sizes.push({
  296. name: "1:72",
  297. height: math.unit(math.divide(defaultHeight, 72))
  298. });
  299. entity.sizes.push({
  300. name: "1:24",
  301. height: math.unit(math.divide(defaultHeight, 24))
  302. });
  303. entity.sizes.push({
  304. name: "1:16",
  305. height: math.unit(math.divide(defaultHeight, 16))
  306. });
  307. entity.sizes.push({
  308. name: "1:8",
  309. height: math.unit(math.divide(defaultHeight, 8))
  310. });
  311. entity.sizes.push({
  312. name: "1:4",
  313. height: math.unit(math.divide(defaultHeight, 4))
  314. });
  315. return entity;
  316. }
  317. function makeVehicles() {
  318. const results = [];
  319. results.push({
  320. name: "Titanic",
  321. constructor: () => makeVehicle(
  322. "Titanic",
  323. {
  324. side: {
  325. name: "Side",
  326. height: math.unit(883 * 1114 / 4250, "feet"),
  327. image: { source: "./media/vehicles/titanic.svg" },
  328. },
  329. sideVertical: {
  330. name: "Side (Vertical)",
  331. height: math.unit(883, "feet"),
  332. image: { source: "./media/vehicles/vertical-titanic.svg" },
  333. },
  334. },
  335. math.unit(52310, "tons")
  336. )
  337. });
  338. results.push({
  339. name: "18-Wheeler",
  340. constructor: () => makeVehicle(
  341. "18-Wheeler",
  342. {
  343. side: {
  344. name: "Side",
  345. height: math.unit(13.6, "feet"),
  346. image: { source: "./media/vehicles/18-wheeler.svg" },
  347. },
  348. sideVertical: {
  349. name: "Side (Vertical)",
  350. height: math.unit(54, "feet"),
  351. image: { source: "./media/vehicles/18-wheeler-vertical.svg" },
  352. },
  353. },
  354. math.unit(52310, "tons")
  355. )
  356. });
  357. results.push({
  358. name: "Spacecraft",
  359. constructor: () => makeMultiVehicle(
  360. "Spacecraft",
  361. {
  362. "n-1": {
  363. name: "N-1",
  364. rename: true,
  365. height: math.unit(105, "meters"),
  366. mass: math.unit(95, "tons"),
  367. image: { source: "./media/vehicles/spacecraft/n-1.svg" }
  368. },
  369. "saturn-v": {
  370. name: "Saturn V",
  371. rename: true,
  372. height: math.unit(110.6, "meters"),
  373. mass: math.unit(140, "tons"),
  374. image: { source: "./media/vehicles/spacecraft/saturn-v.svg" }
  375. },
  376. "starship": {
  377. name: "Starship",
  378. rename: true,
  379. height: math.unit(118, "m"),
  380. mass: math.unit(150, "tons"),
  381. image: { source: "./media/vehicles/spacecraft/saturn-v.svg" }
  382. },
  383. }
  384. )
  385. });
  386. results.push({
  387. name: "Aircraft",
  388. constructor: () => makeAircraft()
  389. });
  390. results.push({
  391. name: "Cars",
  392. constructor: () => makeCars()
  393. });
  394. results.push({
  395. name: "Buses",
  396. constructor: () => makeBuses()
  397. });
  398. results.push({
  399. name: "Trains",
  400. constructor: () => makeVehicleGroup([
  401. {
  402. name: "60' Boxcar",
  403. mass: math.unit(80900, "lbs"),
  404. sides: {
  405. "Side": { height: math.unit(17, "feet") },
  406. "Front": { height: math.unit(17, "feet") }
  407. }
  408. },
  409. {
  410. name: "64' Flatcar",
  411. mass: math.unit(66000, "lbs"),
  412. sides: {
  413. "Side": { height: math.unit(5.03, "feet") },
  414. "Front": { height: math.unit(5.03, "feet") },
  415. }
  416. },
  417. {
  418. name: "3250 Cubic Ft Hopper",
  419. mass: math.unit(52000, "lbs"),
  420. sides: {
  421. "Side": { height: math.unit(15 + 3 / 12, "feet") },
  422. "Front": { height: math.unit(15 + 3 / 12, "feet") },
  423. }
  424. },
  425. {
  426. name: "28600 Gallon Tank Car",
  427. mass: math.unit(93000, "lbs"),
  428. sides: {
  429. "Side": { height: math.unit(15 + 5.7 / 12, "feet") },
  430. "Front": { height: math.unit(15 + 5.7 / 12, "feet") },
  431. }
  432. }
  433. ],
  434. "Trains",
  435. "train")
  436. });
  437. const dataWarships = [
  438. {
  439. name: "Bismarck",
  440. sides: {
  441. "Side": { height: math.unit(54.69636677864504, "meters") },
  442. "Front": { height: math.unit(54.69636677864504, "meters") },
  443. "Top": { height: math.unit(32.01922297647954, "meters") },
  444. }
  445. },
  446. {
  447. name: "Enterprise",
  448. sides: {
  449. "Side": { height: math.unit(48.51854022788899, "meters") },
  450. "Front": { height: math.unit(48.51854022788899, "meters") },
  451. "Top": { height: math.unit(35.786190385477134, "meters") },
  452. }
  453. },
  454. {
  455. name: "Hood",
  456. sides: {
  457. "Side": { height: math.unit(51.230756762367264, "meters") },
  458. "Front": { height: math.unit(51.230756762367264, "meters") },
  459. "Top": { height: math.unit(32.91139946808423, "meters") },
  460. }
  461. },
  462. {
  463. name: "Hōshō",
  464. sides: {
  465. "Side": { height: math.unit(32.758064912151085, "meters") },
  466. "Front": { height: math.unit(32.758064912151085, "meters") },
  467. "Top": { height: math.unit(40.594525072877005, "meters") },
  468. }
  469. },
  470. {
  471. name: "Iowa",
  472. sides: {
  473. "Side": { height: math.unit(49.127098508478305, "meters") },
  474. "Front": { height: math.unit(49.127098508478305, "meters") },
  475. "Top": { height: math.unit(30.219217774119194, "meters") },
  476. }
  477. },
  478. {
  479. name: "New Mexico",
  480. sides: {
  481. "Side": { height: math.unit(41.32890317041514, "meters") },
  482. "Front": { height: math.unit(41.32890317041514, "meters") },
  483. "Top": { height: math.unit(28.96398262277052, "meters") },
  484. }
  485. },
  486. {
  487. name: "Shōkaku",
  488. sides: {
  489. "Side": { height: math.unit(41.67455523006811, "meters") },
  490. "Front": { height: math.unit(41.67455523006811, "meters") },
  491. "Top": { height: math.unit(36.63871458856606, "meters") },
  492. }
  493. },
  494. {
  495. name: "Texas",
  496. sides: {
  497. "Side": { height: math.unit(48.903111190282694, "meters") },
  498. "Front": { height: math.unit(48.903111190282694, "meters") },
  499. "Top": { height: math.unit(34.61887806692416, "meters") },
  500. }
  501. },
  502. {
  503. name: "U-2501",
  504. sides: {
  505. "Side": { height: math.unit(11.361271301409108, "meters") },
  506. "Front": { height: math.unit(11.361271301409108, "meters") },
  507. "Top": { height: math.unit(6.980811859544766, "meters") },
  508. }
  509. },
  510. {
  511. name: "Yamato",
  512. sides: {
  513. "Side": { height: math.unit(49.20849004806329, "meters") },
  514. "Front": { height: math.unit(49.20849004806329, "meters") },
  515. "Top": { height: math.unit(36.321496280439945, "meters") },
  516. }
  517. }
  518. ];
  519. results.push({
  520. name: "Warships",
  521. constructor: () => makeAutoVehicleGroup(dataWarships,
  522. "Warships",
  523. "")
  524. });
  525. const dataTanks = [
  526. {
  527. name: "Churchill I",
  528. sides: {
  529. "Side": { height: math.unit(3.106923773821576, "meters") },
  530. "Front": { height: math.unit(3.122615308032796, "meters") },
  531. "Top": { height: math.unit(2.869309112908815, "meters") },
  532. }
  533. },
  534. {
  535. name: "Crusader",
  536. sides: {
  537. "Side": { height: math.unit(2.6101422524871567, "meters") },
  538. "Front": { height: math.unit(2.6101422524871567, "meters") },
  539. "Top": { height: math.unit(2.45030399586389, "meters") },
  540. }
  541. },
  542. {
  543. name: "Emil II",
  544. sides: {
  545. "Side": { height: math.unit(3.8108011655820206, "meters") },
  546. "Front": { height: math.unit(3.824251052048781, "meters") },
  547. "Top": { height: math.unit(2.667560815907414, "meters") },
  548. }
  549. },
  550. {
  551. name: "Fiat 3000",
  552. sides: {
  553. "Side": { height: math.unit(1.9496277856164035, "meters") },
  554. "Front": { height: math.unit(1.9496277856164035, "meters") },
  555. "Top": { height: math.unit(1.481300826438086, "meters") },
  556. }
  557. },
  558. {
  559. name: "Jagdtiger",
  560. sides: {
  561. "Side": { height: math.unit(3.9193441089979792, "meters") },
  562. "Front": { height: math.unit(3.9193441089979792, "meters") },
  563. "Top": { height: math.unit(3.3553927290759344, "meters") },
  564. }
  565. },
  566. {
  567. name: "Leopard 1",
  568. sides: {
  569. "Side": { height: math.unit(3.8225993116054964, "meters") },
  570. "Front": { height: math.unit(3.8225993116054964, "meters") },
  571. "Top": { height: math.unit(2.925940213821491, "meters") },
  572. }
  573. },
  574. {
  575. name: "Maus",
  576. sides: {
  577. "Side": { height: math.unit(3.2167645133001166, "meters") },
  578. "Front": { height: math.unit(3.2167645133001166, "meters") },
  579. "Top": { height: math.unit(3.2907388888672973, "meters") },
  580. }
  581. },
  582. {
  583. name: "MS-1",
  584. sides: {
  585. "Side": { height: math.unit(1.8993136516336966, "meters") },
  586. "Front": { height: math.unit(1.8993136516336966, "meters") },
  587. "Top": { height: math.unit(1.5674182813864816, "meters") },
  588. }
  589. },
  590. {
  591. name: "O-I",
  592. sides: {
  593. "Side": { height: math.unit(3.5245408857493157, "meters") },
  594. "Front": { height: math.unit(3.5245408857493157, "meters") },
  595. "Top": { height: math.unit(4.555326275168602, "meters") },
  596. }
  597. },
  598. {
  599. name: "Panther II",
  600. sides: {
  601. "Side": { height: math.unit(2.7322022370149734, "meters") },
  602. "Front": { height: math.unit(2.7322022370149734, "meters") },
  603. "Top": { height: math.unit(2.9358754946833625, "meters") },
  604. }
  605. },
  606. {
  607. name: "Pz.Kpfw. II",
  608. sides: {
  609. "Side": { height: math.unit(1.895973799129121, "meters") },
  610. "Front": { height: math.unit(1.895973799129121, "meters") },
  611. "Top": { height: math.unit(2.0174743555561734, "meters") },
  612. }
  613. },
  614. {
  615. name: "Pz.Kpfw. III_IV",
  616. sides: {
  617. "Side": { height: math.unit(2.474235510305821, "meters") },
  618. "Front": { height: math.unit(2.474235510305821, "meters") },
  619. "Top": { height: math.unit(2.888968363627729, "meters") },
  620. }
  621. },
  622. {
  623. name: "Somua S35",
  624. sides: {
  625. "Side": { height: math.unit(2.747352267371468, "meters") },
  626. "Front": { height: math.unit(2.747352267371468, "meters") },
  627. "Top": { height: math.unit(1.917886560727652, "meters") },
  628. }
  629. },
  630. {
  631. name: "StuG IV",
  632. sides: {
  633. "Side": { height: math.unit(3.4493634873846486, "meters") },
  634. "Front": { height: math.unit(3.4493634873846486, "meters") },
  635. "Top": { height: math.unit(2.8849221894489787, "meters") },
  636. }
  637. },
  638. {
  639. name: "Sturmpanzer II",
  640. sides: {
  641. "Side": { height: math.unit(2.884547159679786, "meters") },
  642. "Front": { height: math.unit(2.884547159679786, "meters") },
  643. "Top": { height: math.unit(2.4838674279383364, "meters") },
  644. }
  645. },
  646. {
  647. name: "Super Hellcat",
  648. sides: {
  649. "Side": { height: math.unit(2.584518696915076, "meters") },
  650. "Front": { height: math.unit(2.584518696915076, "meters") },
  651. "Top": { height: math.unit(2.817767204389544, "meters") },
  652. }
  653. },
  654. {
  655. name: "T-26",
  656. sides: {
  657. "Side": { height: math.unit(2.2802546287588683, "meters") },
  658. "Front": { height: math.unit(2.2802546287588683, "meters") },
  659. "Top": { height: math.unit(2.1615796666673286, "meters") },
  660. }
  661. },
  662. {
  663. name: "T-34",
  664. sides: {
  665. "Side": { height: math.unit(2.11028214292723, "meters") },
  666. "Front": { height: math.unit(2.11028214292723, "meters") },
  667. "Top": { height: math.unit(2.6676426360500867, "meters") },
  668. }
  669. },
  670. {
  671. name: "T28",
  672. sides: {
  673. "Side": { height: math.unit(3.5677593574984616, "meters") },
  674. "Front": { height: math.unit(3.5677593574984616, "meters") },
  675. "Top": { height: math.unit(3.5701189867031564, "meters") },
  676. }
  677. },
  678. {
  679. name: "Type 59",
  680. sides: {
  681. "Side": { height: math.unit(2.5160021432659714, "meters") },
  682. "Front": { height: math.unit(2.5160021432659714, "meters") },
  683. "Top": { height: math.unit(2.910382740468765, "meters") },
  684. }
  685. }
  686. ];
  687. results.push({
  688. name: "Tanks",
  689. constructor: () => makeAutoVehicleGroup(
  690. dataTanks,
  691. "Tanks",
  692. "")
  693. });
  694. results.push({
  695. name: "Helicopters",
  696. constructor: () => makeVehicleGroup([
  697. {
  698. name: "Mil Mi-26",
  699. mass: math.unit(109349, "lbs"),
  700. sides: {
  701. "Side": { height: math.unit(12.2, "meters") },
  702. "Front": { height: math.unit(12.2, "meters") },
  703. "Bottom": { height: math.unit(40.025, "meters") },
  704. }
  705. }
  706. ],
  707. "Helicopters",
  708. "")
  709. })
  710. return results;
  711. }