// jeu lézard

/*
version 2.6
 
mettre un delai entre les saut pour rendre la machinque moin poluante
ajuster le mangerOn, il est pas régulier
mettre la mort dans la chute en bas / probleme de blocage quand touche les bords ecran
ajuster le saut avec le deplacement map vers le haut

satiete : beug quand mange perfois +10 satiete au lieu de 1 ou 3
rendre le son progressif 0.1


ajouter arbre / branche


son : calibrer les sons
ajouter des timeurs


*/


import processing.sound.*;       // importer la library sound processing  ==> a l'air de creer des lags gratuitement
import processing.video.*;

SoundFile sonV;                  // ensemble des pistes sons
SoundFile sonP;
SoundFile sonOver;
SoundFile sonMazon;
SoundFile sonSaut;
SoundFile sonSatiete;
SoundFile sonForet;
SoundFile sonAmbiance;
SoundFile sonCascade;

PFont fontL;
PFont fontS;

Movie intro;
Movie bisous;

page1 P1;
Map niveau1;                      // objet Map, niveau 1
Personnage liz;                   // objet Personnage, lezard
Satiete life;                     // objet satiete, barre de vie
Score point;

boolean introOn = true;
boolean bisousOn;
float time;
float startIntro, startBisous;
int page;

void setup() {
  //fullScreen();
  size( 960, 720 );                // ecran 3 : 4
  background( 0 );                 // dessine un fond noir/gris
  //pixelDensity(1);               // gerer la densiter pixels
  frameRate(30);                   // 30 image par segonde
  noCursor();
  
  niveau1 = new Map ( 1 , (height/15) * 100 , width - (height/15 )*100, (height/15 ) * 20 + 450 , height - (height/15 )*14 );   // définition Map : ( droite / gauche / haut / bas )// ( 48*100 | width - 48*100 | 48*20 + hautSup | height - 48*20 )
  liz = new Personnage();                              // définition personnage
  life = new Satiete();                                // defintion satiete
  point = new Score();
  
  fontL = createFont("Cwebl.ttf", 24 );
  fontS = createFont("Cwebs.ttf", 24 );
  
  P1 = new page1();
  
  sonForet = new SoundFile(this, "zic foret.mp3");     // ensemble chargement des fichier son
  sonAmbiance = new SoundFile(this, "ambiance oiseaux.mp3");
  

  intro = new Movie (this, "introFinal.mp4" );
  bisous = new Movie( this, "bisousFinalb.mp4" );
  
  sonSaut = new SoundFile(this, "son saut.mp3" );
  sonV = new SoundFile(this, "vers.mp3");
  sonP = new SoundFile(this, "pap.mp3" );
  sonOver = new SoundFile(this, "gameover.mp3" );
  sonMazon = new SoundFile(this, "son mazone.mp3" );
  sonSatiete = new SoundFile(this, "satiete.mp3");
  sonCascade = new SoundFile(this, "cascade.mp3" );
}

void movieEvent(Movie m) {
  m.read();
}

void draw() {                          // fonction principale, en boucle
  time = millis();                     // horloge interne au programme
  
  
  if ( page == 0 ) {
    if ( introOn == true ) {
      intro.play();
      startIntro = time;
      introOn = false;
    }
    push();
    imageMode(CENTER);
    image(intro, width/2, height/2 );
    pop();
    if ( time > 77700 + startIntro) {
      page = 1;
      P1.resetOn = false;
      intro.stop();
      sonForet.loop();
      sonAmbiance.loop();
    }
  }
  
  if ( page == 1) {
    P1.display();
    P1.update();
  }
  
  if ( page == 2 ) {                   // charger la page 1 : niveau1 avec personnage
    niveau1.display();                   // fonction affichage de la Map
    liz.display();                       // fonction affichage Personnage
    life.display();                      // fonction affichage Satiete
    point.display();
    liz.deplacement( niveau1 , liz, life);     // fonction deplacement Personnage
    point.update();
    push();
    fill(255);
    textSize(15 );
    //text ( "liz pos : " + liz.pos + " vit : " + liz.vit + "etat : " + liz.etat + " Saut : " + liz.sautOn + "/ map posX : " + (niveau1.pap[0].posX - 1 ) + " posY : " + niveau1.pap[0].posY, 20, 30 );
    pop();
  }
  
  if ( page == 3 ) {
    if ( !bisousOn ) {
    sonForet.stop();
    sonAmbiance.stop();
    sonSatiete.stop();
    bisous.play();
    startBisous = time;
    bisousOn = true;
    }
    push();
    imageMode(CENTER);
    image(bisous, width/2, height/2 );
    pop();
    
    if ( time > startBisous && time < startBisous + 13500 ) {
      push();
      imageMode(CENTER);
      image( point.youLived , width/2, height/2 );
      textFont(fontL);
      textAlign( LEFT, BOTTOM );
      textSize(77);
      noStroke();
      fill( #ffff66);  //, ( time - endFond ) / 20 );
      text( int (point.end/100)  , width/2 + 114 , height/2 + 26 );
      pop();
    }    

    
    if ( time > 41900 + startBisous ) {
      bisous.stop();
      introOn = true;
      page = 0;
    }
  }
  
 // println( "liz.vit : " + liz.vit +" liz.fallOn : " + liz.fallOn +  " liz.sautOn : " + liz.sautOn ); //+ " liz.up : " + liz.up + " liz.leftLock : " + liz.leftLock +" / lize.etat() : " + liz.etat );
 // println(liz.onArbre ) ;          // affiche le contenue dans la console
}


void keyPressed() {              // fonction lue si touche clavier pressée
  if ( page == 2 ) {             // touche pour la page 1
    liz.PkeyPressed();             // touche pour le Presonnage
  }
  if ( page == 1 ) {
   if ( keyCode == 32 ) {
    page = 2;
    liz.reset();
   }
  }
  if ( page == 0) {
    if ( keyCode == 32 ) {
      page = 1;
      intro.stop();
      sonForet.loop();
      sonAmbiance.loop();
      P1.resetOn = false;
    }
  }
  if ( page == 3 ) {
    if ( keyCode == 32 ) {
      page = 2;
      liz.reset();
    }
  }
}

void keyReleased() {   
  liz.PkeyReleased();        
}
