import processing.core.*; 
import processing.data.*; 
import processing.event.*; 
import processing.opengl.*; 

import ddf.minim.*; 

import java.util.HashMap; 
import java.util.ArrayList; 
import java.io.File; 
import java.io.BufferedReader; 
import java.io.PrintWriter; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.IOException; 

public class wej_bird extends PApplet {

    
    //taille le la fenêtre
    public void setup(){
      
      parametres();
    }
    
    //couleur de l'arrière plan
    public void draw(){
      background(255, 102, 255);
      principal();
    }
    
    
    //sert à recommencer la partie
    public void reset(){
     end=true;
     score=0;
     b.yPos=400;
     for(int i = 0;i<3;i++){
      p[i].xPos+=550;
      p[i].cashed = false;
     }
    }
    
    //gestion des commandes
    
    //commandes souris
    public void mousePressed(){
     if (mouseButton == LEFT) {
     b.jump();
     intro=false;
     if(end==false){
     reset();
     }
    }
    }
    
    //commandes clavier
    public void keyPressed(){
     if (keyPressed) {
     if (key == ' ') {
      fill(0);
      b.jump(); 
      intro=false;
     if(end==false){
      reset();
     }
    }
    }
    }
    
bird b = new bird();
    pillar[] p = new pillar[3];
    boolean end=false;
    boolean intro=true;
    int score=0;
    PImage photo;
    
      Minim minim;
      AudioPlayer uneMusique;
      
      //image et son
      public void parametres() {
        for(int i = 0;i<3;i++){
      p[i]=new pillar(i);
      photo = loadImage("photo_w.png");
      minim = new Minim(this);
      uneMusique = minim.loadFile("coco_remix.mp3");
      }
      uneMusique.loop();
      }
      
      
      
      public void principal() {
        if(end){
      b.move();
      }
      b.drawBird();
      if(end){
      b.drag();
      }
      
      //début boite de collisions
      b.checkCollisions();
      for(int i = 0;i<3;i++){
      p[i].drawPillar();
      p[i].checkPosition();
      }
      
      //textes, tailles et couleurs des rectangles
        fill(255);
        stroke(255, 255, 255);
        textSize(30);
      if(end){
        rect(20,20,100,50);
        fill(255, 102, 255);
        text(score,30,58);
      }else{
        rect(150,100,200,50);
        rect(100,200,300,50);
        fill(255, 102, 255);
      if(intro){
        text("Wej'Bird",190,135);
        text("Appuyer pour jouer", 107, 235);
      }else{
        text("Game over",170,135);
        text("Score:",190,235);
        text(score,280,235);
      }
      }
      }
      
      
      
     class bird{
      float xPos,yPos,ySpeed;
      bird(){
        xPos = 100;
        yPos = 300;
    }
    public void drawBird(){
      image(photo, xPos, yPos);
    }
    
    //hauteur du saut
    public void jump(){
     ySpeed=-8; 
    }
    
    //vitesse de la gravité (la vitesse à laquelle tombe le personnage)
    public void drag(){
     ySpeed+=0.5f; 
    }
    
    //gérer la vitesse à laquelle avance les piliers
    public void move(){
     yPos+=ySpeed; 
     for(int i = 0;i<3;i++){
      p[i].xPos-=3;
     }
    }

     //boite de collisions
     public void checkCollisions(){
       if(yPos>800){
        end=false;
     }
     
     //xPos est le début de la boite de collision en partant de x
      for(int i = 0;i<3;i++){
        if((xPos<p[i].xPos&&xPos>p[i].xPos-95)&&(yPos<p[i].opening-100||yPos>p[i].opening+100)){
         end=false; 
    }
    }
    } 
    }
    
    
    class pillar{
      float xPos, opening;
      boolean cashed = false;
     
     //distance entre le début et le premier pilier + distance entre chaque pilier
     pillar(int i){
      xPos = 100+(i*200);
      opening = random(600)+100;
     }
     
     
     //dessin des piliers
     public void drawPillar(){
       line(xPos,0,xPos,opening-100);
       line(xPos,opening+100,xPos,800);
     }
     
     
     public void checkPosition(){
      if(xPos<0){
       xPos+=(200*3);
       opening = random(600)+100;
       cashed=false;
      } 
      if(xPos<250&&cashed==false){
       cashed=true;
       score++; 
      }
     }

    }
  public void settings() {  size(500,800); }
  static public void main(String[] passedArgs) {
    String[] appletArgs = new String[] { "wej_bird" };
    if (passedArgs != null) {
      PApplet.main(concat(appletArgs, passedArgs));
    } else {
      PApplet.main(appletArgs);
    }
  }
}
