From e738a9d39ef4d3e9d1201410327933170bbc4b0d Mon Sep 17 00:00:00 2001 From: Jake Johnson Date: Wed, 15 Sep 2021 22:01:00 -0600 Subject: [PATCH 1/5] adding rarityData javascript file --- rarityData.js | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 rarityData.js diff --git a/rarityData.js b/rarityData.js new file mode 100644 index 00000000..d7fab610 --- /dev/null +++ b/rarityData.js @@ -0,0 +1,76 @@ +'use strict'; + +const fs = require('fs'); +const { + layers, + editionSize +} = require("./input/config.js"); + +let rarityChart = []; + +// initialize rarity chart +layers.forEach((layer) => { + let elementsList = []; + let rarityForLayer = { + traits: elementsList + }; + for(let i = 0; i < layer.elements.length; i++) + { + elementsList = { + value : layer.elements[i].name, + occurence : 0, + }; + rarityForLayer.traits.push(elementsList); + } + + rarityChart[layer.id] = rarityForLayer; +}); + +console.log(rarityChart) + +// read metadata data +let rawdata = fs.readFileSync('./output/_metadata.json'); +let data = JSON.parse(rawdata); + +// fill up rarity chart with occurences from metadata +data.forEach((element) => { + + for(let i = 0; i < element.attributes.length; i++) + { + let traitType = element.attributes[i].name; + let value = element.attributes[i].value; + + console.log(element) + console.log(element.attributes.length) + console.log(element.attributes) + console.log(traitType) + console.log(rarityChart[traitType]) + + let rarityChartTrait = rarityChart[traitType]; + + for (let i = 0; i < rarityChartTrait.traits.length; i++) + { + if (rarityChartTrait.traits[i].value == value){ + rarityChartTrait.traits[i].occurence++; + } + } + } + +}); + +// iterate through rarity list and convert the occurences to percentages +for (const [layer, traits] of Object.entries(rarityChart)) { + for (const [trait, value] of Object.entries(traits)) { + for (const [key, val] of Object.entries(value)) { + val.occurence = (val.occurence / NUM_OF_EDITIONS) * 100 + } + } +} + +// print out rarity data to console +for (const [layer, traits] of Object.entries(rarityChart)) { + console.log(`Layer: ${layer}`) + for (const [trait, value] of Object.entries(traits)) { + console.log(value) + } +} From 109da9614e69927b7162183a05f02ffad9196793 Mon Sep 17 00:00:00 2001 From: Jake Johnson Date: Wed, 15 Sep 2021 22:17:33 -0600 Subject: [PATCH 2/5] fixes rarityData script and adds layer name to metadata --- index.js | 2 ++ rarityData.js | 18 +++++------------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/index.js b/index.js index 679e1270..48b751ee 100644 --- a/index.js +++ b/index.js @@ -62,6 +62,7 @@ const generateMetadata = (_dna, _edition, _attributesList) => { const getAttributeForElement = (_element) => { let selectedElement = _element.layer.selectedElement; let attribute = { + trait_type: _element.layer.name, name: selectedElement.name, rarity: selectedElement.rarity, }; @@ -94,6 +95,7 @@ const constructLayerToDna = (_dna = [], _layers = [], _rarity) => { let mappedDnaToLayers = _layers.map((layer, index) => { let selectedElement = layer.elements.find(element => element.id === _dna[index]); return { + name: layer.id, location: layer.location, position: layer.position, size: layer.size, diff --git a/rarityData.js b/rarityData.js index d7fab610..a1d0ebe8 100644 --- a/rarityData.js +++ b/rarityData.js @@ -18,7 +18,7 @@ layers.forEach((layer) => { { elementsList = { value : layer.elements[i].name, - occurence : 0, + percentage : 0, }; rarityForLayer.traits.push(elementsList); } @@ -26,8 +26,6 @@ layers.forEach((layer) => { rarityChart[layer.id] = rarityForLayer; }); -console.log(rarityChart) - // read metadata data let rawdata = fs.readFileSync('./output/_metadata.json'); let data = JSON.parse(rawdata); @@ -37,21 +35,15 @@ data.forEach((element) => { for(let i = 0; i < element.attributes.length; i++) { - let traitType = element.attributes[i].name; - let value = element.attributes[i].value; - - console.log(element) - console.log(element.attributes.length) - console.log(element.attributes) - console.log(traitType) - console.log(rarityChart[traitType]) + let traitType = element.attributes[i].trait_type; + let value = element.attributes[i].name; let rarityChartTrait = rarityChart[traitType]; for (let i = 0; i < rarityChartTrait.traits.length; i++) { if (rarityChartTrait.traits[i].value == value){ - rarityChartTrait.traits[i].occurence++; + rarityChartTrait.traits[i].percentage++; } } } @@ -62,7 +54,7 @@ data.forEach((element) => { for (const [layer, traits] of Object.entries(rarityChart)) { for (const [trait, value] of Object.entries(traits)) { for (const [key, val] of Object.entries(value)) { - val.occurence = (val.occurence / NUM_OF_EDITIONS) * 100 + val.percentage = (val.percentage / editionSize) * 100 } } } From 06c846ed4939aa07758edf225a8f23d9b616a6d6 Mon Sep 17 00:00:00 2001 From: Jake Johnson Date: Wed, 15 Sep 2021 22:21:17 -0600 Subject: [PATCH 3/5] update readme --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index c54ad945..f7e32425 100644 --- a/README.md +++ b/README.md @@ -55,5 +55,8 @@ Use the existing `addLayers` calls as guidance for how to add layers. This can e It is possible to provide a percentage at which e.g. a rare item would contain a rare vs. common part in a given layer. This can be done via the `addRarityPercentForLayer` that can be found in the `config.js` as well. This allows for more fine grained control over how much randomness there should be during the generation process, and allows a combination of common and rare parts. +### Printing rarity data +To see the percentages of each attribute across your collection, run `node rarityData.js` + # Development suggestions - Preferably use VSCode with the prettifier plugin for a consistent coding style (or equivalent js formatting rules) From 6b0e35d9f8f9a9dd0f1fa5b9a1d002d468bc220d Mon Sep 17 00:00:00 2001 From: Jake Johnson Date: Wed, 15 Sep 2021 22:27:02 -0600 Subject: [PATCH 4/5] fix typo --- rarityData.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rarityData.js b/rarityData.js index a1d0ebe8..5c527b26 100644 --- a/rarityData.js +++ b/rarityData.js @@ -30,7 +30,7 @@ layers.forEach((layer) => { let rawdata = fs.readFileSync('./output/_metadata.json'); let data = JSON.parse(rawdata); -// fill up rarity chart with occurences from metadata +// fill up rarity chart with occurrences from metadata data.forEach((element) => { for(let i = 0; i < element.attributes.length; i++) @@ -50,7 +50,7 @@ data.forEach((element) => { }); -// iterate through rarity list and convert the occurences to percentages +// iterate through rarity list and convert the occurrences to percentages for (const [layer, traits] of Object.entries(rarityChart)) { for (const [trait, value] of Object.entries(traits)) { for (const [key, val] of Object.entries(value)) { From d392d788afbe60d1d7503fc9d8de77df0d533704 Mon Sep 17 00:00:00 2001 From: Jake Johnson Date: Wed, 15 Sep 2021 23:12:02 -0600 Subject: [PATCH 5/5] Allows collection size to work for zero indexing... cleans code --- rarityData.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/rarityData.js b/rarityData.js index 5c527b26..14c193ac 100644 --- a/rarityData.js +++ b/rarityData.js @@ -3,17 +3,22 @@ const fs = require('fs'); const { layers, - editionSize + editionSize, + startEditionFrom } = require("./input/config.js"); +let collectionSize = editionSize - startEditionFrom + 1; + let rarityChart = []; // initialize rarity chart layers.forEach((layer) => { let elementsList = []; + let rarityForLayer = { traits: elementsList }; + for(let i = 0; i < layer.elements.length; i++) { elementsList = { @@ -54,15 +59,15 @@ data.forEach((element) => { for (const [layer, traits] of Object.entries(rarityChart)) { for (const [trait, value] of Object.entries(traits)) { for (const [key, val] of Object.entries(value)) { - val.percentage = (val.percentage / editionSize) * 100 + val.percentage = (val.percentage / collectionSize) * 100; } } } // print out rarity data to console for (const [layer, traits] of Object.entries(rarityChart)) { - console.log(`Layer: ${layer}`) + console.log(`Layer: ${layer}`); for (const [trait, value] of Object.entries(traits)) { - console.log(value) + console.log(value); } }