less copy protection, more size visualization
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 

1033 řádky
34 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, directory = "vehicles") {
  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/" + directory + "/" + name + "/" + vehicle.name + "-" + sideName + ".svg" }
  291. };
  292. });
  293. });
  294. const entity = makeMultiVehicle(name, sides);
  295. if (directory == "vehicles") {
  296. entity.sizes.push({
  297. name: "1:72",
  298. height: math.unit(math.divide(defaultHeight, 72))
  299. });
  300. entity.sizes.push({
  301. name: "1:24",
  302. height: math.unit(math.divide(defaultHeight, 24))
  303. });
  304. entity.sizes.push({
  305. name: "1:16",
  306. height: math.unit(math.divide(defaultHeight, 16))
  307. });
  308. entity.sizes.push({
  309. name: "1:8",
  310. height: math.unit(math.divide(defaultHeight, 8))
  311. });
  312. entity.sizes.push({
  313. name: "1:4",
  314. height: math.unit(math.divide(defaultHeight, 4))
  315. });
  316. }
  317. return entity;
  318. }
  319. function makeVehicles() {
  320. const results = [];
  321. results.push({
  322. name: "Titanic",
  323. constructor: () => makeVehicle(
  324. "Titanic",
  325. {
  326. side: {
  327. name: "Side",
  328. height: math.unit(883 * 1114 / 4250, "feet"),
  329. image: { source: "./media/vehicles/titanic.svg" },
  330. },
  331. sideVertical: {
  332. name: "Side (Vertical)",
  333. height: math.unit(883, "feet"),
  334. image: { source: "./media/vehicles/vertical-titanic.svg" },
  335. },
  336. },
  337. math.unit(52310, "tons")
  338. )
  339. });
  340. results.push({
  341. name: "18-Wheeler",
  342. constructor: () => makeVehicle(
  343. "18-Wheeler",
  344. {
  345. side: {
  346. name: "Side",
  347. height: math.unit(13.6, "feet"),
  348. image: { source: "./media/vehicles/18-wheeler.svg" },
  349. },
  350. sideVertical: {
  351. name: "Side (Vertical)",
  352. height: math.unit(54, "feet"),
  353. image: { source: "./media/vehicles/18-wheeler-vertical.svg" },
  354. },
  355. },
  356. math.unit(52310, "tons")
  357. )
  358. });
  359. results.push({
  360. name: "Spacecraft",
  361. constructor: () => makeMultiVehicle(
  362. "Spacecraft",
  363. {
  364. "n-1": {
  365. name: "N-1",
  366. rename: true,
  367. height: math.unit(105, "meters"),
  368. mass: math.unit(95, "tons"),
  369. image: { source: "./media/vehicles/spacecraft/n-1.svg" }
  370. },
  371. "saturn-v": {
  372. name: "Saturn V",
  373. rename: true,
  374. height: math.unit(110.6, "meters"),
  375. mass: math.unit(140, "tons"),
  376. image: { source: "./media/vehicles/spacecraft/saturn-v.svg" }
  377. },
  378. "starship": {
  379. name: "Starship",
  380. rename: true,
  381. height: math.unit(118, "m"),
  382. mass: math.unit(150, "tons"),
  383. image: { source: "./media/vehicles/spacecraft/saturn-v.svg" }
  384. },
  385. }
  386. )
  387. });
  388. results.push({
  389. name: "Aircraft",
  390. constructor: () => makeAircraft()
  391. });
  392. results.push({
  393. name: "Cars",
  394. constructor: () => makeCars()
  395. });
  396. results.push({
  397. name: "Buses",
  398. constructor: () => makeBuses()
  399. });
  400. results.push({
  401. name: "Trains",
  402. constructor: () => makeVehicleGroup([
  403. {
  404. name: "60' Boxcar",
  405. mass: math.unit(80900, "lbs"),
  406. sides: {
  407. "Side": { height: math.unit(17, "feet") },
  408. "Front": { height: math.unit(17, "feet") }
  409. }
  410. },
  411. {
  412. name: "64' Flatcar",
  413. mass: math.unit(66000, "lbs"),
  414. sides: {
  415. "Side": { height: math.unit(5.03, "feet") },
  416. "Front": { height: math.unit(5.03, "feet") },
  417. }
  418. },
  419. {
  420. name: "3250 Cubic Ft Hopper",
  421. mass: math.unit(52000, "lbs"),
  422. sides: {
  423. "Side": { height: math.unit(15 + 3 / 12, "feet") },
  424. "Front": { height: math.unit(15 + 3 / 12, "feet") },
  425. }
  426. },
  427. {
  428. name: "28600 Gallon Tank Car",
  429. mass: math.unit(93000, "lbs"),
  430. sides: {
  431. "Side": { height: math.unit(15 + 5.7 / 12, "feet") },
  432. "Front": { height: math.unit(15 + 5.7 / 12, "feet") },
  433. }
  434. }
  435. ],
  436. "Trains",
  437. "train")
  438. });
  439. const dataWarships = [
  440. {
  441. name: "Balao",
  442. sides: {
  443. "Side": { height: math.unit(13.346937056812138, "meters") },
  444. "Front": { height: math.unit(13.346937056812138, "meters") },
  445. "Top": { height: math.unit(95.35877787338985, "meters") },
  446. }
  447. },
  448. {
  449. name: "Bismarck",
  450. sides: {
  451. "Side": { height: math.unit(54.69636677864504, "meters") },
  452. "Front": { height: math.unit(54.69636677864504, "meters") },
  453. "Top": { height: math.unit(255.13670261140695, "meters") },
  454. }
  455. },
  456. {
  457. name: "Charleston",
  458. sides: {
  459. "Side": { height: math.unit(43.84541411294146, "meters") },
  460. "Front": { height: math.unit(45.62719791691388, "meters") },
  461. "Top": { height: math.unit(129.98356198199832, "meters") },
  462. }
  463. },
  464. {
  465. name: "Enterprise",
  466. sides: {
  467. "Side": { height: math.unit(48.51854022788899, "meters") },
  468. "Front": { height: math.unit(48.51854022788899, "meters") },
  469. "Top": { height: math.unit(253.1778795587282, "meters") },
  470. }
  471. },
  472. {
  473. name: "Erie",
  474. sides: {
  475. "Side": { height: math.unit(32.059378464959345, "meters") },
  476. "Front": { height: math.unit(32.059378464959345, "meters") },
  477. "Top": { height: math.unit(101.90240111970473, "meters") },
  478. }
  479. },
  480. {
  481. name: "Fusō",
  482. sides: {
  483. "Side": { height: math.unit(57.714804802509974, "meters") },
  484. "Front": { height: math.unit(57.714804802509974, "meters") },
  485. "Top": { height: math.unit(213.5157104361463, "meters") },
  486. }
  487. },
  488. {
  489. name: "Hood",
  490. sides: {
  491. "Side": { height: math.unit(51.230756762367264, "meters") },
  492. "Front": { height: math.unit(51.230756762367264, "meters") },
  493. "Top": { height: math.unit(263.41015261022113, "meters") },
  494. }
  495. },
  496. {
  497. name: "Hōshō",
  498. sides: {
  499. "Side": { height: math.unit(32.758064912151085, "meters") },
  500. "Front": { height: math.unit(32.758064912151085, "meters") },
  501. "Top": { height: math.unit(185.00137927141287, "meters") },
  502. }
  503. },
  504. {
  505. name: "Iowa",
  506. sides: {
  507. "Side": { height: math.unit(49.127098508478305, "meters") },
  508. "Front": { height: math.unit(49.127098508478305, "meters") },
  509. "Top": { height: math.unit(271.8477422138651, "meters") },
  510. }
  511. },
  512. {
  513. name: "König",
  514. sides: {
  515. "Side": { height: math.unit(45.404394789902064, "meters") },
  516. "Front": { height: math.unit(45.72006845008677, "meters") },
  517. "Top": { height: math.unit(178.61867938785338, "meters") },
  518. }
  519. },
  520. {
  521. name: "New Mexico",
  522. sides: {
  523. "Side": { height: math.unit(41.32890317041514, "meters") },
  524. "Front": { height: math.unit(41.32890317041514, "meters") },
  525. "Top": { height: math.unit(190.75114403153, "meters") },
  526. }
  527. },
  528. {
  529. name: "Shōkaku",
  530. sides: {
  531. "Side": { height: math.unit(41.67455523006811, "meters") },
  532. "Front": { height: math.unit(41.67455523006811, "meters") },
  533. "Top": { height: math.unit(260.7137969911492, "meters") },
  534. }
  535. },
  536. {
  537. name: "Texas",
  538. sides: {
  539. "Side": { height: math.unit(48.903111190282694, "meters") },
  540. "Front": { height: math.unit(48.903111190282694, "meters") },
  541. "Top": { height: math.unit(195.24415882424861, "meters") },
  542. }
  543. },
  544. {
  545. name: "U-2501",
  546. sides: {
  547. "Side": { height: math.unit(11.361271301409108, "meters") },
  548. "Front": { height: math.unit(11.361271301409108, "meters") },
  549. "Top": { height: math.unit(77.06816292937421, "meters") },
  550. }
  551. },
  552. {
  553. name: "Yamato",
  554. sides: {
  555. "Side": { height: math.unit(49.20849004806329, "meters") },
  556. "Front": { height: math.unit(49.20849004806329, "meters") },
  557. "Top": { height: math.unit(265.94789907523005, "meters") },
  558. }
  559. }
  560. ];
  561. results.push({
  562. name: "Warships",
  563. constructor: () => makeAutoVehicleGroup(dataWarships,
  564. "Warships")
  565. });
  566. const dataTanks = [
  567. {
  568. name: "Bishop",
  569. sides: {
  570. "Side": { height: math.unit(3.410661831364902, "meters") },
  571. "Front": { height: math.unit(3.410661831364902, "meters") },
  572. "Top": { height: math.unit(5.672872756986482, "meters") },
  573. }
  574. },
  575. {
  576. name: "Churchill I",
  577. sides: {
  578. "Side": { height: math.unit(3.106923773821576, "meters") },
  579. "Front": { height: math.unit(3.122615308032796, "meters") },
  580. "Top": { height: math.unit(7.2584553965615175, "meters") },
  581. }
  582. },
  583. {
  584. name: "Crusader",
  585. sides: {
  586. "Side": { height: math.unit(2.6101422524871567, "meters") },
  587. "Front": { height: math.unit(2.6101422524871567, "meters") },
  588. "Top": { height: math.unit(6.307843776843961, "meters") },
  589. }
  590. },
  591. {
  592. name: "Emil II",
  593. sides: {
  594. "Side": { height: math.unit(3.8108011655820206, "meters") },
  595. "Front": { height: math.unit(3.824251052048781, "meters") },
  596. "Top": { height: math.unit(10.773359059874819, "meters") },
  597. }
  598. },
  599. {
  600. name: "Fiat 3000",
  601. sides: {
  602. "Side": { height: math.unit(1.9496277856164035, "meters") },
  603. "Front": { height: math.unit(1.9496277856164035, "meters") },
  604. "Top": { height: math.unit(4.27912077145522, "meters") },
  605. }
  606. },
  607. {
  608. name: "Jagdtiger",
  609. sides: {
  610. "Side": { height: math.unit(3.9193441089979792, "meters") },
  611. "Front": { height: math.unit(3.9193441089979792, "meters") },
  612. "Top": { height: math.unit(10.649006600787407, "meters") },
  613. }
  614. },
  615. {
  616. name: "KV-2",
  617. sides: {
  618. "Side": { height: math.unit(2.9868332366529167, "meters") },
  619. "Front": { height: math.unit(2.9868332366529167, "meters") },
  620. "Top": { height: math.unit(6.812734929724053, "meters") },
  621. }
  622. },
  623. {
  624. name: "L6_40",
  625. sides: {
  626. "Side": { height: math.unit(1.9358306214396919, "meters") },
  627. "Front": { height: math.unit(1.9358306214396919, "meters") },
  628. "Top": { height: math.unit(3.808310562671325, "meters") },
  629. }
  630. },
  631. {
  632. name: "Leopard 1",
  633. sides: {
  634. "Side": { height: math.unit(3.8225993116054964, "meters") },
  635. "Front": { height: math.unit(3.8225993116054964, "meters") },
  636. "Top": { height: math.unit(9.539980874580879, "meters") },
  637. }
  638. },
  639. {
  640. name: "M4A3E8 Sherman",
  641. sides: {
  642. "Side": { height: math.unit(2.8079437256982533, "meters") },
  643. "Front": { height: math.unit(2.8117875911680663, "meters") },
  644. "Top": { height: math.unit(6.238593657506183, "meters") },
  645. }
  646. },
  647. {
  648. name: "Maus",
  649. sides: {
  650. "Side": { height: math.unit(3.2167645133001166, "meters") },
  651. "Front": { height: math.unit(3.2167645133001166, "meters") },
  652. "Top": { height: math.unit(10.116556270748033, "meters") },
  653. }
  654. },
  655. {
  656. name: "MS-1",
  657. sides: {
  658. "Side": { height: math.unit(1.8993136516336966, "meters") },
  659. "Front": { height: math.unit(1.8993136516336966, "meters") },
  660. "Top": { height: math.unit(4.40306449214827, "meters") },
  661. }
  662. },
  663. {
  664. name: "O-I",
  665. sides: {
  666. "Side": { height: math.unit(3.5245408857493157, "meters") },
  667. "Front": { height: math.unit(3.5245408857493157, "meters") },
  668. "Top": { height: math.unit(10.290467152684577, "meters") },
  669. }
  670. },
  671. {
  672. name: "P26_40",
  673. sides: {
  674. "Side": { height: math.unit(2.2198610818302003, "meters") },
  675. "Front": { height: math.unit(2.2198610818302003, "meters") },
  676. "Top": { height: math.unit(5.945555556906504, "meters") },
  677. }
  678. },
  679. {
  680. name: "Panther II",
  681. sides: {
  682. "Side": { height: math.unit(2.7322022370149734, "meters") },
  683. "Front": { height: math.unit(2.7322022370149734, "meters") },
  684. "Top": { height: math.unit(8.993913000210199, "meters") },
  685. }
  686. },
  687. {
  688. name: "Pz.Kpfw. II",
  689. sides: {
  690. "Side": { height: math.unit(1.895973799129121, "meters") },
  691. "Front": { height: math.unit(1.895973799129121, "meters") },
  692. "Top": { height: math.unit(4.940551695644215, "meters") },
  693. }
  694. },
  695. {
  696. name: "Pz.Kpfw. III_IV",
  697. sides: {
  698. "Side": { height: math.unit(2.474235510305821, "meters") },
  699. "Front": { height: math.unit(2.474235510305821, "meters") },
  700. "Top": { height: math.unit(6.593240824273646, "meters") },
  701. }
  702. },
  703. {
  704. name: "Somua S35",
  705. sides: {
  706. "Side": { height: math.unit(2.747352267371468, "meters") },
  707. "Front": { height: math.unit(2.747352267371468, "meters") },
  708. "Top": { height: math.unit(5.419850312436055, "meters") },
  709. }
  710. },
  711. {
  712. name: "Strv 103B",
  713. sides: {
  714. "Side": { height: math.unit(2.6925331064166755, "meters") },
  715. "Front": { height: math.unit(2.6925331064166755, "meters") },
  716. "Top": { height: math.unit(8.955885822138697, "meters") },
  717. }
  718. },
  719. {
  720. name: "StuG IV",
  721. sides: {
  722. "Side": { height: math.unit(3.4493634873846486, "meters") },
  723. "Front": { height: math.unit(3.4493634873846486, "meters") },
  724. "Top": { height: math.unit(6.73890309470866, "meters") },
  725. }
  726. },
  727. {
  728. name: "Sturmpanzer II",
  729. sides: {
  730. "Side": { height: math.unit(2.884547159679786, "meters") },
  731. "Front": { height: math.unit(2.884547159679786, "meters") },
  732. "Top": { height: math.unit(5.479425422386316, "meters") },
  733. }
  734. },
  735. {
  736. name: "Super Hellcat",
  737. sides: {
  738. "Side": { height: math.unit(2.584518696915076, "meters") },
  739. "Front": { height: math.unit(2.584518696915076, "meters") },
  740. "Top": { height: math.unit(7.096077076387668, "meters") },
  741. }
  742. },
  743. {
  744. name: "T-26",
  745. sides: {
  746. "Side": { height: math.unit(2.2802546287588683, "meters") },
  747. "Front": { height: math.unit(2.2802546287588683, "meters") },
  748. "Top": { height: math.unit(4.590177998040621, "meters") },
  749. }
  750. },
  751. {
  752. name: "T-34",
  753. sides: {
  754. "Side": { height: math.unit(2.11028214292723, "meters") },
  755. "Front": { height: math.unit(2.11028214292723, "meters") },
  756. "Top": { height: math.unit(6.203998868277867, "meters") },
  757. }
  758. },
  759. {
  760. name: "T28",
  761. sides: {
  762. "Side": { height: math.unit(3.5677593574984616, "meters") },
  763. "Front": { height: math.unit(3.5677593574984616, "meters") },
  764. "Top": { height: math.unit(11.550384956980801, "meters") },
  765. }
  766. },
  767. {
  768. name: "Tiger I",
  769. sides: {
  770. "Side": { height: math.unit(2.6487011721261715, "meters") },
  771. "Front": { height: math.unit(2.6487011721261715, "meters") },
  772. "Top": { height: math.unit(8.46739044919058, "meters") },
  773. }
  774. },
  775. {
  776. name: "Tiger II",
  777. sides: {
  778. "Side": { height: math.unit(2.0016641144139946, "meters") },
  779. "Front": { height: math.unit(2.0016641144139946, "meters") },
  780. "Top": { height: math.unit(7.550471308530432, "meters") },
  781. }
  782. },
  783. {
  784. name: "Type 59",
  785. sides: {
  786. "Side": { height: math.unit(2.5160021432659714, "meters") },
  787. "Front": { height: math.unit(2.5160021432659714, "meters") },
  788. "Top": { height: math.unit(8.948422717087464, "meters") },
  789. }
  790. }
  791. ];
  792. results.push({
  793. name: "Tanks",
  794. constructor: () => makeAutoVehicleGroup(
  795. dataTanks,
  796. "Tanks")
  797. });
  798. const dataEveOnline = [
  799. {
  800. name: "Archon",
  801. sides: {
  802. "Side": { height: math.unit(447.54522705078125, "meters") },
  803. "Front": { height: math.unit(447.54522705078125, "meters") },
  804. "Top": { height: math.unit(3154.529052734375, "meters") },
  805. }
  806. },
  807. {
  808. name: "Avatar",
  809. sides: {
  810. "Side": { height: math.unit(6176.2001953125, "meters") },
  811. "Front": { height: math.unit(6176.2001953125, "meters") },
  812. "Top": { height: math.unit(13831.8583984375, "meters") },
  813. }
  814. },
  815. {
  816. name: "Capsule",
  817. sides: {
  818. "Side": { height: math.unit(2.4739999771118164, "meters") },
  819. "Front": { height: math.unit(2.4739999771118164, "meters") },
  820. "Top": { height: math.unit(3.822000026702881, "meters") },
  821. }
  822. },
  823. {
  824. name: "Chimera",
  825. sides: {
  826. "Side": { height: math.unit(475.55010986328125, "meters") },
  827. "Front": { height: math.unit(475.55010986328125, "meters") },
  828. "Top": { height: math.unit(2696.60009765625, "meters") },
  829. }
  830. },
  831. {
  832. name: "Erebus",
  833. sides: {
  834. "Side": { height: math.unit(4789.970703125, "meters") },
  835. "Front": { height: math.unit(4789.970703125, "meters") },
  836. "Top": { height: math.unit(14785.546875, "meters") },
  837. }
  838. },
  839. {
  840. name: "Ibis",
  841. sides: {
  842. "Side": { height: math.unit(29.632003784179688, "meters") },
  843. "Front": { height: math.unit(29.632003784179688, "meters") },
  844. "Top": { height: math.unit(64.61199951171875, "meters") },
  845. }
  846. },
  847. {
  848. name: "Impairor",
  849. sides: {
  850. "Side": { height: math.unit(13.158005714416504, "meters") },
  851. "Front": { height: math.unit(13.158005714416504, "meters") },
  852. "Top": { height: math.unit(53.68499755859375, "meters") },
  853. }
  854. },
  855. {
  856. name: "Leviathan",
  857. sides: {
  858. "Side": { height: math.unit(3544.030029296875, "meters") },
  859. "Front": { height: math.unit(3544.030029296875, "meters") },
  860. "Top": { height: math.unit(18055.015625, "meters") },
  861. }
  862. },
  863. {
  864. name: "Nidhoggur",
  865. sides: {
  866. "Side": { height: math.unit(263.20928955078125, "meters") },
  867. "Front": { height: math.unit(263.20928955078125, "meters") },
  868. "Top": { height: math.unit(2153.196044921875, "meters") },
  869. }
  870. },
  871. {
  872. name: "Ragnarok",
  873. sides: {
  874. "Side": { height: math.unit(3152.279541015625, "meters") },
  875. "Front": { height: math.unit(3152.279541015625, "meters") },
  876. "Top": { height: math.unit(18139.9765625, "meters") },
  877. }
  878. },
  879. {
  880. name: "Reaper",
  881. sides: {
  882. "Side": { height: math.unit(31.324996948242188, "meters") },
  883. "Front": { height: math.unit(31.324996948242188, "meters") },
  884. "Top": { height: math.unit(55.847999572753906, "meters") },
  885. }
  886. },
  887. {
  888. name: "Thanatos",
  889. sides: {
  890. "Side": { height: math.unit(296.2213134765625, "meters") },
  891. "Front": { height: math.unit(296.2213134765625, "meters") },
  892. "Top": { height: math.unit(2266.876953125, "meters") },
  893. }
  894. },
  895. {
  896. name: "Vanguard",
  897. sides: {
  898. "Side": { height: math.unit(296.2213134765625, "meters") },
  899. "Front": { height: math.unit(296.2213134765625, "meters") },
  900. "Top": { height: math.unit(2266.876953125, "meters") },
  901. }
  902. },
  903. {
  904. name: "Velator",
  905. sides: {
  906. "Side": { height: math.unit(38.00899887084961, "meters") },
  907. "Front": { height: math.unit(38.00899887084961, "meters") },
  908. "Top": { height: math.unit(35.28599548339844, "meters") },
  909. }
  910. }
  911. ];
  912. results.push({
  913. name: "Eve Online",
  914. constructor: () => makeAutoVehicleGroup(
  915. dataEveOnline,
  916. "Eve Online")
  917. });
  918. results.push({
  919. name: "Helicopters",
  920. constructor: () => makeVehicleGroup([
  921. {
  922. name: "Mil Mi-26",
  923. mass: math.unit(109349, "lbs"),
  924. sides: {
  925. "Side": { height: math.unit(12.2, "meters") },
  926. "Front": { height: math.unit(12.2, "meters") },
  927. "Bottom": { height: math.unit(40.025, "meters") },
  928. }
  929. }
  930. ],
  931. "Helicopters",
  932. "")
  933. })
  934. results.push(makeHeight(
  935. [
  936. ["Oil Tanker", 75.8, "meters"],
  937. ["Container Ship", 78.8, "meters"],
  938. ["Bulk Carrier", 70.04, "meters"],
  939. ["Passenger Ship", 80.9, "meters"]
  940. ],
  941. "Ships",
  942. "",
  943. "vehicles",
  944. false
  945. ));
  946. results.push(makeModel({
  947. "name": "Aircraft Cabins",
  948. "kind": "vehicles",
  949. "forms": [
  950. {
  951. "name": "737",
  952. "views": [
  953. {
  954. "name": "Cross Section",
  955. "height": 4.02691801469
  956. }
  957. ]
  958. },
  959. {
  960. "name": "777",
  961. "views": [
  962. {
  963. "name": "Cross Section",
  964. "height": 6.19751351351
  965. }
  966. ]
  967. }
  968. ]
  969. }))
  970. return results;
  971. }