process violin_imagen (x,y,file,graph)
begin
     flags=4;
     signal(id,s_freeze);
     frame;
     //loop frame; end
end

process violin ()
private
       prim_x;
       prim_y;
       ant_x;
       ant_y;
       nota;            //marca la última nota apretada (por si arrastramos el arco,
                        //saber cual era la ultima nota buena).
       nota_real;       //marca la nota que sonará
       nota_ant;
       nota_wav[5];
       nota_chan;
       k_ant_r;
       k_ant_y;
       k_ant_x;
       k_ant_select;
       barbilla;
       
       hijos;
begin
     while (key(_backspace)) frame; end
     graficos1=load_fpg("violin.fpg");
     file=graficos1;
     nota_wav[0]=load_wav("violin/01-c-do.wav");
     nota_wav[1]=load_wav("violin/02-d-re.wav");
     nota_wav[2]=load_wav("violin/03-e-mi.wav");
     nota_wav[3]=load_wav("violin/04-f-fa.wav");
     nota_wav[4]=load_wav("violin/05-g-sol.wav");
     //nota_wav[5]=load_wav("violin/chirrido.wav");
     nota_wav[5]=load_wav("violin/06-a-la6.wav");
     hijos=violin_imagen(160,120,graficos1,2);
     prim_x=160;
     loop
         if (mouse.left)
            graph=1;
            x=mouse.x;
            y=mouse.y;
         else
             graph=0;
         end
         
         if (mouse.left && ((mouse.x!=ant_x) || (mouse.y!=ant_y)) )
            barbilla=key(_backspace)||key(_up)||key(_down)||key(_left)||key(_right)||key(_a)||key(_s);
            if (barbilla)
               //comprobamos las teclas pulsadas (la nota que queremos que suene)
               if (!k_ant_r && key(_tab))
                  nota=1;
                  k_ant_r=true;
               end
               if (k_ant_r && !key(_tab)) k_ant_r=false; end
               if (!k_ant_y && key(_z))
                  nota=2;
                  k_ant_y=true;
               end
               if (k_ant_y && !key(_z)) k_ant_y=false; end
               if (!k_ant_x && key(_x))
                  nota=3;
                  k_ant_x=true;
               end
               if (k_ant_x && !key(_x)) k_ant_x=false; end
               if (!k_ant_select && key(_space))
                  nota=4;
                  k_ant_select=true;
               end
               if (k_ant_select && !key(_space)) k_ant_select=false; end
               
               if (!key(_tab) && !key(_z) && !key(_x) && !key(_space)) nota=0; end

               //comprobamos hacia dónde se mueve el arco
               if (   ((mouse.y>ant_y) && (ant_y<prim_y)) ||
                      ((mouse.y<ant_y) && (ant_y>prim_y))  )
                  prim_x=ant_x;
                  prim_y=ant_y;
                  hijos.x=prim_x;
               end
               if (abs(mouse.x-prim_x)>30)
                  nota_real=5;
               else
                   nota_real=nota;
               end
               ant_x=mouse.x;
               ant_y=mouse.y;
            else
                nota_real=5;
            end
            
            if (nota_ant!=nota_real)
               if (is_playing_wav(nota_chan))
                  stop_wav(nota_chan);
               end
               nota_chan=play_wav(nota_wav[nota_real],-1);
               nota_ant=nota_real;
            else
                if (!is_playing_wav(nota_chan))
                   nota_chan=play_wav(nota_wav[nota_real],-1);
                end
            end
         else
             if (is_playing_wav(nota_chan))
                stop_wav(nota_chan);
             end
         end
         
         //condicion de salida
         if (key(_enter) && key(_space)) break; end
         frame;
     end
     
     //salida
     if (is_playing_wav(nota_chan)) stop_wav(nota_chan); end
     nota=0;
     for (nota=0;nota<=5;nota++)
         unload_wav(nota_wav[nota]);
     end
     unload_fpg(graficos1);
     signal(hijos,s_kill);
     estado=0;
     frame;
end

//*****************************************************************************
//  MENU INICIAL
//*****************************************************************************
process violin_flecha (x,y)
begin
     file=graficos1;
     flags=4;
     z=-600;
     signal(id,s_freeze);
     frame;
     //loop frame; end
end

process intro_violin ()
private
       cont;
       hijos[1];
       //textos1;
       fuentes1;
       ant_l;
       ant_r;
begin
     set_text_color(rgb(255,255,255));
     write(0,160,100,1,"Y : Instrucciones");
     write(0,160,140,1,"X : Tocar");
     load_pal("comic_roja.fnt");
     loop
         if (key(_z))
            delete_text(all_text);
            graficos1=load_fpg("inst_violin.fpg");
            file=graficos1;
            fuentes1=load_fnt("comic_roja.fnt");
            hijos[0]=violin_flecha(0,240);
            hijos[1]=violin_flecha(320,240);
            while (cont<4)
                  switch (cont)
                  case 0:      //foto: como coger la consola
                       x=480;
                       y=120;
                       graph=3;
                       hijos[0].graph=0;
                       hijos[1].graph=2;
                       while (x!=160)
                             x-=5;
                             frame;
                       end
                       loop
                           if (!ant_r && key(_tab))
                              cont++;
                              ant_r=true;
                              while (x>=-160)
                                    x-=5;
                                    frame;
                              end
                              break;
                           end
                           if (ant_r && !key(_tab)) ant_r=false; end
                           frame;
                       end
                       graph=0;
                  end
                  case 1:      //Posicion de los dedos
                       hijos[0].graph=1;
                       hijos[1].graph=2;
                       x=0;
                       y=0;
                       set_text_color(rgb(255,0,0));
                       write(fuentes1,160,5,1,"COMO COLOCAR LOS DEDOS");
                       write(0,320,30,2,"El pulgar al botón R.");
                       write(0,0,55,0,"La barbilla sobre alguna dirección, botón");
                       write(0,0,65,0,"de volumen o el boton L.");
                       write(0,320,85,2,"El índice al botón Y.");
                       write(0,320,125,2,"El corazón al boton X.");
                       write(0,320,160,2,"El anular al botón SELECT.");
                       loop
                           if (!ant_r && key(_tab))
                              cont++;
                              ant_r=true;
                              graph=0;
                              delete_text(all_text);
                              break;
                           end
                           if (ant_r && !key(_tab)) ant_r=false; end
                           if (!ant_l && key(_backspace))
                              cont--;
                              ant_l=true;
                              graph=0;
                              delete_text(all_text);
                              break;
                           end
                           if (ant_l && !key(_backspace)) ant_l=false; end
                           frame;
                       end
                  end
                  case 2:     //como tocar (rasgar las cuerdas)
                       x=480;
                       y=120;
                       //graph=4;
                       hijos[0].graph=1;
                       hijos[1].graph=2;
                       write(fuentes1,160,10,1,"INSTRUCCIONES PARA TOCAR:");
                       write(0,30,50,0,"El puntero será el arco de tu violín (se siente,");
                       write(0,10,60,0,"sólo funciona con pantalla táctil). Deslízalo arri-");
                       write(0,10,70,0,"ba y abajo sin salirte de la línea y sin dejar de");
                       write(0,10,80,0,"apoyar la barbilla, o perderás los oidos.");
                       write(0,30,100,0,"La línea se recoloca cada vez que cambias el");
                       write(0,10,110,0,"sentido del movimiento del arco/puntero.");
                       while (x!=160)
                             x-=5;
                             frame;
                       end
                       loop
                           if (!ant_r && key(_tab))
                              cont++;
                              ant_r=true;
                              delete_text(all_text);
                              break;
                           end
                           if (ant_r && !key(_tab)) ant_r=false; end
                           if (!ant_l && key(_backspace))
                              cont--;
                              ant_l=true;
                              delete_text(all_text);
                              break;
                           end
                           if (ant_l && !key(_backspace)) ant_l=false; end
                           frame;
                       end
                  end
                  case 3:       //Como tocar (las notas)
                       write(0,10,10,0,"MAPA DE LAS NOTAS:");
                       write(0,10,30,0,"NINGUNO: Do");
                       write(0,10,40,0,"SELECT: Re");
                       write(0,10,50,0,"X: Mi");
                       write(0,10,60,0,"Y: Fa");
                       write(0,10,70,0,"R: Sol");
                       write(0,10,90,0,"Para salir pulsa START y SELECT.");

                       write(0,160,140,1,"Pulsa R para empezar.");
                       loop
                           if (!ant_r && key(_tab))
                              cont++;
                              ant_r=true;
                              delete_text(all_text);
                              signal(hijos[0],s_kill);
                              signal(hijos[1],s_kill);
                              unload_fpg(graficos1);
                              break;
                           end
                           if (ant_r && !key(_tab)) ant_r=false; end
                           if (!ant_l && key(_backspace))
                              cont--;
                              ant_l=true;
                              delete_text(all_text);
                              break;
                           end
                           if (ant_l && !key(_backspace)) ant_l=false; end
                           frame;
                       end
                  end
                  end //switch
            end   //while (cont<4)
            unload_fnt(fuentes1);
         end      //if (key(_z))

         //empieza el instrumento
         if (key(_x) || (cont==4))
            break;
         end

         frame;
     end
     delete_text(all_text);
     estado=2;
     violin();
end
