| @@ -413,6 +413,7 @@ function createEntityMaker(info, views, sizes) { | |||||
| maker.name = info.name; | maker.name = info.name; | ||||
| maker.info = info; | maker.info = info; | ||||
| maker.sizes = sizes; | |||||
| maker.constructor = () => makeEntity(info, views, sizes); | maker.constructor = () => makeEntity(info, views, sizes); | ||||
| maker.authors = []; | maker.authors = []; | ||||
| @@ -2306,31 +2307,97 @@ const filterDefs = { | |||||
| id: "none", | id: "none", | ||||
| name: "No Filter", | name: "No Filter", | ||||
| extract: maker => [], | extract: maker => [], | ||||
| render: name => name | |||||
| render: name => name, | |||||
| sort: (tag1, tag2) => tag1[1].localeCompare(tag2[1]) | |||||
| }, | }, | ||||
| author: { | author: { | ||||
| id: "author", | id: "author", | ||||
| name: "Authors", | name: "Authors", | ||||
| extract: maker => maker.authors ? maker.authors : [], | extract: maker => maker.authors ? maker.authors : [], | ||||
| render: author => attributionData.people[author].name | |||||
| render: author => attributionData.people[author].name, | |||||
| sort: (tag1, tag2) => tag1[1].localeCompare(tag2[1]) | |||||
| }, | }, | ||||
| owner: { | owner: { | ||||
| id: "owner", | id: "owner", | ||||
| name: "Owners", | name: "Owners", | ||||
| extract: maker => maker.owners ? maker.owners : [], | extract: maker => maker.owners ? maker.owners : [], | ||||
| render: owner => attributionData.people[owner].name | |||||
| render: owner => attributionData.people[owner].name, | |||||
| sort: (tag1, tag2) => tag1[1].localeCompare(tag2[1]) | |||||
| }, | }, | ||||
| species: { | species: { | ||||
| id: "species", | id: "species", | ||||
| name: "Species", | name: "Species", | ||||
| extract: maker => maker.info && maker.info.species ? getSpeciesInfo(maker.info.species) : [], | extract: maker => maker.info && maker.info.species ? getSpeciesInfo(maker.info.species) : [], | ||||
| render: species => speciesData[species].name | |||||
| render: species => speciesData[species].name, | |||||
| sort: (tag1, tag2) => tag1[1].localeCompare(tag2[1]) | |||||
| }, | }, | ||||
| tags: { | tags: { | ||||
| id: "tags", | id: "tags", | ||||
| name: "Tags", | name: "Tags", | ||||
| extract: maker => maker.info && maker.info.tags ? maker.info.tags : [], | extract: maker => maker.info && maker.info.tags ? maker.info.tags : [], | ||||
| render: tag => tagDefs[tag] | |||||
| render: tag => tagDefs[tag], | |||||
| sort: (tag1, tag2) => tag1[1].localeCompare(tag2[1]) | |||||
| }, | |||||
| size: { | |||||
| id: "size", | |||||
| name: "Normal Size", | |||||
| extract: maker => maker.sizes && maker.sizes.length > 0 ? Array.from(maker.sizes.reduce((result, size) => { | |||||
| if (result && !size.default) { | |||||
| return result; | |||||
| } | |||||
| let meters = size.height.toNumber("meters"); | |||||
| if (meters < 1e-1) { | |||||
| return ["micro"]; | |||||
| } else if (meters < 1e1) { | |||||
| return ["moderate"]; | |||||
| } else { | |||||
| return ["macro"]; | |||||
| } | |||||
| }, null)) : [], | |||||
| render: tag => { return { | |||||
| "micro": "Micro", | |||||
| "moderate": "Moderate", | |||||
| "macro": "Macro" | |||||
| }[tag]}, | |||||
| sort: (tag1, tag2) => { | |||||
| const order = { | |||||
| "micro": 0, | |||||
| "moderate": 1, | |||||
| "macro": 2 | |||||
| }; | |||||
| return order[tag1[0]] - order[tag2[0]]; | |||||
| } | |||||
| }, | |||||
| allSizes: { | |||||
| id: "allSizes", | |||||
| name: "Possible Size", | |||||
| extract: maker => maker.sizes ? Array.from(maker.sizes.reduce((set, size) => { | |||||
| let meters = size.height.toNumber("meters"); | |||||
| if (meters < 1e-1) { | |||||
| set.add("micro"); | |||||
| } else if (meters < 1e1) { | |||||
| set.add("moderate"); | |||||
| } else { | |||||
| set.add("macro"); | |||||
| } | |||||
| return set; | |||||
| }, new Set())) : [], | |||||
| render: tag => { return { | |||||
| "micro": "Micro", | |||||
| "moderate": "Moderate", | |||||
| "macro": "Macro" | |||||
| }[tag]}, | |||||
| sort: (tag1, tag2) => { | |||||
| const order = { | |||||
| "micro": 0, | |||||
| "moderate": 1, | |||||
| "macro": 2 | |||||
| }; | |||||
| return order[tag1[0]] - order[tag2[0]]; | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -2456,6 +2523,12 @@ function prepareEntities() { | |||||
| const count = makers.length + 1; | const count = makers.length + 1; | ||||
| let index = 0; | let index = 0; | ||||
| if (makers.length > 50) { | |||||
| if (!confirm("Really spawn " + makers.length + " things at once?")) { | |||||
| return; | |||||
| } | |||||
| } | |||||
| makers.map(element => { | makers.map(element => { | ||||
| const category = document.querySelector("#category-picker").value; | const category = document.querySelector("#category-picker").value; | ||||
| const maker = availableEntities[category][element.value]; | const maker = availableEntities[category][element.value]; | ||||
| @@ -2466,7 +2539,7 @@ function prepareEntities() { | |||||
| }); | }); | ||||
| }); | }); | ||||
| Array.from(filterSets[filter.id]).map(name => [name, filter.render(name)]).sort((e1, e2) => e1[1].toLowerCase().localeCompare(e2[1].toLowerCase())).forEach(name => { | |||||
| Array.from(filterSets[filter.id]).map(name => [name, filter.render(name)]).sort(filterDefs[filter.id].sort).forEach(name => { | |||||
| const option = document.createElement("option"); | const option = document.createElement("option"); | ||||
| option.innerText = name[1]; | option.innerText = name[1]; | ||||
| option.value = name[0]; | option.value = name[0]; | ||||