less copy protection, more size visualization
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

159 lines
3.6 KiB

  1. math.createUnit("story", {
  2. definition: "12 feet",
  3. prefixes: "long"
  4. });
  5. math.createUnit("stories", {
  6. definition: "12 feet",
  7. prefixes: "long"
  8. });
  9. function makeBuilding(name, height, image) {
  10. views = {
  11. building: {
  12. attributes: {
  13. height: {
  14. name: "Height",
  15. power: 1,
  16. type: "length",
  17. base: height
  18. }
  19. },
  20. image: image,
  21. name: "building"
  22. },
  23. };
  24. return makeEntity({ name: name }, views);
  25. }
  26. function makeSkyscraper(name, image) {
  27. views = {
  28. building: {
  29. attributes: {
  30. height: {
  31. name: "Height",
  32. power: 1,
  33. type: "length",
  34. base: math.unit(1, "meter")
  35. }
  36. },
  37. image: image,
  38. name: "building"
  39. },
  40. };
  41. const sizes = [];
  42. sizes.push({
  43. name: "Short",
  44. height: math.unit(15, "stories")
  45. });
  46. sizes.push({
  47. name: "Medium",
  48. height: math.unit(40, "stories"),
  49. default: true
  50. });
  51. sizes.push({
  52. name: "Supertall",
  53. height: math.unit(350, "meters")
  54. });
  55. sizes.push({
  56. name: "Megatall",
  57. height: math.unit(650, "meters")
  58. });
  59. const entity = makeEntity({ name: name }, views, sizes);
  60. return entity;
  61. }
  62. function makeBuildings() {
  63. const results = [];
  64. results.push({
  65. name: "Two-Story Home",
  66. constructor: () => makeBuilding(
  67. "Two-Story Home",
  68. math.unit(25, "feet"),
  69. { source: "./media/buildings/house.svg" }
  70. )
  71. });
  72. results.push({
  73. name: "Mobile Home",
  74. constructor: () => makeBuilding(
  75. "Mobile Home",
  76. math.unit(10, "feet"),
  77. { source: "./media/buildings/mobile-home.svg" }
  78. )
  79. });
  80. results.push({
  81. name: "Mailbox",
  82. constructor: () => makeBuilding(
  83. "Mailbox",
  84. math.unit(5.1, "feet"),
  85. { source: "./media/buildings/mailbox.svg" }
  86. )
  87. });
  88. results.push({
  89. name: "Bus Stop",
  90. constructor: () => makeBuilding(
  91. "Bus Stop",
  92. math.unit(8, "feet"),
  93. { source: "./media/buildings/bus-stop.svg" }
  94. )
  95. });
  96. results.push(
  97. {
  98. name: "Wide Skyscraper",
  99. constructor: () => makeSkyscraper(
  100. "Wide Skyscraper",
  101. { source: "./media/buildings/skyscrapers/wide.svg" }
  102. )
  103. }
  104. );
  105. results.push(
  106. {
  107. name: "Skyscraper",
  108. constructor: () => makeSkyscraper(
  109. "Skyscraper",
  110. { source: "./media/buildings/skyscrapers/medium.svg" }
  111. )
  112. }
  113. );
  114. results.push(
  115. {
  116. name: "Slender Skyscraper",
  117. constructor: () => makeSkyscraper(
  118. "Slender Skyscraper",
  119. { source: "./media/buildings/skyscrapers/slender.svg" }
  120. )
  121. }
  122. );
  123. results.push(
  124. {
  125. name: "Narrow Skyscraper",
  126. constructor: () => makeSkyscraper(
  127. "Narrow Skyscraper",
  128. { source: "./media/buildings/skyscrapers/narrow.svg" }
  129. )
  130. }
  131. );
  132. results.sort((b1, b2) => {
  133. e1 = b1.constructor();
  134. e2 = b2.constructor();
  135. return -math.subtract(e1.views[e1.defaultView].height, e2.views[e2.defaultView].height).value;
  136. });
  137. return results;
  138. }