function makeBuilding(name, height, image) { views = { building: { attributes: { height: { name: "Height", power: 1, type: "length", base: height } }, image: image, name: "building" }, }; return makeEntity({ name: name }, views); } function makeSkyscraper(name, image) { views = { building: { attributes: { height: { name: "Height", power: 1, type: "length", base: math.unit(1, "meter") } }, image: image, name: "building" }, }; const sizes = []; sizes.push({ name: "Short", height: math.unit(15, "stories") }); sizes.push({ name: "Medium", height: math.unit(40, "stories"), default: true }); sizes.push({ name: "Supertall", height: math.unit(350, "meters") }); sizes.push({ name: "Megatall", height: math.unit(650, "meters") }); const entity = makeEntity({ name: name }, views, sizes); return entity; } function makeBuildings() { const results = []; results.push({ name: "Two-Story Home", constructor: () => makeBuilding( "Two-Story Home", math.unit(25, "feet"), { source: "./media/buildings/house.svg" } ) }); results.push({ name: "Mobile Home", constructor: () => makeBuilding( "Mobile Home", math.unit(10, "feet"), { source: "./media/buildings/mobile-home.svg" } ) }); results.push({ name: "Mailbox", constructor: () => makeBuilding( "Mailbox", math.unit(5.1, "feet"), { source: "./media/buildings/mailbox.svg" } ) }); results.push({ name: "Bus Stop", constructor: () => makeBuilding( "Bus Stop", math.unit(8, "feet"), { source: "./media/buildings/bus-stop.svg" } ) }); results.push( { name: "Wide Skyscraper", constructor: () => makeSkyscraper( "Wide Skyscraper", { source: "./media/buildings/skyscrapers/wide.svg" } ) } ); results.push( { name: "Skyscraper", constructor: () => makeSkyscraper( "Skyscraper", { source: "./media/buildings/skyscrapers/medium.svg" } ) } ); results.push( { name: "Slender Skyscraper", constructor: () => makeSkyscraper( "Slender Skyscraper", { source: "./media/buildings/skyscrapers/slender.svg" } ) } ); results.push( { name: "Narrow Skyscraper", constructor: () => makeSkyscraper( "Narrow Skyscraper", { source: "./media/buildings/skyscrapers/narrow.svg" } ) } ); results.push( makeHeight( [ ["four-lane-highway", 27.432, "meters"], ["sidewalk", 24, "feet"] ], "Roads", "", "buildings" ) ) results.push( makeHeight( [ ["residential", 12, "feet"], ["freeway", 50, "feet"] ], "Street Lamps", "", "buildings" ) ) results.push( makeHeight( [ ["manhattan", 141.8, "meters"], ["houston", 93, "meters"] ], "City Blocks", "", "buildings" ) ) results.push( makeHeight( [ ["badminton-court", 13.4, "meters"], ["basketball-court", 28, "meters"], ["bocce-court", 27.5, "meters"], ["bowling-lane", 23.8, "meters"], ["football-field", 160, "feet"], ["ice-hockey", 30, "meters"], ["netball-court", 30.5, "meters"], ["olympic-swimming-pool", 25, "meters"], ["snooker-table", 3.7, "meters"], ["squash-court", 9.8, "meters"], ["table-tennis", 2.79, "meters"], ["tennis-court", 23.8, "meters"], ["volleyball-court", 21.6, "meters"], ], "Sports Fields", "", "buildings" ) ) results.push( makeHeight( [ ["small", 51.8, "meters"], ["medium", 108.1, "meters"], ["large", 141.7, "meters"], ["extra-large", 190.2, "meters"] ], "Wind Turbines", "", "buildings" ) ) results.push({ name: "Gas Station", constructor: () => makeBuilding( "Gas Station", math.unit(6.78, "meters"), { source: "./media/buildings/gas-station.svg" } ) }); results.sort((b1, b2) => { e1 = b1.constructor(); e2 = b2.constructor(); return -math.subtract(e1.views[e1.defaultView].height, e2.views[e2.defaultView].height).value; }); return results; }