From a5cfdbc01de5195a5b97dbcdad4ac3fb88c18cc3 Mon Sep 17 00:00:00 2001 From: vicnaum Date: Wed, 29 Nov 2023 14:19:26 +0100 Subject: [PATCH] misc: Profile SVGs - Colors reworked everywhere --- contracts/libraries/svgs/Profile/Body.sol | 39 ++++++----- contracts/libraries/svgs/Profile/Face.sol | 20 +++++- contracts/libraries/svgs/Profile/Hands.sol | 1 + contracts/libraries/svgs/Profile/Head.sol | 3 +- contracts/libraries/svgs/Profile/Headwear.sol | 9 --- .../svgs/Profile/Headwear/HeadwearBeanie.sol | 27 +++++--- .../svgs/Profile/Headwear/HeadwearCrown.sol | 24 +++++-- .../svgs/Profile/Headwear/HeadwearFloral.sol | 24 +++++-- .../svgs/Profile/Headwear/HeadwearGlasses.sol | 36 ++++++---- .../svgs/Profile/Headwear/HeadwearHat.sol | 18 +++-- .../Profile/Headwear/HeadwearIcecream.sol | 24 +++++-- .../svgs/Profile/Headwear/HeadwearLeafs.sol | 67 ------------------- .../Profile/Headwear/HeadwearMushroom.sol | 26 ++++--- .../Profile/Headwear/HeadwearNightcap.sol | 36 ++++++---- .../Profile/Headwear/HeadwearPartyhat.sol | 23 +++++-- .../svgs/Profile/Headwear/HeadwearPlants.sol | 34 +++++++--- .../Profile/Headwear/HeadwearSparkles.sol | 5 +- contracts/libraries/svgs/Profile/Helpers.sol | 16 +++-- contracts/libraries/svgs/Profile/Legs.sol | 17 ++++- .../libraries/svgs/Profile/LensColors.sol | 33 +++++++++ contracts/libraries/svgs/Profile/Logo.sol | 15 +++-- .../libraries/svgs/Profile/ProfileSVG.sol | 4 +- contracts/libraries/svgs/Profile/Shoes.sol | 17 ++++- script/svg/ProfileSVGGen.t.sol | 4 +- 24 files changed, 322 insertions(+), 200 deletions(-) delete mode 100644 contracts/libraries/svgs/Profile/Headwear/HeadwearLeafs.sol create mode 100644 contracts/libraries/svgs/Profile/LensColors.sol diff --git a/contracts/libraries/svgs/Profile/Body.sol b/contracts/libraries/svgs/Profile/Body.sol index 6dec641..8908b9d 100644 --- a/contracts/libraries/svgs/Profile/Body.sol +++ b/contracts/libraries/svgs/Profile/Body.sol @@ -8,6 +8,8 @@ import {BodyHoodie} from './Body/BodyHoodie.sol'; import {BodyTanktop} from './Body/BodyTanktop.sol'; import {BodyTShirt} from './Body/BodyTShirt.sol'; +import {LensColors} from './LensColors.sol'; + library Body { enum BodyVariants { HOODIE, @@ -21,7 +23,8 @@ library Body { LIGHT, DARK, PURPLE, - BLUE + BLUE, + PINK } function getBody( @@ -74,27 +77,21 @@ library Body { function getPrimaryBodyColor(BodyVariants bodyVariant, BodyColors bodyColor) public pure returns (string memory) { if (bodyColor == BodyColors.GREEN) { - return '#F4FFDC'; + return LensColors.lightGreen; } else if (bodyColor == BodyColors.LIGHT) { - return '#FFFFFF'; + return LensColors.white; } else if (bodyColor == BodyColors.DARK) { if (bodyVariant == BodyVariants.JACKET) { - return '#EAEAEA'; + return LensColors.lightGray; } else { - return '#575757'; + return LensColors.dark; } } else if (bodyColor == BodyColors.PURPLE) { - if (bodyVariant == BodyVariants.HOODIE) { - return '#EAD7FF'; - } else { - return '#F3EAFF'; - } + return LensColors.lightPurple; } else if (bodyColor == BodyColors.BLUE) { - if (bodyVariant == BodyVariants.HOODIE) { - return '#D9E0FF'; - } else { - return '#ECF0FF'; - } + return LensColors.lightBlue; + } else if (bodyColor == BodyColors.PINK) { + return LensColors.lightPink; } else { revert(); // Avoid warnings. } @@ -103,15 +100,17 @@ library Body { // We don't need variant because this is only used in Jacket function getSecondaryBodyColor(BodyColors bodyColor) public pure returns (string memory) { if (bodyColor == BodyColors.GREEN) { - return '#93A97D'; + return LensColors.darkGreen; } else if (bodyColor == BodyColors.LIGHT) { - return '#EAEAEA'; + return LensColors.lightGray; } else if (bodyColor == BodyColors.DARK) { - return '#575757'; + return LensColors.dark; + } else if (bodyColor == BodyColors.PINK) { + return LensColors.darkPink; } else if (bodyColor == BodyColors.PURPLE) { - return '#EAD7FF'; + return LensColors.darkPurple; } else if (bodyColor == BodyColors.BLUE) { - return '#D9E0FF'; + return LensColors.darkBlue; } else { revert(); // Avoid warnings. } diff --git a/contracts/libraries/svgs/Profile/Face.sol b/contracts/libraries/svgs/Profile/Face.sol index b13cf3d..9b7a04a 100644 --- a/contracts/libraries/svgs/Profile/Face.sol +++ b/contracts/libraries/svgs/Profile/Face.sol @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import {LensColors} from './LensColors.sol'; + library Face { enum FaceVariants { BUBBLEGUM, @@ -137,9 +139,23 @@ library Face { function _getStyleTag(FaceColors faceColor) internal pure returns (string memory) { if (faceColor == FaceColors.GOLD) { - return ''; + return + string.concat( + '' + ); } else { - return ''; + return + string.concat( + '' + ); } } } diff --git a/contracts/libraries/svgs/Profile/Hands.sol b/contracts/libraries/svgs/Profile/Hands.sol index da2de2f..ee7de90 100644 --- a/contracts/libraries/svgs/Profile/Hands.sol +++ b/contracts/libraries/svgs/Profile/Hands.sol @@ -13,6 +13,7 @@ library Hands { enum HandsColors { GREEN, + PINK, PURPLE, BLUE, GOLD diff --git a/contracts/libraries/svgs/Profile/Head.sol b/contracts/libraries/svgs/Profile/Head.sol index c322b36..143debe 100644 --- a/contracts/libraries/svgs/Profile/Head.sol +++ b/contracts/libraries/svgs/Profile/Head.sol @@ -1,11 +1,12 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {Skin} from "./Helpers.sol"; +import {Skin} from './Helpers.sol'; library Head { enum HeadColors { GREEN, + PINK, PURPLE, BLUE, GOLD diff --git a/contracts/libraries/svgs/Profile/Headwear.sol b/contracts/libraries/svgs/Profile/Headwear.sol index 05cdf5d..c8a6745 100644 --- a/contracts/libraries/svgs/Profile/Headwear.sol +++ b/contracts/libraries/svgs/Profile/Headwear.sol @@ -5,7 +5,6 @@ import {Helpers} from './Helpers.sol'; import {HeadwearBeanie} from './Headwear/HeadwearBeanie.sol'; import {HeadwearHat} from './Headwear/HeadwearHat.sol'; import {HeadwearIcecream} from './Headwear/HeadwearIcecream.sol'; -import {HeadwearLeafs} from './Headwear/HeadwearLeafs.sol'; import {HeadwearPlants} from './Headwear/HeadwearPlants.sol'; import {HeadwearSparkles} from './Headwear/HeadwearSparkles.sol'; import {HeadwearCrown} from './Headwear/HeadwearCrown.sol'; @@ -20,7 +19,6 @@ library Headwear { NONE, BEANIE, HAT, - LEAFS, PLANTS, SPARKLES, CROWN, @@ -82,13 +80,6 @@ library Headwear { uint8(type(HeadwearIcecream.IcecreamColors).max) ); return HeadwearIcecream.getIcecream(icecreamColor); - } else if (variant == HeadwearVariants.LEAFS) { - HeadwearLeafs.LeafsColors leafsColor = isGold - ? HeadwearLeafs.LeafsColors.GOLD - : HeadwearLeafs.LeafsColors( - Helpers.getColor(seed, Helpers.ComponentBytes.HEADWEAR) % uint8(type(HeadwearLeafs.LeafsColors).max) - ); - return HeadwearLeafs.getLeafs(leafsColor); } else if (variant == HeadwearVariants.PLANTS) { HeadwearPlants.PlantsColors plantsColor = isGold ? HeadwearPlants.PlantsColors.GOLD diff --git a/contracts/libraries/svgs/Profile/Headwear/HeadwearBeanie.sol b/contracts/libraries/svgs/Profile/Headwear/HeadwearBeanie.sol index 40b8787..a830233 100644 --- a/contracts/libraries/svgs/Profile/Headwear/HeadwearBeanie.sol +++ b/contracts/libraries/svgs/Profile/Headwear/HeadwearBeanie.sol @@ -2,13 +2,16 @@ pragma solidity ^0.8.0; import {Headwear} from 'contracts/libraries/svgs/Profile/Headwear.sol'; +import {LensColors} from 'contracts/libraries/svgs/Profile/LensColors.sol'; library HeadwearBeanie { enum BeanieColors { GREEN, + PINK, + PURPLE, + BLUE, LIGHT, DARK, - PURPLE, GOLD } @@ -39,15 +42,19 @@ library HeadwearBeanie { function _getBeanieColor(BeanieColors beanieColor) internal pure returns (string memory) { if (beanieColor == BeanieColors.GREEN) { - return '#F4FFDC'; - } else if (beanieColor == BeanieColors.LIGHT) { - return '#FFFFFF'; - } else if (beanieColor == BeanieColors.DARK) { - return '#575757'; + return LensColors.lightGreen; + } else if (beanieColor == BeanieColors.PINK) { + return LensColors.lightPink; + } else if (beanieColor == BeanieColors.BLUE) { + return LensColors.lightBlue; } else if (beanieColor == BeanieColors.PURPLE) { - return '#F3EAFF'; + return LensColors.lightPurple; + } else if (beanieColor == BeanieColors.LIGHT) { + return LensColors.white; + } else if (beanieColor == BeanieColors.DARK) { + return LensColors.dark; } else if (beanieColor == BeanieColors.GOLD) { - return '#FFEE93'; + return LensColors.lightGold; } else { revert(); // Avoid warnings. } @@ -56,6 +63,10 @@ library HeadwearBeanie { function _getHeadwearColor(BeanieColors beanieColor) internal pure returns (Headwear.HeadwearColors) { if (beanieColor == BeanieColors.GREEN) { return Headwear.HeadwearColors.GREEN; + } else if (beanieColor == BeanieColors.PINK) { + return Headwear.HeadwearColors.PINK; + } else if (beanieColor == BeanieColors.BLUE) { + return Headwear.HeadwearColors.BLUE; } else if (beanieColor == BeanieColors.LIGHT) { return Headwear.HeadwearColors.LIGHT; } else if (beanieColor == BeanieColors.DARK) { diff --git a/contracts/libraries/svgs/Profile/Headwear/HeadwearCrown.sol b/contracts/libraries/svgs/Profile/Headwear/HeadwearCrown.sol index 1f90f7b..4636b9a 100644 --- a/contracts/libraries/svgs/Profile/Headwear/HeadwearCrown.sol +++ b/contracts/libraries/svgs/Profile/Headwear/HeadwearCrown.sol @@ -2,12 +2,16 @@ pragma solidity ^0.8.0; import {Headwear} from 'contracts/libraries/svgs/Profile/Headwear.sol'; +import {LensColors} from 'contracts/libraries/svgs/Profile/LensColors.sol'; library HeadwearCrown { enum CrownColors { GREEN, PURPLE, BLUE, + PINK, + LIGHT, + DARK, GOLD } @@ -39,13 +43,19 @@ library HeadwearCrown { function _getCrownColor(CrownColors crownColor) internal pure returns (string memory, string memory) { if (crownColor == CrownColors.GREEN) { - return ('#F4FFDC', '#A0D170'); + return (LensColors.lightGreen, LensColors.baseGreen); } else if (crownColor == CrownColors.PURPLE) { - return ('#F9F4FF', '#EAD7FF'); + return (LensColors.lightPurple, LensColors.basePurple); } else if (crownColor == CrownColors.BLUE) { - return ('#F4F6FF', '#D9E0FF'); + return (LensColors.lightBlue, LensColors.baseBlue); + } else if (crownColor == CrownColors.PINK) { + return (LensColors.lightPink, LensColors.basePink); + } else if (crownColor == CrownColors.LIGHT) { + return (LensColors.white, LensColors.lightGray); + } else if (crownColor == CrownColors.DARK) { + return (LensColors.gray, LensColors.gray); } else if (crownColor == CrownColors.GOLD) { - return ('#FFEE93', '#FFCD3D'); + return (LensColors.lightGold, LensColors.baseGold); } else { revert(); // Avoid warnings. } @@ -58,6 +68,12 @@ library HeadwearCrown { return Headwear.HeadwearColors.PURPLE; } else if (crownColor == CrownColors.BLUE) { return Headwear.HeadwearColors.BLUE; + } else if (crownColor == CrownColors.PINK) { + return Headwear.HeadwearColors.PINK; + } else if (crownColor == CrownColors.LIGHT) { + return Headwear.HeadwearColors.LIGHT; + } else if (crownColor == CrownColors.DARK) { + return Headwear.HeadwearColors.DARK; } else if (crownColor == CrownColors.GOLD) { return Headwear.HeadwearColors.GOLD; } else { diff --git a/contracts/libraries/svgs/Profile/Headwear/HeadwearFloral.sol b/contracts/libraries/svgs/Profile/Headwear/HeadwearFloral.sol index 9be8efd..66a30cd 100644 --- a/contracts/libraries/svgs/Profile/Headwear/HeadwearFloral.sol +++ b/contracts/libraries/svgs/Profile/Headwear/HeadwearFloral.sol @@ -2,12 +2,16 @@ pragma solidity ^0.8.0; import {Headwear} from 'contracts/libraries/svgs/Profile/Headwear.sol'; +import {LensColors} from 'contracts/libraries/svgs/Profile/LensColors.sol'; library HeadwearFloral { enum FloralColors { GREEN, + PINK, PURPLE, BLUE, + LIGHT, + DARK, GOLD } @@ -39,13 +43,19 @@ library HeadwearFloral { function _getFloralColor(FloralColors floralColor) internal pure returns (string memory, string memory) { if (floralColor == FloralColors.GREEN) { - return ('#F4FFDC', '#A0D170'); + return (LensColors.lightGreen, LensColors.baseGreen); } else if (floralColor == FloralColors.PURPLE) { - return ('#F9F4FF', '#EAD7FF'); + return (LensColors.lightPurple, LensColors.basePurple); } else if (floralColor == FloralColors.BLUE) { - return ('#F4F6FF', '#D9E0FF'); + return (LensColors.lightBlue, LensColors.baseBlue); + } else if (floralColor == FloralColors.PINK) { + return (LensColors.lightPink, LensColors.basePink); + } else if (floralColor == FloralColors.LIGHT) { + return (LensColors.white, LensColors.lightGray); + } else if (floralColor == FloralColors.DARK) { + return (LensColors.gray, LensColors.gray); } else if (floralColor == FloralColors.GOLD) { - return ('#FFEE93', '#FFCD3D'); + return (LensColors.lightGold, LensColors.baseGold); } else { revert(); // Avoid warnings. } @@ -58,6 +68,12 @@ library HeadwearFloral { return Headwear.HeadwearColors.PURPLE; } else if (floralColor == FloralColors.BLUE) { return Headwear.HeadwearColors.BLUE; + } else if (floralColor == FloralColors.PINK) { + return Headwear.HeadwearColors.PINK; + } else if (floralColor == FloralColors.LIGHT) { + return Headwear.HeadwearColors.LIGHT; + } else if (floralColor == FloralColors.DARK) { + return Headwear.HeadwearColors.DARK; } else if (floralColor == FloralColors.GOLD) { return Headwear.HeadwearColors.GOLD; } else { diff --git a/contracts/libraries/svgs/Profile/Headwear/HeadwearGlasses.sol b/contracts/libraries/svgs/Profile/Headwear/HeadwearGlasses.sol index 1d812bc..4331b6e 100644 --- a/contracts/libraries/svgs/Profile/Headwear/HeadwearGlasses.sol +++ b/contracts/libraries/svgs/Profile/Headwear/HeadwearGlasses.sol @@ -2,12 +2,16 @@ pragma solidity ^0.8.0; import {Headwear} from 'contracts/libraries/svgs/Profile/Headwear.sol'; +import {LensColors} from 'contracts/libraries/svgs/Profile/LensColors.sol'; library HeadwearGlasses { enum GlassesColors { GREEN, + PINK, PURPLE, BLUE, + LIGHT, + DARK, GOLD } @@ -26,26 +30,24 @@ library HeadwearGlasses { } function _getGlassesStyle(GlassesColors glassesColor) internal pure returns (string memory) { - (string memory primaryColor, string memory secondaryColor) = _getGlassesColor(glassesColor); - return - string.concat( - '' - ); + return string.concat(''); } - function _getGlassesColor(GlassesColors glassesColor) internal pure returns (string memory, string memory) { + function _getGlassesColor(GlassesColors glassesColor) internal pure returns (string memory) { if (glassesColor == GlassesColors.GREEN) { - return ('#F4FFDC', '#A0D170'); + return LensColors.lightGreen; } else if (glassesColor == GlassesColors.PURPLE) { - return ('#F9F4FF', '#EAD7FF'); + return LensColors.lightPurple; } else if (glassesColor == GlassesColors.BLUE) { - return ('#F4F6FF', '#D9E0FF'); + return LensColors.lightBlue; + } else if (glassesColor == GlassesColors.PINK) { + return LensColors.lightPink; + } else if (glassesColor == GlassesColors.LIGHT) { + return LensColors.white; + } else if (glassesColor == GlassesColors.DARK) { + return LensColors.dark; } else if (glassesColor == GlassesColors.GOLD) { - return ('#FFEE93', '#FFCD3D'); + return LensColors.lightGold; } else { revert(); // Avoid warnings. } @@ -58,6 +60,12 @@ library HeadwearGlasses { return Headwear.HeadwearColors.PURPLE; } else if (glassesColor == GlassesColors.BLUE) { return Headwear.HeadwearColors.BLUE; + } else if (glassesColor == GlassesColors.PINK) { + return Headwear.HeadwearColors.PINK; + } else if (glassesColor == GlassesColors.LIGHT) { + return Headwear.HeadwearColors.LIGHT; + } else if (glassesColor == GlassesColors.DARK) { + return Headwear.HeadwearColors.DARK; } else if (glassesColor == GlassesColors.GOLD) { return Headwear.HeadwearColors.GOLD; } else { diff --git a/contracts/libraries/svgs/Profile/Headwear/HeadwearHat.sol b/contracts/libraries/svgs/Profile/Headwear/HeadwearHat.sol index 82d1f94..86a555e 100644 --- a/contracts/libraries/svgs/Profile/Headwear/HeadwearHat.sol +++ b/contracts/libraries/svgs/Profile/Headwear/HeadwearHat.sol @@ -2,10 +2,12 @@ pragma solidity ^0.8.0; import {Headwear} from 'contracts/libraries/svgs/Profile/Headwear.sol'; +import {LensColors} from 'contracts/libraries/svgs/Profile/LensColors.sol'; library HeadwearHat { enum HatColors { GREEN, + PINK, LIGHT, DARK, BLUE, @@ -43,17 +45,19 @@ library HeadwearHat { function _getHatColor(HatColors hatColor) internal pure returns (string memory, string memory) { if (hatColor == HatColors.GREEN) { - return ('#A0B884', '#F4FFDC'); + return (LensColors.darkGreen, LensColors.lightGreen); + } else if (hatColor == HatColors.PINK) { + return (LensColors.darkPink, LensColors.lightPink); } else if (hatColor == HatColors.LIGHT) { - return ('#EAEAEA', '#FFFFFF'); + return (LensColors.lightGray, LensColors.white); } else if (hatColor == HatColors.DARK) { - return ('#DBDBDB', '#575757'); + return (LensColors.gray, LensColors.dark); } else if (hatColor == HatColors.BLUE) { - return ('#F3EAFF', '#EAD7FF'); + return (LensColors.darkBlue, LensColors.lightBlue); } else if (hatColor == HatColors.PURPLE) { - return ('#ECF0FF', '#D9E0FF'); + return (LensColors.darkPurple, LensColors.lightPurple); } else if (hatColor == HatColors.GOLD) { - return ('#FFCF3D', '#FFEE93'); + return (LensColors.baseGold, LensColors.lightGold); } else { revert(); // Avoid warnings. } @@ -62,6 +66,8 @@ library HeadwearHat { function _getHeadwearColor(HatColors hatColor) internal pure returns (Headwear.HeadwearColors) { if (hatColor == HatColors.GREEN) { return Headwear.HeadwearColors.GREEN; + } else if (hatColor == HatColors.PINK) { + return Headwear.HeadwearColors.PINK; } else if (hatColor == HatColors.LIGHT) { return Headwear.HeadwearColors.LIGHT; } else if (hatColor == HatColors.DARK) { diff --git a/contracts/libraries/svgs/Profile/Headwear/HeadwearIcecream.sol b/contracts/libraries/svgs/Profile/Headwear/HeadwearIcecream.sol index 0c9205b..11d1823 100644 --- a/contracts/libraries/svgs/Profile/Headwear/HeadwearIcecream.sol +++ b/contracts/libraries/svgs/Profile/Headwear/HeadwearIcecream.sol @@ -2,12 +2,16 @@ pragma solidity ^0.8.0; import {Headwear} from 'contracts/libraries/svgs/Profile/Headwear.sol'; +import {LensColors} from 'contracts/libraries/svgs/Profile/LensColors.sol'; library HeadwearIcecream { enum IcecreamColors { GREEN, + PINK, BLUE, PURPLE, + LIGHT, + DARK, GOLD } @@ -27,13 +31,19 @@ library HeadwearIcecream { function _getIcecreamColor(IcecreamColors icecreamColor) internal pure returns (string memory) { if (icecreamColor == IcecreamColors.GREEN) { - return '#A0D170'; + return LensColors.baseGreen; + } else if (icecreamColor == IcecreamColors.PINK) { + return LensColors.basePink; } else if (icecreamColor == IcecreamColors.PURPLE) { - return '#EAD7FF'; + return LensColors.basePurple; } else if (icecreamColor == IcecreamColors.BLUE) { - return '#D9E0FF'; + return LensColors.baseBlue; + } else if (icecreamColor == IcecreamColors.LIGHT) { + return LensColors.lightGray; + } else if (icecreamColor == IcecreamColors.DARK) { + return LensColors.gray; } else if (icecreamColor == IcecreamColors.GOLD) { - return '#FFCD3D'; + return LensColors.baseGold; } else { revert(); // Avoid warnings. } @@ -42,10 +52,16 @@ library HeadwearIcecream { function _getHeadwearColor(IcecreamColors icecreamColor) internal pure returns (Headwear.HeadwearColors) { if (icecreamColor == IcecreamColors.GREEN) { return Headwear.HeadwearColors.GREEN; + } else if (icecreamColor == IcecreamColors.PINK) { + return Headwear.HeadwearColors.PINK; } else if (icecreamColor == IcecreamColors.PURPLE) { return Headwear.HeadwearColors.PURPLE; } else if (icecreamColor == IcecreamColors.BLUE) { return Headwear.HeadwearColors.BLUE; + } else if (icecreamColor == IcecreamColors.LIGHT) { + return Headwear.HeadwearColors.LIGHT; + } else if (icecreamColor == IcecreamColors.DARK) { + return Headwear.HeadwearColors.DARK; } else if (icecreamColor == IcecreamColors.GOLD) { return Headwear.HeadwearColors.GOLD; } else { diff --git a/contracts/libraries/svgs/Profile/Headwear/HeadwearLeafs.sol b/contracts/libraries/svgs/Profile/Headwear/HeadwearLeafs.sol deleted file mode 100644 index 35d092d..0000000 --- a/contracts/libraries/svgs/Profile/Headwear/HeadwearLeafs.sol +++ /dev/null @@ -1,67 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Headwear} from 'contracts/libraries/svgs/Profile/Headwear.sol'; - -library HeadwearLeafs { - enum LeafsColors { - GREEN, - BLUE, - PURPLE, - GOLD - } - - // // we take the 15th byte from the left for hat color - // uint8 color = uint8((seed >> 136) & 0xFF) % 3; - function getLeafs( - LeafsColors leafsColor - ) internal pure returns (string memory, Headwear.HeadwearVariants, Headwear.HeadwearColors) { - // leafs (4 colors: green, purple, blue, gold) - return ( - string.concat( - '', - _getLeafsStyle(leafsColor), - '' - ), - Headwear.HeadwearVariants.LEAFS, - _getHeadwearColor(leafsColor) - ); - } - - function _getLeafsStyle(LeafsColors leafsColor) internal pure returns (string memory) { - return - string.concat( - '' - ); - } - - function _getLeafsColor(LeafsColors leafsColor) internal pure returns (string memory) { - if (leafsColor == LeafsColors.GREEN) { - return '#A0D170'; - } else if (leafsColor == LeafsColors.PURPLE) { - return '#EAD7FF'; - } else if (leafsColor == LeafsColors.BLUE) { - return '#D9E0FF'; - } else if (leafsColor == LeafsColors.GOLD) { - return '#FBD159'; - } else { - revert(); // Avoid warnings. - } - } - - function _getHeadwearColor(LeafsColors leafsColor) internal pure returns (Headwear.HeadwearColors) { - if (leafsColor == LeafsColors.GREEN) { - return Headwear.HeadwearColors.GREEN; - } else if (leafsColor == LeafsColors.PURPLE) { - return Headwear.HeadwearColors.PURPLE; - } else if (leafsColor == LeafsColors.BLUE) { - return Headwear.HeadwearColors.BLUE; - } else if (leafsColor == LeafsColors.GOLD) { - return Headwear.HeadwearColors.GOLD; - } else { - revert(); // Avoid warnings. - } - } -} diff --git a/contracts/libraries/svgs/Profile/Headwear/HeadwearMushroom.sol b/contracts/libraries/svgs/Profile/Headwear/HeadwearMushroom.sol index 5e469d0..5fcabcb 100644 --- a/contracts/libraries/svgs/Profile/Headwear/HeadwearMushroom.sol +++ b/contracts/libraries/svgs/Profile/Headwear/HeadwearMushroom.sol @@ -2,6 +2,7 @@ pragma solidity ^0.8.0; import {Headwear} from 'contracts/libraries/svgs/Profile/Headwear.sol'; +import {LensColors} from 'contracts/libraries/svgs/Profile/LensColors.sol'; library HeadwearMushroom { enum MushroomColors { @@ -9,6 +10,8 @@ library HeadwearMushroom { PURPLE, BLUE, PINK, + LIGHT, + DARK, GOLD } @@ -47,24 +50,27 @@ library HeadwearMushroom { MushroomColors mushroomColor ) internal pure returns (string memory, string memory) { if (mushroomColor == MushroomColors.GOLD) { - return ('#fff', '#B96326'); + return (LensColors.white, LensColors.darkGold); } else { - (string memory primaryColor, ) = _getMushroomColor(mushroomColor); - return (primaryColor, '#000'); + return (LensColors.white, LensColors.black); } } function _getMushroomColor(MushroomColors mushroomColor) internal pure returns (string memory, string memory) { if (mushroomColor == MushroomColors.GREEN) { - return ('#F4FFDC', '#A0D170'); + return (LensColors.lightGreen, LensColors.baseGreen); } else if (mushroomColor == MushroomColors.PURPLE) { - return ('#F3EAFF', '#EAD7FF'); + return (LensColors.lightPurple, LensColors.basePurple); } else if (mushroomColor == MushroomColors.BLUE) { - return ('#ECF0FF', '#D9E0FF'); + return (LensColors.lightBlue, LensColors.baseBlue); } else if (mushroomColor == MushroomColors.PINK) { - return ('#FFE7F0', '#FFD2DD'); + return (LensColors.lightPink, LensColors.basePink); + } else if (mushroomColor == MushroomColors.LIGHT) { + return (LensColors.white, LensColors.white); + } else if (mushroomColor == MushroomColors.DARK) { + return (LensColors.gray, LensColors.white); } else if (mushroomColor == MushroomColors.GOLD) { - return ('#FFEE93', '#F8C944'); + return (LensColors.lightGold, LensColors.baseGold); } else { revert(); // Avoid warnings. } @@ -79,6 +85,10 @@ library HeadwearMushroom { return Headwear.HeadwearColors.BLUE; } else if (mushroomColor == MushroomColors.PINK) { return Headwear.HeadwearColors.PINK; + } else if (mushroomColor == MushroomColors.LIGHT) { + return Headwear.HeadwearColors.LIGHT; + } else if (mushroomColor == MushroomColors.DARK) { + return Headwear.HeadwearColors.DARK; } else if (mushroomColor == MushroomColors.GOLD) { return Headwear.HeadwearColors.GOLD; } else { diff --git a/contracts/libraries/svgs/Profile/Headwear/HeadwearNightcap.sol b/contracts/libraries/svgs/Profile/Headwear/HeadwearNightcap.sol index c50384f..3cf6c01 100644 --- a/contracts/libraries/svgs/Profile/Headwear/HeadwearNightcap.sol +++ b/contracts/libraries/svgs/Profile/Headwear/HeadwearNightcap.sol @@ -2,12 +2,16 @@ pragma solidity ^0.8.0; import {Headwear} from 'contracts/libraries/svgs/Profile/Headwear.sol'; +import {LensColors} from 'contracts/libraries/svgs/Profile/LensColors.sol'; library HeadwearNightcap { enum NightcapColors { GREEN, + PINK, PURPLE, BLUE, + LIGHT, + DARK, GOLD } @@ -26,26 +30,24 @@ library HeadwearNightcap { } function _getNightcapStyle(NightcapColors nightcapColor) internal pure returns (string memory) { - (string memory primaryColor, string memory secondaryColor) = _getNightcapColor(nightcapColor); - return - string.concat( - '' - ); + return string.concat(''); } - function _getNightcapColor(NightcapColors nightcapColor) internal pure returns (string memory, string memory) { + function _getNightcapColor(NightcapColors nightcapColor) internal pure returns (string memory) { if (nightcapColor == NightcapColors.GREEN) { - return ('#F4FFDC', '#A0D170'); + return LensColors.lightGreen; + } else if (nightcapColor == NightcapColors.PINK) { + return LensColors.lightPink; } else if (nightcapColor == NightcapColors.PURPLE) { - return ('#F9F4FF', '#EAD7FF'); + return LensColors.lightPurple; } else if (nightcapColor == NightcapColors.BLUE) { - return ('#F4F6FF', '#D9E0FF'); + return LensColors.lightBlue; + } else if (nightcapColor == NightcapColors.LIGHT) { + return LensColors.white; + } else if (nightcapColor == NightcapColors.DARK) { + return LensColors.gray; } else if (nightcapColor == NightcapColors.GOLD) { - return ('#FFEE93', '#FFCD3D'); + return LensColors.lightGold; } else { revert(); // Avoid warnings. } @@ -54,10 +56,16 @@ library HeadwearNightcap { function _getHeadwearColor(NightcapColors nightcapColor) internal pure returns (Headwear.HeadwearColors) { if (nightcapColor == NightcapColors.GREEN) { return Headwear.HeadwearColors.GREEN; + } else if (nightcapColor == NightcapColors.PINK) { + return Headwear.HeadwearColors.PINK; } else if (nightcapColor == NightcapColors.PURPLE) { return Headwear.HeadwearColors.PURPLE; } else if (nightcapColor == NightcapColors.BLUE) { return Headwear.HeadwearColors.BLUE; + } else if (nightcapColor == NightcapColors.LIGHT) { + return Headwear.HeadwearColors.LIGHT; + } else if (nightcapColor == NightcapColors.DARK) { + return Headwear.HeadwearColors.DARK; } else if (nightcapColor == NightcapColors.GOLD) { return Headwear.HeadwearColors.GOLD; } else { diff --git a/contracts/libraries/svgs/Profile/Headwear/HeadwearPartyhat.sol b/contracts/libraries/svgs/Profile/Headwear/HeadwearPartyhat.sol index e36ffe6..9950587 100644 --- a/contracts/libraries/svgs/Profile/Headwear/HeadwearPartyhat.sol +++ b/contracts/libraries/svgs/Profile/Headwear/HeadwearPartyhat.sol @@ -2,6 +2,7 @@ pragma solidity ^0.8.0; import {Headwear} from 'contracts/libraries/svgs/Profile/Headwear.sol'; +import {LensColors} from 'contracts/libraries/svgs/Profile/LensColors.sol'; library HeadwearPartyhat { enum PartyhatColors { @@ -9,6 +10,8 @@ library HeadwearPartyhat { PURPLE, BLUE, PINK, + LIGHT, + DARK, GOLD } @@ -35,22 +38,26 @@ library HeadwearPartyhat { '}.partyhatColor2 { fill:', secondaryColor, '}.partyhatSparkles { stroke:', - partyhatColor == PartyhatColors.GOLD ? '#B96326' : '#000', + partyhatColor == PartyhatColors.GOLD ? LensColors.darkGold : LensColors.black, ';stroke-linecap: round;stroke-linejoin: round;stroke-width: 4}' ); } function _getPartyhatColor(PartyhatColors partyhatColor) internal pure returns (string memory, string memory) { if (partyhatColor == PartyhatColors.GREEN) { - return ('#F4FFDC', '#A0D170'); + return (LensColors.lightGreen, LensColors.baseGreen); } else if (partyhatColor == PartyhatColors.PURPLE) { - return ('#F3EAFF', '#EAD7FF'); + return (LensColors.lightPurple, LensColors.basePurple); } else if (partyhatColor == PartyhatColors.BLUE) { - return ('#ECF0FF', '#D9E0FF'); + return (LensColors.lightBlue, LensColors.baseBlue); } else if (partyhatColor == PartyhatColors.PINK) { - return ('#FFE7F0', '#FFD2DD'); + return (LensColors.lightPink, LensColors.basePink); + } else if (partyhatColor == PartyhatColors.LIGHT) { + return (LensColors.gray, LensColors.white); + } else if (partyhatColor == PartyhatColors.DARK) { + return (LensColors.gray, LensColors.dark); } else if (partyhatColor == PartyhatColors.GOLD) { - return ('#FFEE93', '#F8C944'); + return (LensColors.lightGold, LensColors.baseGold); } else { revert(); // Avoid warnings. } @@ -65,6 +72,10 @@ library HeadwearPartyhat { return Headwear.HeadwearColors.BLUE; } else if (partyhatColor == PartyhatColors.PINK) { return Headwear.HeadwearColors.PINK; + } else if (partyhatColor == PartyhatColors.LIGHT) { + return Headwear.HeadwearColors.LIGHT; + } else if (partyhatColor == PartyhatColors.DARK) { + return Headwear.HeadwearColors.DARK; } else if (partyhatColor == PartyhatColors.GOLD) { return Headwear.HeadwearColors.GOLD; } else { diff --git a/contracts/libraries/svgs/Profile/Headwear/HeadwearPlants.sol b/contracts/libraries/svgs/Profile/Headwear/HeadwearPlants.sol index d6eb38e..e259a03 100644 --- a/contracts/libraries/svgs/Profile/Headwear/HeadwearPlants.sol +++ b/contracts/libraries/svgs/Profile/Headwear/HeadwearPlants.sol @@ -2,12 +2,16 @@ pragma solidity ^0.8.0; import {Headwear} from 'contracts/libraries/svgs/Profile/Headwear.sol'; +import {LensColors} from 'contracts/libraries/svgs/Profile/LensColors.sol'; library HeadwearPlants { enum PlantsColors { GREEN, + PINK, BLUE, PURPLE, + LIGHT, + DARK, GOLD } @@ -29,27 +33,29 @@ library HeadwearPlants { } function _getPlantsStyle(PlantsColors plantsColor) internal pure returns (string memory) { - (string memory leafsColor1, string memory leafsColor2) = _getPlantsColor(plantsColor); - return string.concat( '' + _getPlantsColor(plantsColor), + '}.color2{fill:#fff}.hwline3 {stroke: black; stroke-linecap: round; stroke-linejoin: round; stroke-width: 3}.hwline4 {stroke: black; stroke-linecap: round; stroke-linejoin: round; stroke-width: 4}' ); } - function _getPlantsColor(PlantsColors plantsColor) internal pure returns (string memory, string memory) { + function _getPlantsColor(PlantsColors plantsColor) internal pure returns (string memory) { if (plantsColor == PlantsColors.GREEN) { - return ('#A0D170', '#FFF'); + return LensColors.baseGreen; + } else if (plantsColor == PlantsColors.PINK) { + return LensColors.basePink; } else if (plantsColor == PlantsColors.PURPLE) { - return ('#EAD7FF', '#FFF'); + return LensColors.basePurple; } else if (plantsColor == PlantsColors.BLUE) { - return ('#D9E0FF', '#FFF'); + return LensColors.baseBlue; + } else if (plantsColor == PlantsColors.LIGHT) { + return LensColors.lightGray; + } else if (plantsColor == PlantsColors.DARK) { + return LensColors.gray; } else if (plantsColor == PlantsColors.GOLD) { - return ('#FFCD3D', '#FFF'); + return LensColors.baseGold; } else { revert(); // Avoid warnings. } @@ -58,10 +64,16 @@ library HeadwearPlants { function _getHeadwearColor(PlantsColors plantsColor) internal pure returns (Headwear.HeadwearColors) { if (plantsColor == PlantsColors.GREEN) { return Headwear.HeadwearColors.GREEN; + } else if (plantsColor == PlantsColors.PINK) { + return Headwear.HeadwearColors.PINK; } else if (plantsColor == PlantsColors.PURPLE) { return Headwear.HeadwearColors.PURPLE; } else if (plantsColor == PlantsColors.BLUE) { return Headwear.HeadwearColors.BLUE; + } else if (plantsColor == PlantsColors.LIGHT) { + return Headwear.HeadwearColors.LIGHT; + } else if (plantsColor == PlantsColors.DARK) { + return Headwear.HeadwearColors.DARK; } else if (plantsColor == PlantsColors.GOLD) { return Headwear.HeadwearColors.GOLD; } else { diff --git a/contracts/libraries/svgs/Profile/Headwear/HeadwearSparkles.sol b/contracts/libraries/svgs/Profile/Headwear/HeadwearSparkles.sol index 6f9a7e6..1183868 100644 --- a/contracts/libraries/svgs/Profile/Headwear/HeadwearSparkles.sol +++ b/contracts/libraries/svgs/Profile/Headwear/HeadwearSparkles.sol @@ -2,6 +2,7 @@ pragma solidity ^0.8.0; import {Headwear} from 'contracts/libraries/svgs/Profile/Headwear.sol'; +import {LensColors} from 'contracts/libraries/svgs/Profile/LensColors.sol'; library HeadwearSparkles { enum SparklesColors { @@ -35,9 +36,9 @@ library HeadwearSparkles { function _getSparklesColor(SparklesColors sparklesColor) internal pure returns (string memory) { if (sparklesColor == SparklesColors.LIGHT) { - return '#000'; + return LensColors.black; } else if (sparklesColor == SparklesColors.GOLD) { - return '#B96326'; + return LensColors.darkGold; } else { revert(); // Avoid warnings. } diff --git a/contracts/libraries/svgs/Profile/Helpers.sol b/contracts/libraries/svgs/Profile/Helpers.sol index e0a7901..f9d6e7b 100644 --- a/contracts/libraries/svgs/Profile/Helpers.sol +++ b/contracts/libraries/svgs/Profile/Helpers.sol @@ -1,6 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import {LensColors} from './LensColors.sol'; + library Helpers { enum ComponentBytes { BACKGROUND, @@ -32,6 +34,7 @@ library Helpers { library Background { enum BackgroundColors { GREEN, + PINK, PURPLE, BLUE, GOLD @@ -40,6 +43,8 @@ library Background { function getBackgroundColor(BackgroundColors backgroundColor) internal pure returns (string memory) { if (backgroundColor == BackgroundColors.GREEN) { return '#green'; + } else if (backgroundColor == BackgroundColors.PINK) { + return '#pink'; } else if (backgroundColor == BackgroundColors.PURPLE) { return '#purple'; } else if (backgroundColor == BackgroundColors.BLUE) { @@ -55,6 +60,7 @@ library Background { library Skin { enum SkinColors { GREEN, + PINK, PURPLE, BLUE, GOLD @@ -62,13 +68,15 @@ library Skin { function getSkinColor(SkinColors skinColor) internal pure returns (string memory) { if (skinColor == SkinColors.GREEN) { - return '#A0D170'; + return LensColors.baseGreen; + } else if (skinColor == SkinColors.PINK) { + return LensColors.basePink; } else if (skinColor == SkinColors.PURPLE) { - return '#EAD7FF'; + return LensColors.basePurple; } else if (skinColor == SkinColors.BLUE) { - return '#D9E0FF'; + return LensColors.baseBlue; } else if (skinColor == SkinColors.GOLD) { - return '#F8C944'; + return LensColors.baseGold; } else { revert(); // Avoid warnings. } diff --git a/contracts/libraries/svgs/Profile/Legs.sol b/contracts/libraries/svgs/Profile/Legs.sol index a7a367d..20c6f75 100644 --- a/contracts/libraries/svgs/Profile/Legs.sol +++ b/contracts/libraries/svgs/Profile/Legs.sol @@ -1,9 +1,14 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import {LensColors} from './LensColors.sol'; + library Legs { enum LegColors { GREEN, + PINK, + PURPLE, + BLUE, DARK, LIGHT } @@ -25,11 +30,17 @@ library Legs { function _getLegColorHex(LegColors legColor) internal pure returns (string memory, string memory) { if (legColor == LegColors.GREEN) { - return ('#93A97D', '#F4FFDC'); + return (LensColors.darkGreen, LensColors.lightGreen); + } else if (legColor == LegColors.PURPLE) { + return (LensColors.darkPurple, LensColors.lightPurple); + } else if (legColor == LegColors.BLUE) { + return (LensColors.darkBlue, LensColors.lightBlue); + } else if (legColor == LegColors.PINK) { + return (LensColors.darkPink, LensColors.lightPink); } else if (legColor == LegColors.DARK) { - return ('#575757', '#DBDBDB'); + return (LensColors.dark, LensColors.gray); } else if (legColor == LegColors.LIGHT) { - return ('#EAEAEA', '#FFFFFF'); + return (LensColors.lightGray, LensColors.white); } else { revert(); // Avoid warnings. } diff --git a/contracts/libraries/svgs/Profile/LensColors.sol b/contracts/libraries/svgs/Profile/LensColors.sol new file mode 100644 index 0000000..19f4501 --- /dev/null +++ b/contracts/libraries/svgs/Profile/LensColors.sol @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +library LensColors { + string constant baseGreen = '#A0D170'; + string constant basePink = '#FFD2DD'; + string constant basePurple = '#EAD7FF'; + string constant baseBlue = '#D9E0FF'; + string constant baseGold = '#F8C944'; + + string constant lightGreen = '#F4FFDC'; + string constant lightPink = '#FFE7F0'; + string constant lightPurple = '#F3EAFF'; + string constant lightBlue = '#ECF0FF'; + string constant lightGold = '#FFEE93'; + + string constant darkGreen = '#93A97D'; + string constant darkPink = '#C69DAE'; + string constant darkPurple = '#C3B3D5'; + string constant darkBlue = '#ACB5DD'; + string constant darkGold = '#B96326'; + + string constant dark = '#575757'; + string constant gray = '#DBDBDB'; + string constant lightGray = '#EAEAEA'; + string constant white = '#FFF'; + string constant black = '#000'; + + string constant tears = '#E3F7FF'; + string constant heartEyes = '#FF88A5'; + string constant tongue = '#FFDFE7'; + string constant bubbleGum = '#FFCFEC'; +} diff --git a/contracts/libraries/svgs/Profile/Logo.sol b/contracts/libraries/svgs/Profile/Logo.sol index 5b42371..f2623db 100644 --- a/contracts/libraries/svgs/Profile/Logo.sol +++ b/contracts/libraries/svgs/Profile/Logo.sol @@ -3,6 +3,8 @@ pragma solidity ^0.8.0; import {Body} from './Body.sol'; +import {LensColors} from './LensColors.sol'; + library Logo { enum LogoVariants { HAPPY, @@ -13,6 +15,7 @@ library Logo { enum LogoColors { GREEN, + PINK, PURPLE, BLUE, LIGHT, @@ -151,15 +154,17 @@ library Logo { function _getLogoColor(LogoColors logoColor) internal pure returns (string memory) { if (logoColor == LogoColors.GREEN) { - return '#A0D170'; + return LensColors.baseGreen; + } else if (logoColor == LogoColors.PINK) { + return LensColors.basePink; } else if (logoColor == LogoColors.PURPLE) { - return '#EAD7FF'; + return LensColors.basePurple; } else if (logoColor == LogoColors.BLUE) { - return '#D9E0FF'; + return LensColors.baseBlue; } else if (logoColor == LogoColors.LIGHT) { - return '#EAEAEA'; + return LensColors.lightGray; } else if (logoColor == LogoColors.DARK) { - return '#DBDBDB'; + return LensColors.gray; } else { revert(); // Avoid warnings. } diff --git a/contracts/libraries/svgs/Profile/ProfileSVG.sol b/contracts/libraries/svgs/Profile/ProfileSVG.sol index f8205c0..2b3f6a3 100644 --- a/contracts/libraries/svgs/Profile/ProfileSVG.sol +++ b/contracts/libraries/svgs/Profile/ProfileSVG.sol @@ -49,7 +49,7 @@ library ProfileSVG { ')" d="M0 0h275v415H0z"/>', '', _generateSvgElements(chosenElements, headwearSvg), - '' + '' ); } @@ -243,8 +243,6 @@ library ProfileSVG { stringHeadwearVariant = 'Beanie'; } else if (headwearVariant == Headwear.HeadwearVariants.HAT) { stringHeadwearVariant = 'Hat'; - } else if (headwearVariant == Headwear.HeadwearVariants.LEAFS) { - stringHeadwearVariant = 'Leafs'; } else if (headwearVariant == Headwear.HeadwearVariants.PLANTS) { stringHeadwearVariant = 'Plants'; } else if (headwearVariant == Headwear.HeadwearVariants.SPARKLES) { diff --git a/contracts/libraries/svgs/Profile/Shoes.sol b/contracts/libraries/svgs/Profile/Shoes.sol index 00fd2e8..d66c10f 100644 --- a/contracts/libraries/svgs/Profile/Shoes.sol +++ b/contracts/libraries/svgs/Profile/Shoes.sol @@ -1,9 +1,14 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; +import {LensColors} from './LensColors.sol'; + library Shoes { enum ShoeColors { GREEN, + PINK, + PURPLE, + BLUE, DARK, LIGHT } @@ -25,11 +30,17 @@ library Shoes { function _getShoeColorHex(ShoeColors shoeColor) internal pure returns (string memory, string memory) { if (shoeColor == ShoeColors.GREEN) { - return ('#93A97D', '#F4FFDC'); + return (LensColors.darkGreen, LensColors.lightGreen); + } else if (shoeColor == ShoeColors.PURPLE) { + return (LensColors.darkPurple, LensColors.lightPurple); + } else if (shoeColor == ShoeColors.BLUE) { + return (LensColors.darkBlue, LensColors.lightBlue); + } else if (shoeColor == ShoeColors.PINK) { + return (LensColors.darkPink, LensColors.lightPink); } else if (shoeColor == ShoeColors.DARK) { - return ('#575757', '#DBDBDB'); + return (LensColors.dark, LensColors.gray); } else if (shoeColor == ShoeColors.LIGHT) { - return ('#EAEAEA', '#FFFFFF'); + return (LensColors.lightGray, LensColors.white); } else { revert(); // Avoid warnings. } diff --git a/script/svg/ProfileSVGGen.t.sol b/script/svg/ProfileSVGGen.t.sol index 2e7eefb..989fabf 100644 --- a/script/svg/ProfileSVGGen.t.sol +++ b/script/svg/ProfileSVGGen.t.sol @@ -182,13 +182,13 @@ contract ProfileSVGGen is Test { } } // Icecream - for (uint8 c = 0; c <= 4; c++) { + for (uint8 c = 0; c <= 7; c++) { uint256 seed = setVariant(69, Helpers.ComponentBytes.HEADWEAR) + setColor(c, Helpers.ComponentBytes.HEADWEAR); string memory result = profileNFT.tryWithSeed(seed, false); vm.writeFile(string.concat(dir, 'headwear/headwear_v69', '_c', vm.toString(c), '.svg'), result); } - for (uint8 c = 0; c <= 4; c++) { + for (uint8 c = 0; c <= 7; c++) { uint256 seed = setVariant(69, Helpers.ComponentBytes.HEADWEAR) + setColor(c, Helpers.ComponentBytes.HEADWEAR); string memory result = profileNFT.tryWithSeed(seed, true);