less copy protection, more size visualization
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

264 linhas
6.4 KiB

  1. function makeBuilding(name, height, image) {
  2. views = {
  3. building: {
  4. attributes: {
  5. height: {
  6. name: "Height",
  7. power: 1,
  8. type: "length",
  9. base: height
  10. }
  11. },
  12. image: image,
  13. name: "building"
  14. },
  15. };
  16. return makeEntity({ name: name }, views);
  17. }
  18. function makeSkyscraper(name, image) {
  19. views = {
  20. building: {
  21. attributes: {
  22. height: {
  23. name: "Height",
  24. power: 1,
  25. type: "length",
  26. base: math.unit(1, "meter")
  27. }
  28. },
  29. image: image,
  30. name: "building"
  31. },
  32. };
  33. const sizes = [];
  34. sizes.push({
  35. name: "Short",
  36. height: math.unit(15, "stories")
  37. });
  38. sizes.push({
  39. name: "Medium",
  40. height: math.unit(40, "stories"),
  41. default: true
  42. });
  43. sizes.push({
  44. name: "Supertall",
  45. height: math.unit(350, "meters")
  46. });
  47. sizes.push({
  48. name: "Megatall",
  49. height: math.unit(650, "meters")
  50. });
  51. const entity = makeEntity({ name: name }, views, sizes);
  52. return entity;
  53. }
  54. function makeBuildings() {
  55. const results = [];
  56. results.push({
  57. name: "Two-Story Home",
  58. constructor: () => makeBuilding(
  59. "Two-Story Home",
  60. math.unit(25, "feet"),
  61. { source: "./media/buildings/house.svg" }
  62. )
  63. });
  64. results.push({
  65. name: "Mobile Home",
  66. constructor: () => makeBuilding(
  67. "Mobile Home",
  68. math.unit(10, "feet"),
  69. { source: "./media/buildings/mobile-home.svg" }
  70. )
  71. });
  72. results.push({
  73. name: "Mailbox",
  74. constructor: () => makeBuilding(
  75. "Mailbox",
  76. math.unit(5.1, "feet"),
  77. { source: "./media/buildings/mailbox.svg" }
  78. )
  79. });
  80. results.push({
  81. name: "Bus Stop",
  82. constructor: () => makeBuilding(
  83. "Bus Stop",
  84. math.unit(8, "feet"),
  85. { source: "./media/buildings/bus-stop.svg" }
  86. )
  87. });
  88. results.push(
  89. {
  90. name: "Wide Skyscraper",
  91. constructor: () => makeSkyscraper(
  92. "Wide Skyscraper",
  93. { source: "./media/buildings/skyscrapers/wide.svg" }
  94. )
  95. }
  96. );
  97. results.push(
  98. {
  99. name: "Skyscraper",
  100. constructor: () => makeSkyscraper(
  101. "Skyscraper",
  102. { source: "./media/buildings/skyscrapers/medium.svg" }
  103. )
  104. }
  105. );
  106. results.push(
  107. {
  108. name: "Slender Skyscraper",
  109. constructor: () => makeSkyscraper(
  110. "Slender Skyscraper",
  111. { source: "./media/buildings/skyscrapers/slender.svg" }
  112. )
  113. }
  114. );
  115. results.push(
  116. {
  117. name: "Narrow Skyscraper",
  118. constructor: () => makeSkyscraper(
  119. "Narrow Skyscraper",
  120. { source: "./media/buildings/skyscrapers/narrow.svg" }
  121. )
  122. }
  123. );
  124. results.push(
  125. makeHeight(
  126. [
  127. ["four-lane-highway", 27.432, "meters"],
  128. ["sidewalk", 24, "feet"]
  129. ],
  130. "Roads",
  131. "",
  132. "buildings"
  133. )
  134. )
  135. results.push(
  136. makeHeight(
  137. [
  138. ["residential", 12, "feet"],
  139. ["freeway", 50, "feet"]
  140. ],
  141. "Street Lamps",
  142. "",
  143. "buildings"
  144. )
  145. )
  146. results.push(
  147. makeHeight(
  148. [
  149. ["badminton-court", 13.4, "meters"],
  150. ["basketball-court", 28, "meters"],
  151. ["bocce-court", 27.5, "meters"],
  152. ["bowling-lane", 23.8, "meters"],
  153. ["football-field", 160, "feet"],
  154. ["ice-hockey", 30, "meters"],
  155. ["netball-court", 30.5, "meters"],
  156. ["olympic-swimming-pool", 25, "meters"],
  157. ["snooker-table", 3.7, "meters"],
  158. ["squash-court", 9.8, "meters"],
  159. ["table-tennis", 2.79, "meters"],
  160. ["tennis-court", 23.8, "meters"],
  161. ["volleyball-court", 21.6, "meters"],
  162. ],
  163. "Sports Fields",
  164. "",
  165. "buildings"
  166. )
  167. )
  168. results.push(
  169. makeHeight(
  170. [
  171. ["small", 51.8, "meters"],
  172. ["medium", 108.1, "meters"],
  173. ["large", 141.7, "meters"],
  174. ["extra-large", 190.2, "meters"]
  175. ],
  176. "Wind Turbines",
  177. "",
  178. "buildings"
  179. )
  180. )
  181. results.push({
  182. name: "Gas Station",
  183. constructor: () => makeBuilding(
  184. "Gas Station",
  185. math.unit(6.78, "meters"),
  186. { source: "./media/buildings/gas-station.svg" }
  187. )
  188. });
  189. results.push({
  190. name: "Staircase",
  191. constructor: () => makeBuilding(
  192. "Staircase",
  193. math.unit(12.956, "feet"),
  194. { source: "./media/buildings/staircase.svg" }
  195. )
  196. });
  197. results.push(
  198. makeHeight(
  199. [
  200. ["residential", 83, "inches"],
  201. ["garage-door", 7.5, "feet"],
  202. ["double-garage-door", 7.5, "feet"],
  203. ["small-private-hangar", 10.5, "feet"],
  204. ],
  205. "Doorways",
  206. "",
  207. "buildings"
  208. )
  209. )
  210. results.push(
  211. makeHeight(
  212. [
  213. ["akashi-kaikyō-bridge", 283, "meters"],
  214. ["chaotianmen-bridge", 160, "meters"],
  215. ["forth-bridge", 100, "meters"],
  216. ["golden-gate-bridge", 230, "meters"],
  217. ["millau-viaduct", 421, "meters"],
  218. ["rialto-bridge", 17, "meters"],
  219. ["russky-bridge", 306, "meters"],
  220. ["sydney-harbour-bridge", 129, "meters"],
  221. ["tower-bridge", 65, "meters"],
  222. ["trajan's-bridge", 40, "meters"],
  223. ],
  224. "Bridges",
  225. "",
  226. "buildings"
  227. )
  228. )
  229. results.sort((b1, b2) => {
  230. e1 = b1.constructor();
  231. e2 = b2.constructor();
  232. return -math.subtract(e1.views[e1.defaultView].height, e2.views[e2.defaultView].height).value;
  233. });
  234. return results;
  235. }