%%%
% Cibles
%%%
\newtoks\toklisteciblea%

\def\UpdatetoksCibleA#1\nil{\addtotok\toklisteciblea{"#1",}}%

\setKVdefault[Cible]{RayonBase=5mm,Ecart=5mm,Flechettes=false,RayonF=2.5cm,Impression=false}%

\NewDocumentCommand\Cible{om}{%
  \useKVdefault[Cible]%
  \setKV[Cible]{#1}%
  \toklisteciblea{}%
  \xdef\PfCNombreZone{0}%
  \ifboolKV[Cible]{Flechettes}{}{%
  \setsepchar{,}%
  \readlist*\PfCListeCible{#2}%
  \foreachitem\compteur\in\PfCListeCible{\expandafter\UpdatetoksCibleA\compteur\nil}%
  \xdef\PfCNombreZone{\PfCListeCiblelen}%
  }%
  \BuildCible{\the\toklisteciblea}%
}%

\NewDocumentCommand\BuildCible{m}{%
  \ifluatex%
    \mplibforcehmode%
    \begin{mplibcode}
      Rayon=\useKV[Cible]{RayonBase};
      Ecart=\useKV[Cible]{Ecart};
      boolean Flechettes,Impression;
      Flechettes=\useKV[Cible]{Flechettes};
      Impression=\useKV[Cible]{Impression};
      NombreCercles=\PfCNombreZone;
      
      vardef affichage(text t)=
      pair O;
      O=u*(5,5);
      for k=NombreCercles downto 1:
      if (k mod 2)=0:
      fill cercles(O,Rayon+(k-1)*Ecart) withcolor 0.7white;
      else:
      fill cercles(O,Rayon+(k-1)*Ecart) withcolor white;
      fi;
      endfor;
      for k=1 upto NombreCercles:
      trace cercles(O,Rayon+(k-1)*Ecart);
      endfor;
      n:=0;
      for p_=t:
      n:=n+1;
      if n=NombreCercles:
      label(TEX(p_),O);
      else:
      label(TEX(p_),O+(NombreCercles+0.5-n)*(0,Ecart));
      label(TEX(p_),O-(NombreCercles+0.5-n)*(0,Ecart));
      fi;
      endfor;
      enddef;

      vardef affichageflechettes=
      pair O;
      O=u*(5,5);
      RayonBase=\useKV[Cible]{RayonF};
      RayonA=(170/(0.5*451))*RayonBase;
      RayonI=0.5*(RayonBase+RayonA);
      RayonAa=(162/(0.5*451))*RayonBase;
      RayonB=(107/(0.5*451))*RayonBase;
      RayonBb=(99/(0.5*451))*RayonBase;
      RayonC=(32/(0.5*451))*RayonBase;
      RayonD=(12.7/(0.5*451))*RayonBase;
      path cbase,ca,caa,cb,cbb,cc,cd;
      cbase=cercles(O,RayonBase);
      ca=cercles(O,RayonA);
      caa=cercles(O,RayonAa);
      cb=cercles(O,RayonB);
      cbb=cercles(O,RayonBb);
      cc=cercles(O,RayonC);
      cd=cercles(O,RayonD);
      fill cbase;
      pair A[],Aa[],B[],Bb[],C[],D[],E[];
      for k=1 upto 21:
      A[k]=pointarc(ca,9+(k-1)*18);
      Aa[k]=pointarc(caa,9+(k-1)*18);
      B[k]=pointarc(cb,9+(k-1)*18);
      Bb[k]=pointarc(cbb,9+(k-1)*18);
      C[k]=pointarc(cc,9+(k-1)*18);
      D[k]=pointarc(cd,9+(k-1)*18);
      E[k]=pointarc(cercles(O,RayonI),(k-1)*18);
      endfor;
      for k=2 step 2 until 20:
      fill O--A[k]--arccercle(A[k],A[k+1],O)--cycle withcolor white;
      endfor;
      for k=1 upto 20:
      if (k mod 2)=1:
      fill Aa[k]--A[k]--arccercle(A[k],A[k+1],O)--reverse(arccercle(Aa[k],Aa[k+1],O))--cycle withcolor if Impression:0.4white else: Crimson fi;
      fill Bb[k]--B[k]--arccercle(B[k],B[k+1],O)--reverse(arccercle(Bb[k],Bb[k+1],O))--cycle withcolor if Impression:0.4white else: Crimson fi;
      else:
      fill Aa[k]--A[k]--arccercle(A[k],A[k+1],O)--reverse(arccercle(Aa[k],Aa[k+1],O))--cycle withcolor if Impression:0.8white else: LightGreen fi;
      fill Bb[k]--B[k]--arccercle(B[k],B[k+1],O)--reverse(arccercle(Bb[k],Bb[k+1],O))--cycle withcolor if Impression:0.8white else: LightGreen fi;
      fi;
      endfor;
      fill cc withcolor if Impression:0.8white else: LightGreen fi;
      fill cd withcolor if Impression:0.4white else: Crimson fi;
      trace ca withcolor white;
      trace caa withcolor white;
      trace cb withcolor white;
      trace cbb withcolor white;
      trace cc withcolor white;
      trace cd withcolor white;
      enddef;

      vardef affichagetexteflechettes(text t)=
      drawoptions(withcolor white);
      n:=0;
      for p_=t:
      n:=n+1;
      label(TEX("\bfseries "&p_),E[n]);
      endfor;
      enddef;
      
      if Flechettes:
      affichageflechettes;
      affichagetexteflechettes("6","13","4","18","1","20","5","12","9","14","11","8","16","7","19","3","17","2","15","10");
      else:
      affichage(#1);
      fi;
    \end{mplibcode}
  \else
    \begin{mpost}[mpsettings={Rayon=\useKV[Cible]{RayonBase};Ecart=\useKV[Cible]{Ecart};boolean Flechettes,Impression;Flechettes=\useKV[Cible]{Flechettes};Impression=\useKV[Cible]{Impression};NombreCercles=\PfCNombreZone;}]
      
      vardef affichage(text t)=
      pair O;
      O=u*(5,5);
      for k=NombreCercles downto 1:
      if (k mod 2)=0:
      fill cercles(O,Rayon+(k-1)*Ecart) withcolor 0.7white;
      else:
      fill cercles(O,Rayon+(k-1)*Ecart) withcolor white;
      fi;
      endfor;
      for k=1 upto NombreCercles:
      trace cercles(O,Rayon+(k-1)*Ecart);
      endfor;
      n:=0;
      for p_=t:
      n:=n+1;
      if n=NombreCercles:
      label(LATEX(p_),O);
      else:
      label(LATEX(p_),O+(NombreCercles+0.5-n)*(0,Ecart));
      label(LATEX(p_),O-(NombreCercles+0.5-n)*(0,Ecart));
      fi;
      endfor;
      enddef;

      vardef affichageflechettes=
      pair O;
      O=u*(5,5);
      RayonBase=\useKV[Cible]{RayonF};
      RayonA=(170/(0.5*451))*RayonBase;
      RayonI=0.5*(RayonBase+RayonA);
      RayonAa=(162/(0.5*451))*RayonBase;
      RayonB=(107/(0.5*451))*RayonBase;
      RayonBb=(99/(0.5*451))*RayonBase;
      RayonC=(32/(0.5*451))*RayonBase;
      RayonD=(12.7/(0.5*451))*RayonBase;
      path cbase,ca,caa,cb,cbb,cc,cd;
      cbase=cercles(O,RayonBase);
      ca=cercles(O,RayonA);
      caa=cercles(O,RayonAa);
      cb=cercles(O,RayonB);
      cbb=cercles(O,RayonBb);
      cc=cercles(O,RayonC);
      cd=cercles(O,RayonD);
      fill cbase;
      pair A[],Aa[],B[],Bb[],C[],D[],E[];
      for k=1 upto 21:
      A[k]=pointarc(ca,9+(k-1)*18);
      Aa[k]=pointarc(caa,9+(k-1)*18);
      B[k]=pointarc(cb,9+(k-1)*18);
      Bb[k]=pointarc(cbb,9+(k-1)*18);
      C[k]=pointarc(cc,9+(k-1)*18);
      D[k]=pointarc(cd,9+(k-1)*18);
      E[k]=pointarc(cercles(O,RayonI),(k-1)*18);
      endfor;
      for k=2 step 2 until 20:
      fill O--A[k]--arccercle(A[k],A[k+1],O)--cycle withcolor white;
      endfor;
      for k=1 upto 20:
      if (k mod 2)=1:
      fill Aa[k]--A[k]--arccercle(A[k],A[k+1],O)--reverse(arccercle(Aa[k],Aa[k+1],O))--cycle withcolor if Impression:0.4white else: Crimson fi;
      fill Bb[k]--B[k]--arccercle(B[k],B[k+1],O)--reverse(arccercle(Bb[k],Bb[k+1],O))--cycle withcolor if Impression:0.4white else: Crimson fi;
      else:
      fill Aa[k]--A[k]--arccercle(A[k],A[k+1],O)--reverse(arccercle(Aa[k],Aa[k+1],O))--cycle withcolor if Impression:0.8white else: LightGreen fi;
      fill Bb[k]--B[k]--arccercle(B[k],B[k+1],O)--reverse(arccercle(Bb[k],Bb[k+1],O))--cycle withcolor if Impression:0.8white else: LightGreen fi;
      fi;
      endfor;
      fill cc withcolor if Impression:0.8white else: LightGreen fi;
      fill cd withcolor if Impression:0.4white else: Crimson fi;
      trace ca withcolor white;
      trace caa withcolor white;
      trace cb withcolor white;
      trace cbb withcolor white;
      trace cc withcolor white;
      trace cd withcolor white;
      enddef;

      vardef affichagetexteflechettes(text t)=
      drawoptions(withcolor white);
      n:=0;
      for p_=t:
      n:=n+1;
      label(LATEX("\bfseries "&p_),E[n]);
      endfor;
      enddef;
      
      if Flechettes:
      affichageflechettes;
      affichagetexteflechettes("6","13","4","18","1","20","5","12","9","14","11","8","16","7","19","3","17","2","15","10");
      else:
      affichage(#1);
      fi;
    \end{mpost}
  \fi
}%