less copy protection, more size visualization
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符
 
 
 

154 行
3.5 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, startingSize) {
  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. });
  50. sizes.push({
  51. name: "Supertall",
  52. height: math.unit(350, "meters")
  53. });
  54. sizes.push({
  55. name: "Megatall",
  56. height: math.unit(650, "meters")
  57. });
  58. const entity = makeEntity({ name: name }, views, sizes);
  59. entity.views[entity.defaultView].height = startingSize;
  60. return entity;
  61. }
  62. function makeBuildings() {
  63. const results = [];
  64. results.push({
  65. name: "Two-Story Home",
  66. constructor: () => makeBuilding(
  67. "House",
  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. {
  90. name: "Wide Skyscraper",
  91. constructor: () => makeSkyscraper(
  92. "Wide Skyscraper",
  93. { source: "./media/buildings/skyscrapers/wide.svg" },
  94. math.unit(40, "stories")
  95. )
  96. }
  97. );
  98. results.push(
  99. {
  100. name: "Skyscraper",
  101. constructor: () => makeSkyscraper(
  102. "Skyscraper",
  103. { source: "./media/buildings/skyscrapers/medium.svg" },
  104. math.unit(40, "stories")
  105. )
  106. }
  107. );
  108. results.push(
  109. {
  110. name: "Slender Skyscraper",
  111. constructor: () => makeSkyscraper(
  112. "Slender Skyscraper",
  113. { source: "./media/buildings/skyscrapers/slender.svg" },
  114. math.unit(40, "stories")
  115. )
  116. }
  117. );
  118. results.push(
  119. {
  120. name: "Narrow Skyscraper",
  121. constructor: () => makeSkyscraper(
  122. "Narrow Skyscraper",
  123. { source: "./media/buildings/skyscrapers/narrow.svg" },
  124. math.unit(40, "stories")
  125. )
  126. }
  127. );
  128. results.sort((b1, b2) => {
  129. e1 = b1.constructor();
  130. e2 = b2.constructor();
  131. return -math.subtract(e1.views[e1.defaultView].height, e2.views[e2.defaultView].height).value;
  132. });
  133. return results;
  134. }