% JINGEL

%ressort
R=1.5;
r=0.75;
a=0;
b=6*pi;
c=0;
d=2*pi;
[t,u] = meshgrid (a:(b-a)/100:b,c:(d-c)/20:d);
x=(R+r*cos(u)).*cos(t);
y=(R+r*cos(u)).*sin(t);
z=r*sin(u)+t;

%ressort = surfl(x,y,z-12);
ressort = surfl(x,y,z-14);

hold on

%corps
R=5;
a=-pi/2;
b=pi/2;
c=0;
d=2*pi;
[p,t]=meshgrid(a:(b-a)/50:b,c:(d-c)/50:d);
x=R.*cos(p).*cos(t);
y=R.*cos(p).*sin(t);
z=R.*sin(p);
corps = surfl(x,y,z+10);

%tete
R=3;
a=-pi/2;
b=pi/2;
c=0;
d=2*pi;
[p,t]=meshgrid(a:(b-a)/50:b,c:(d-c)/50:d);
x=R.*cos(p).*cos(t);
y=R.*cos(p).*sin(t);
z=R.*sin(p);

tete = surfl(x,y,z+18);

%chapeau
%Définition des caractéristiques du cone:
P=3; 
R=3; 
a=0;
b=R;
c=0;
d=2*pi;
[r,t]=meshgrid(a:(b-a)/10:b,c:(d-c)/50:d);
x=r.*cos(t);
y=r.*sin(t);
z=P*(-r+b);
%Dessin du cône:

cone = surfl(x,y,z+20);

%Dessin de la base:
z=0*r;

basecone = surfl(x,y,z+20);


%bras gauche
R=1;
L=3;
a=-R;
b=R;
c=-L;
d=L;
[x,y] = meshgrid (a:(b-a)/50:b,c:(d-c)/50:d);
z=sqrt(R.^2-x.^2);

brasghaut = surfl(y-7,x,z+10);
brasgbas = surfl(y-7,x,-z+10);

% bras droit

brasdhaut = surfl(y+7,x,z+10);
brasdbas =surfl(y+7,x,-z+10);

%oeil droit
R=0.75; 
a=-pi/2;
b=pi/2;
c=0;
d=2*pi;
[p,t]=meshgrid(a:(b-a)/50:b,c:(d-c)/50:d);
x=R.*cos(p).*cos(t);
y=R.*cos(p).*sin(t);
z=R.*sin(p);

oeild = surfl(x+1.6,y-2.8,z+18.4);
%oeil gauche
oeilg = surfl(x-1.6,y-2.8,z+18.4);


shading interp
axis image
axis off
hold off

c1=get(corps,'CData');
c2=get(tete,'CData');
c3=get(cone,'CData');
c4=get(basecone,'CData');
c5=get(ressort,'CData');
c6=get(brasghaut,'CData');
c7=get(brasgbas,'CData');
c8=get(brasdhaut,'CData');
c9=get(brasdbas,'CData');
c10=get(oeild,'CData');
c11=get(oeilg,'CData');


orange=[ones(1,64)*63;0:63;zeros(1,64)]./63;
bleu=[zeros(2,64);0:63]./63;
vert=[zeros(1,64);0:63;zeros(1,64)]./63;
rouge=[0:63;zeros(2,64)]./63;
violet=[0:63;zeros(1,64);0:63]./63;
bleuciel=[zeros(1,64);(0:63)/2+63/2;(0:63)/2+63/2]./63;

cop=colormap;
cperso=[cop;orange';bleu';vert';rouge';violet';bleuciel'];

set(corps,'CData',c1+1)
set(tete,'CData',c2+2)
set(cone,'CData',c3+3)
set(basecone,'CData',c4+3)
set(ressort,'CData',c5+4)
set(brasghaut,'CData',c6+5)
set(brasgbas,'CData',c7+5)
set(brasdhaut,'CData',c8+5)
set(brasdbas,'CData',c9+5)
set(oeild,'CData',c10+6)
set(oeilg,'CData',c11+6)


colormap (cperso)
caxis([0 7]);
% écrasement du ressort + déplacement du tout
zress = get(ressort,'ZData');
zmin = min(min(zress));
zmax = max(max(zress));
deltaz = (zmax-zmin)*0.02;
zcorps = get (corps,'ZData');
ztete = get (tete,'ZData');
zcone = get (cone,'ZData');
zbasecone = get (basecone,'ZData');
zbrasghaut = get (brasghaut,'ZData');
zbrasgbas = get (brasgbas,'ZData');
zbrasdhaut = get (brasdhaut,'ZData');
zbrasdbas = get (brasdbas,'ZData');
zoeilg = get (oeilg,'ZData');
zoeild = get (oeild,'ZData');
boucle=0;
while boucle==0;
    etape = 0;
    for coeff = 0.98:-0.02:0.5
        etape = etape + 1;
        newzress = (zress-zmin)*coeff+zmin;
        set(ressort,'ZData',newzress);
        set(corps,'ZData',zcorps-deltaz*etape);
        set(tete,'ZData',ztete-deltaz*etape);
        set(cone,'ZData',zcone-deltaz*etape);
        set(basecone,'ZData',zbasecone-deltaz*etape);
        set(brasghaut,'ZData',zbrasghaut-deltaz*etape);
        set(brasgbas,'ZData',zbrasgbas-deltaz*etape);
        set(brasdhaut,'ZData',zbrasdhaut-deltaz*etape);
        set(brasdbas,'ZData',zbrasdbas-deltaz*etape);
        set(oeilg,'ZData',zoeilg-deltaz*etape);
        set(oeild,'ZData',zoeild-deltaz*etape);
        drawnow
    end
    
    for coeff = 0.52:+0.02:1
        etape = etape - 1;
        newzress = (zress-zmin)*coeff+zmin;
        set(ressort,'ZData',newzress);
        set(corps,'ZData',zcorps-deltaz*etape);
        set(tete,'ZData',ztete-deltaz*etape);
        set(cone,'ZData',zcone-deltaz*etape);
        set(basecone,'ZData',zbasecone-deltaz*etape);
        set(brasghaut,'ZData',zbrasghaut-deltaz*etape);
        set(brasgbas,'ZData',zbrasgbas-deltaz*etape);
        set(brasdhaut,'ZData',zbrasdhaut-deltaz*etape);
        set(brasdbas,'ZData',zbrasdbas-deltaz*etape);
        set(oeilg,'ZData',zoeilg-deltaz*etape);
        set(oeild,'ZData',zoeild-deltaz*etape);
        drawnow
    end
end