% Florian Sihler, 2022
% Licensed under GNU General Public License version 3
% https://opensource.org/licenses/gpl-3.0.html
\pingu@create@extra{tie}{%
    tie/.code         = \pingu@set@extra{tie}{true}\pingu@color{tie}{#1},
    tie/.default      = pingu@green,
    tie knot/.code    = \pingu@color{tie@knot}{#1},
    tie length/.code  = \def\pingu@x@tie@length{#1},
    tie offset/.code  = \def\pingu@x@tie@offset{#1},
    tie width/.code   = \def\pingu@x@tie@width{#1},
    tie pattern/.code = \def\pingu@x@tie@pattern{#1},
    tie dots/.style   = {%
        tie pattern={%
            \pingu@block[postaction={pattern={Dots[angle=40,distance=1.5pt,radius=.35pt]},pattern color=#1}]{\pingu@color@tie} \pingupathxtie;
            \pingu@block[postaction={pattern={Dots[angle=-30,distance=1.45pt,radius=.35pt@]},pattern color=#1}]{\pingu@color@tie@knot} \pingupathxtieknot;
        }%
    },
    tie dots/.default={pingu@white}%
}{% defaults
    tie length=.625\pingu@side@h@half,  tie offset=.399cm,%
    tie knot=\pingu@color@tie!92!black, tie width=.21cm,%
    tie pattern={%
        \pingu@block{\pingu@color@tie} \pingupathxtie;
        \pingu@block{\pingu@color@tie@knot} \pingupathxtieknot;
    }%
}
\def\pingupathxtie{[rounded corners=.15mm] (\pingu@name-tie-start)++(-.4mm,-.25mm) -- ++(-\pingu@x@tie@width/2, -\pingu@x@tie@length+.125cm) -- ++(\pingu@x@tie@width/2+.4mm,-.125cm) -- ++(\pingu@x@tie@width/2+.4mm,.125cm) -- +(-\pingu@x@tie@width/2, \pingu@x@tie@length-.125cm) -- cycle}
\def\pingupathxtieknot{[rounded corners=.25mm] (\pingu@name-tie-start)++(-.095cm-.02*\pingu@x@tie@width,\z@) -- ++(.3mm,-.15cm-.01*\pingu@x@tie@width) -- ++(.13cm+.04*\pingu@x@tie@width,\z@) -- ++(.3mm,.15cm+.01*\pingu@x@tie@width) -- cycle}
\def\pingu@draw@eb@tie{%
    \path (\pingu@name-bill)++(0,-\pingu@x@tie@offset) coordinate(\pingu@name-tie-start);
    \pingu@x@tie@pattern
}

\pingu@create@extra{bowtie}{%
    bowtie/.forward to         = /pingu/bow tie,
    bow-tie/.forward to        = /pingu/bow tie,
    bow tie/.code              = \pingu@set@extra{bowtie}{true}\pingu@color{bowtie}{#1},
    bow tie/.default           = pingu@blue,
    bow tie b/.code            = \pingu@color{bowtie@b}{#1},
    bowtie b/.forward to         = /pingu/bow tie b,
    bow-tie b/.forward to        = /pingu/bow tie b,
    bowtie offset/.forward to  = /pingu/bow tie offset,
    bow-tie offset/.forward to = /pingu/bow tie offset,
    bow tie offset/.code       = \def\pingu@x@bowtie@offset{#1},
    bowtie knot/.forward to    = /pingu/bow tie knot,
    bow-tie knot/.forward to   = /pingu/bow tie knot,
    bow tie knot/.code         = \pingu@color{bowtie@knot}{#1},
}{% defaults
    bow tie knot=\pingu@color@bowtie!92!black,bow tie offset=.315cm,%
    bow tie b=\pingu@color@bowtie%
}

\def\pingupathxbowtieknot{[rounded corners=.25mm] (\pingu@name-bow-tie-start)++(-.0625cm,-.35mm) to[bend right=10] ++(.125cm,0) -- ++(0,-.13cm) to[bend right=10] ++(-.125cm, 0) -- cycle}
\def\pingupathxbowtieleft{[rounded corners=.25mm]  (\pingu@name-bow-tie-start)++(-.15mm,-.06cm) to[out=155,in=-5] ++(-.25cm,.065cm) to[bend right=15] ++(0,-.21cm) to[in=-155,out=5] ++(.25cm,.065cm) -- cycle}
\def\pingupathxbowtieright{[rounded corners=.25mm]  (\pingu@name-bow-tie-start)++(.15mm,-.06cm) to[out=25,in=-175] ++(.25cm,.065cm) to[bend left=15] ++(0,-.21cm) to[in=-25,out=175] ++(-.25cm,.065cm) -- cycle}
\def\pingu@draw@eb@bowtie{%
    \path (\pingu@name-bill)++(0,-\pingu@x@bowtie@offset) coordinate(\pingu@name-bow-tie-start);
    \pingu@block{\pingu@color@bowtie} \pingupathxbowtieleft;
    \pingu@block{\pingu@color@bowtie@b} \pingupathxbowtieright;
    \pingu@block{\pingu@color@bowtie@knot} \pingupathxbowtieknot;
}

\newif\if@pingu@x@pants@bands
\pingu@create@extra{pants}{%
    pants/.code    	               = \pingu@set@extra{pants}{true}\pingu@color{pants}{#1},
    pants/.default                 = pingu@red,
    pants bands/.is if             = @pingu@x@pants@bands,
    pants button left/.code        = \pingu@color{pants@button@left}{#1},
    pants button right/.code       = \pingu@color{pants@button@right}{#1},
    pants buttons/.style           = {/pingu/pants button left={#1}, /pingu/pants button right={#1}},
    pants button left shade/.code  = \pingu@color{pants@button@left@shade}{#1},
    pants button right shade/.code = \pingu@color{pants@button@right@shade}{#1},
    pants buttons shade/.style     = {/pingu/pants button left shade={#1}, /pingu/pants button right shade={#1}},
    pants without buttons/.forward to=/pingu/pants no buttons,
    pants no buttons/.style        = {/pingu/pants buttons=\@pingu@none, /pingu/pants buttons shade=\@pingu@none},
    pants extra height/.code = \def\pingu@x@pants@extra@height{#1},
}{pants extra height=1.5mm,pants buttons=pingu@black,pants button left shade=\pingu@color@pants@button@left!70!white,pants button right shade=\pingu@color@pants@button@right!70!white}

\def\pingu@draw@eb@pants{%
\pingu@block[rounded corners=\p@]{\pingu@color@pants} ([xshift=.85mm,yshift=\pingu@x@pants@extra@height]\pingu@name-waist-right) coordinate(@tmp) to[bend right=6] ([xshift=-.85mm,yshift=\pingu@x@pants@extra@height]\pingu@name-waist-left) coordinate(@tmpb) -- ++(0,-\pingu@x@pants@extra@height) arc(180:270:.85mm and 2.25mm) to[bend left=\pingu@bend] (\pingu@name-bottom-center-|\pingu@name-waist-left) to[bend left=15] ([yshift=-.15mm]\pingu@name-bottom-center) to[bend left=15] (\pingu@name-bottom-center-|\pingu@name-waist-right) to[bend left=6] ([yshift=-2.5mm]\pingu@name-waist-right) arc (-90:0:.85mm and 2.25mm) -- cycle;
\if@pingu@x@pants@bands
\pingu@layer{middle}[]
% draw stripes
\scope
\clip \pingu@path@lowerpingu;
\pingu@block{\pingu@color@pants} (@tmp)++(.55mm,-\pingu@one) to[bend right=3] ([yshift=1.65mm]\pingu@name-wings-side-right) -- ++(-.25mm,-.25mm) to[bend left=3] ([yshift=-\pingu@one]@tmp) -- cycle;
\pingu@block{\pingu@color@pants} (@tmpb)++(-.55mm,-\pingu@one) to[bend left=3] ([yshift=1.65mm]\pingu@name-wings-side-left) -- ++(.25mm,-.25mm) to[bend right=3] ([yshift=-\pingu@one]@tmpb) -- cycle;
\endscope
\fi
\pingu@block{\pingu@color@pants@button@right}(@tmp)++(.25mm,-.25mm)circle[radius=.7mm];
\pingu@block{\pingu@color@pants@button@left}(@tmpb)++(-.25mm,-.25mm)circle[radius=.7mm];
\pingu@block[even odd rule]{\pingu@color@pants@button@right@shade}(@tmp)++(.25mm,-.25mm)circle[radius=.7mm] circle[radius=.615mm];
\pingu@block[even odd rule]{\pingu@color@pants@button@left@shade}(@tmpb)++(-.25mm,-.25mm)circle[radius=.7mm] circle[radius=.615mm];
\@for\i:={0,90,180,270}\do{
    \pingu@block{\pingu@color@pants@button@right@shade} (@tmp)++(.25mm,-.25mm)++(\i:.
    35mm) circle[radius=.1mm];
    \pingu@block{\pingu@color@pants@button@left@shade} (@tmpb)++(-.25mm,-.25mm)++(\i:.35mm) circle[radius=.1mm];
}%
\if@pingu@x@pants@bands \endpingu@layer \fi
}


\pingu@create@extra{belt}{%
    belt/.code        = \pingu@set@extra{belt}{true}\pingu@color{belt}{#1},
    belt/.default     = pingu@bronze!80!black,
    belt knot color/.code  = \pingu@color{belt@knot}{#1}
}{% defaults
    belt knot color  = pingu@silver
}

\def\pingu@draw@eb@belt@wh{1.25mm}
\def\pingu@draw@eb@belt{%
    \path ([yshift=-1.66mm/2]\pingu@name-waist-left) -- ([yshift=-1.66mm/2]\pingu@name-waist-right) coordinate[pos=.5] (\pingu@name @belt@center);
    \pingu@block[rounded corners=.5pt]{\pingu@color@belt} (\pingu@name-waist-left) coordinate (@) to[bend left=5] (\pingu@name-waist-right) -- ++(0,-1.66mm) to[bend right=5] ([yshift=-1.66mm]@) -- cycle;
    \pingu@block[rounded corners=1.5pt]{\pingu@color@belt@knot} ([xshift=-1mm,yshift=-.7mm-1.66mm/2]\pingu@name @belt@center) rectangle ++(2mm,2mm);
}
