% !TeX root = ./examples/koala.tex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% The tikzlings-koalas package (part of the tikzlings collection)
% A package to bring little koalas into tikz
% Created by @marmot (https://tex.stackexchange.com/a/448397/36296)
% Maintained by samcarter
%
% Project repository and bug tracker:
% https://github.com/samcarter/tikzlings
%
% Released under the LaTeX Project Public License v1.3c or later
% See http://www.latex-project.org/lppl.txt
%
% Version 0.1
% Nov 9, 2018   
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ProvidesPackage{tikzlings-koalas}
 [2018/11/09 v0.1 Drawing koalas in TikZ]

\RequirePackage{tikz}
\RequirePackage{tikzlings-addons}
\usetikzlibrary{shadows.blur}
\usetikzlibrary{fadings} 

\tikzfading[name=koala@blush,inner color=transparent!50,outer color=transparent!100]

\newcommand*{\koala}[1][]{%
  \begin{scope}%
    \tikzset{/koala/.cd,#1}%
    \koala@draw%
  \end{scope}%
  \thing[#1]%
}

\newif\ifkoala@blush
\newif\ifkoala@sleeping
\newif\ifkoala@threeD

\tikzset{
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %
  % Pass unknown keys on to tikz
  %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  /koala/.search also={/tikz,/pgf,/thing},
  /koala/.cd,
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %
  % body
  %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  body/.code         = \def\koala@body{#1},
  body               = gray!75!white,
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %
  % options
  %
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  blush/.code        = \koala@blushtrue,
  sleeping/.code     = \koala@sleepingtrue, 
  3D/.code           = \koala@threeDtrue,  
}

\def\koala@draw{%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% minimal bounding box size 
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\path (-0.88,0.1) rectangle (0.88, 2.35);
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 
% switch between 2D and 3D, from
% https://chat.stackexchange.com/transcript/message/45991801#45991801
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ifkoala@threeD
  \def\koala@part@draw[##1]{\shade[ball color=##1]}
\else
  \def\koala@part@draw[##1]{\fill[##1]}
\fi
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Body parts (center: x=0)
% 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Feet %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\koala@part@draw[\koala@body!50!black] (0.255,0.2) ellipse (0.23 and 0.09); 
\koala@part@draw[\koala@body!50!black] (-0.255,0.2) ellipse (0.23 and 0.09);
%
% Ears %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\koala@part@draw[\koala@body] (0.405, 2.1) ellipse (0.3 and 0.23);
\koala@part@draw[\koala@body!40!white] (0.405, 2.1) ellipse (0.15 and 0.12);
\koala@part@draw[\koala@body] (-0.405, 2.1) ellipse (0.3 and 0.23);
\koala@part@draw[\koala@body!40!white] (-0.405, 2.1) ellipse (0.15 and 0.12);
%
% Arms %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\koala@part@draw[\koala@body,rotate around={70:(-0.625,1)}] (-0.625,1) ellipse (0.42 and 0.13);
\koala@part@draw[\koala@body!50!black,rotate around={-20:(-0.745,0.65)}] (-0.745,0.65) ellipse (0.12 and 0.08);
\koala@part@draw[\koala@body,rotate around={-70:(0.625,1)}] (0.625,1) ellipse (0.42 and 0.13);
\koala@part@draw[\koala@body!50!black,rotate around={20:(0.745,0.65)}] (0.745,0.65) ellipse (0.12 and 0.08);
%
% Body %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\koala@part@draw[\koala@body] (0.595, 0.92) .. controls (0.595, 0.26) and (0.355, 0.18) .. (0, 0.18) .. controls (-0.355, 0.18) and (-0.595, 0.26) .. (-0.595, 0.92) .. controls (-0.605, 1.58) and (-0.335, 2.11) .. (0, 2.11) .. controls (0.335, 2.11) and (0.605, 1.58) .. (0.595, 0.92) -- cycle;
%
% Belly %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\koala@part@draw[\koala@body!40!white] ( 0.425, 0.71) .. controls ( 0.425, 0.41) and ( 0.255, 0.27) .. ( 0    , 0.27) .. controls (-0.255, 0.27) and (-0.425, 0.41) .. (-0.425, 0.71) .. controls (-0.425, 1.01) and (-0.255, 1.20) .. ( 0    , 1.20) .. controls ( 0.225, 1.20) and ( 0.425, 1.01) .. ( 0.425, 0.71) -- cycle;
%
% Head %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\koala@part@draw[\koala@body] (0,1.67) ellipse (0.55 and 0.45);
%
% Nose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\koala@part@draw[\koala@body!40!black] (-0.15, 1.57) to [out=-110,in=180] (0, 1.42) to[out=0,in=-70] (0.15, 1.57) to [out=110,in=-45] (0.075, 1.71) to[out=135,in=45] (-0.075, 1.71) to[out=-135,in=70] cycle;
%
% Eyes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ifkoala@sleeping
  \fill[\koala@body!50!black] (0.2534, 1.675) rectangle ++(0.005, 0.03);
  \fill[\koala@body!50!black,rotate around={20:(0.2925, 1.6925)}] (0.29, 1.68) rectangle ++(0.005, 0.03);
  \fill[\koala@body!50!black,rotate around={-20:(0.2143, 1.6925)}] (0.2168, 1.68) rectangle ++(0.005, 0.03);
  \fill[\koala@body!50!black,rotate around={40:(0.3255, 1.7025)}] (0.323, 1.69) rectangle ++(0.005, 0.03);
  \fill[\koala@body!50!black,rotate around={-40:(0.1813, 1.7025)}] (0.1838, 1.69) rectangle ++(0.005, 0.03);
  \fill[\koala@body!50!black] (-0.2534, 1.675) rectangle ++(-0.005, 0.03);
  \fill[\koala@body!50!black,rotate around={-20:(-0.2925, 1.6925)}] (-0.29, 1.68) rectangle ++(-0.005, 0.03);
  \fill[\koala@body!50!black,rotate around={20:(-0.2143, 1.6925)}] (-0.2168, 1.68) rectangle ++(-0.005, 0.03);
  \fill[\koala@body!50!black,rotate around={-40:(-0.3255, 1.7025)}] (-0.323, 1.69) rectangle ++(-0.005, 0.03);
  \fill[\koala@body!50!black,rotate around={40:(-0.1813, 1.7025)}] (-0.1838, 1.69) rectangle ++(-0.005, 0.03);  
  \fill[\koala@body!50!black, even odd rule] (0.3331, 1.741) ..  controls (0.3331, 1.685) and (0.1737, 1.685) .. (0.1737, 1.741) .. controls (0.1737, 1.848) and (0.3331, 1.848) .. (0.3331, 1.741) -- cycle (0.328, 1.741) .. controls   (0.323, 1.705) and   (0.184, 1.705) .. (0.179, 1.741) .. controls   (0.184, 1.843) and   (0.323, 1.843) .. (0.328, 1.741) -- cycle;
  \fill[\koala@body!50!black, even odd rule] (-0.3331, 1.741) ..  controls (-0.3331, 1.685) and (-0.1737, 1.685) .. (-0.1737, 1.741) .. controls (-0.1737, 1.848) and (-0.3331, 1.848) .. (-0.3331, 1.741) -- cycle   (-0.328, 1.741) .. controls     (-0.323, 1.705) and     (-0.184, 1.705) ..     (-0.179, 1.741) .. controls (-0.184, 1.843) and (-0.323, 1.843) .. (-0.328, 1.741) -- cycle;
\else
  \koala@part@draw[black] (-0.255, 1.74) circle (0.08); 
  \koala@part@draw[black] (0.255, 1.74) circle (0.08); 
  \fill[white] (-0.27, 1.76) circle (0.015); 
  \fill[white] (0.24, 1.76) circle (0.015); 
\fi
%
% Mouth %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ifkoala@threeD
  \fill[black] (0.115, 1.39) arc [start angle=-40, end angle=-140, radius=0.16] -- (-0.1, 1.39) -- (-0.1, 1.39) arc [start angle=-130, end angle=-50, radius=0.144] -- cycle;
\else   
  \fill[\koala@body!40!black] (0.115, 1.39) arc [start angle=-40, end angle=-140, radius=0.16] -- (-0.1, 1.39) -- (-0.1, 1.39) arc [start angle=-130, end angle=-50, radius=0.144] -- cycle;
\fi
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% optional
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Blushed %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\ifkoala@blush
  \fill[red,path fading=koala@blush] (-0.3, 1.52) circle (0.1); 
  \fill[red,path fading=koala@blush] (0.3, 1.52) circle (0.1);
\fi
%
}

