ToileProjecteur.pde 4,74 ko
Newer Older
Thiam Papa's avatar
Thiam Papa a validé
class ToileProjecteur extends QShape {
  private float x, y, z; // Coordonnées de la position
  private float largeur;
  private float hauteur;
  private float profondeur;
  private float hauteurActuelle;
  private boolean estDeroulee;
  private PShape toile;
  private PShape barreHaut;
  private PShape barreBas;
  private PImage texture;

  ToileProjecteur(float x, float y, float z) {
    super(x, y, z); 
    this.x = x;
    this.y = y;
    this.z = z;
    this.hauteurActuelle = 0; // Initialement fermée
    this.estDeroulee = false; // La toile est fermée au début
  }

  void creerToile(float largeur, float hauteur, float profondeur, PImage texture) {
    this.largeur = largeur;
    this.hauteur = hauteur;
    this.profondeur = profondeur;
    this.texture = texture;

    // Créer les différentes parties
    creerBarreHaut();
    creerBarreBas();
    creerToile();

    // Créer le groupe de formes
    shape = createShape(GROUP);
    shape.addChild(barreHaut);
    shape.addChild(toile);
    shape.addChild(barreBas);
  }

  private void creerBarreHaut() {
    barreHaut = createShape();
    barreHaut.beginShape(QUADS);
    barreHaut.fill(50, 50, 120);
    barreHaut.noStroke();

    float epaisseurHaut = 30; // La barre du haut est plus épaisse
    float largeurHaut = largeur * 1.1f; // La barre du haut est un peu plus large

    // Barre en haut (horizontal)
    barreHaut.vertex(-largeurHaut / 2, -hauteur / 2, -profondeur / 2);
    barreHaut.vertex(largeurHaut / 2, -hauteur / 2, -profondeur / 2);
    barreHaut.vertex(largeurHaut / 2, -hauteur / 2 + epaisseurHaut, -profondeur / 2);
    barreHaut.vertex(-largeurHaut / 2, -hauteur / 2 + epaisseurHaut, -profondeur / 2);

    barreHaut.vertex(-largeurHaut / 2, -hauteur / 2, profondeur / 2);
    barreHaut.vertex(largeurHaut / 2, -hauteur / 2, profondeur / 2);
    barreHaut.vertex(largeurHaut / 2, -hauteur / 2 + epaisseurHaut, profondeur / 2);
    barreHaut.vertex(-largeurHaut / 2, -hauteur / 2 + epaisseurHaut, profondeur / 2);

    barreHaut.endShape(CLOSE);
  }

  private void creerBarreBas() {
    barreBas = createShape();
    barreBas.beginShape(QUADS);
    barreBas.fill(50, 50, 120);
    barreBas.noStroke();

    float epaisseurBas = 10; // La barre du bas est plus fine
    // Barre en bas
    barreBas.vertex(-largeur / 2, hauteur / 2, -profondeur / 2);
    barreBas.vertex(largeur / 2, hauteur / 2, -profondeur / 2);
    barreBas.vertex(largeur / 2, hauteur / 2 + epaisseurBas, -profondeur / 2);
    barreBas.vertex(-largeur / 2, hauteur / 2 + epaisseurBas, -profondeur / 2);

    barreBas.vertex(-largeur / 2, hauteur / 2, profondeur / 2);
    barreBas.vertex(largeur / 2, hauteur / 2, profondeur / 2);
    barreBas.vertex(largeur / 2, hauteur / 2 + epaisseurBas, profondeur / 2);
    barreBas.vertex(-largeur / 2, hauteur / 2 + epaisseurBas, profondeur / 2);

    barreBas.endShape(CLOSE);
  }

  private void creerToile() {
    toile = createShape();
    toile.beginShape(QUADS);
    toile.texture(texture);
    toile.noStroke();

    // Définir la toile
    toile.vertex(-largeur / 2, -hauteur / 2 + hauteurActuelle, -profondeur / 2);
    toile.vertex(largeur / 2, -hauteur / 2 + hauteurActuelle, -profondeur / 2);
    toile.vertex(largeur / 2, -hauteur / 2 + hauteur, profondeur / 2);
    toile.vertex(-largeur / 2, -hauteur / 2 + hauteur, profondeur / 2);
    toile.endShape(CLOSE);
  }

  private void mettreAJourToile() {
        shape = createShape();
        shape.beginShape(QUADS);
        shape.texture(texture);
        shape.noStroke();

        // Barre en haut
        shape.addChild(barreHaut);

        // La hauteur actuelle contrôle la taille visible de la toile
        shape.vertex(-largeur / 2, -hauteur / 2 + hauteurActuelle, -profondeur / 2, 0, 0);
        shape.vertex(largeur / 2, -hauteur / 2 + hauteurActuelle, -profondeur / 2, texture.width, 0);
        shape.vertex(largeur / 2, -hauteur / 2 + hauteur, profondeur / 2, texture.width, texture.height);
        shape.vertex(-largeur / 2, -hauteur / 2 + hauteur, profondeur / 2, 0, texture.height);

        // Barre en bas
        shape.addChild(barreBas);

      
        shape.endShape();
    }

  void mettreAJour() {
        if (estDeroulee && hauteurActuelle < hauteur) {
            hauteurActuelle += 5; // Ajustez la vitesse de déroulement ici
            if (hauteurActuelle > hauteur) {
                hauteurActuelle = hauteur;
            }
        } else if (!estDeroulee && hauteurActuelle > 0) {
            hauteurActuelle -= 5; // Ajustez la vitesse de fermeture ici
            if (hauteurActuelle < 0) {
                hauteurActuelle = 0;
            }
        }
        // mettreAJourToile();
    }


  void derouler() {
    estDeroulee = true;
  }

  void refermer() {
    estDeroulee = false;
  }

  void dessiner() {
    shape(shape);
  }
  
}