import { listOutputFiles, Template } from './index.js'; import { colorSetToVariants } from '../color-set/index.js'; import { source } from 'common-tags'; function getOctagonPathData(size: number): string { return source` M ${size / 6} ${0} l ${size / 9} ${size / 9} l ${size / 2.25} ${0} l ${size / 9} ${size / -9} l ${size / 6} ${size / 6} l ${size / -9} ${size / 9} l ${0} ${size / 2.25} l ${size / 9} ${size / 9} l ${size / -6} ${size / 6} l ${size / -9} ${size / -9} l ${size / -2.25} ${0} l ${size / -9} ${size / 9} l ${size / -6} ${size / -6} l ${size / 9} ${size / -9} l ${0} ${size / -2.25} l ${size / -9} ${size / -9} z `; } const template: Template = { name: 'Octagon wallpaper', render: async function* (colorSet, options) { const variants = colorSetToVariants(colorSet); for (const variant of variants) { for (const size of options.wallpaperSizes) { const patternSize = size.w / Math.round(size.w / 36); const colorList = [ variant.colors.accent0, variant.colors.accent1, variant.colors.accent2, variant.colors.accent3, variant.colors.accent4, variant.colors.accent5, variant.colors.accent6, variant.colors.accent7, ]; const radius = -300; const point1 = { x: 0, y: radius }; const point2 = { x: (radius * Math.sin(Math.PI / (colorList.length / -2))).toPrecision( 5, ), y: (radius * Math.cos(Math.PI / (colorList.length / -2))).toPrecision( 5, ), }; const point3 = { x: ( radius * Math.sin((3 * Math.PI) / (colorList.length / -2)) ).toPrecision(5), y: ( radius * Math.cos((3 * Math.PI) / (colorList.length / -2)) ).toPrecision(5), }; const paths = colorList.map((color, i) => ({ r: (((i * Math.PI) / -4) * 180) / Math.PI, c: color, })); const svg = ` ${paths .map( (path, i) => ` `, ) .join('\n')} ${paths .map( (path, i) => ` `, ) .join('\n')} `; yield { path: `${variant.title.kebab}-${size.w}x${size.h}.svg`, content: svg, }; } } }, renderInstructions: listOutputFiles, }; export default template;