Afficher une pancarte

Tu t'adresser à ton joueur directement avec des pancartes ? OK, voici comment faire

Créer une variable publique

Pour commencer, crée ce variable public, en dehors d'une fonction, dans le script game.js.

let pancartes ;

Créer la classe pancarte

Ensuite, ajoute cette nouvelle classe dans le script game.js.

class pancarte { constructor(image){ // ici sont déclarés les variables de chaque pancartes this.img = image ; } }

Créer les fonction newPancarte(), deletePancarte( ) et pancarteDisplay()

Ensuite, toujours dans le même script, ajoute ces trois nouvelles fonctions.

function newPancarte( img ){ // cette fonction crée une nouvelle pancarte pancartes = new pancarte( img ) ; }
function deletePancarte( ){ // cette fonction crée une nouvelle pancarte pancartes = null ; }
function pancarteDisplay(){ // cette fonction affiche les pancartes if(pancartes){ let img = pancartes.img ; let c = img.height / img.width ; let h = view.height ; let x = view.width / 2 ; let y = view.height / 2 ; push(); translate(x , y); image( img , 0 , 0 , h , h * c ) ; pop(); } }

Effacer la pancarte quand le joueur se déplace

Une fois que la pancarte se sera affichée, il va nous falloir pouvoir la retirer. Je te propose que la pancarte disparaisse quand le joueur effectue un déplacement. Dans le script control.js, rajoute cette ligne dans les fonction moveControl.() et rotationControl()

function moveControl( d ) {
  
  //déplacement du joueur
  
  let r = -playerR[1] * HALF_PI ;
  let x = playerPos[0].x - d * round( sin( r ) ) ;
  let y = playerPos[0].y - d * round( cos( r ) ) ;
  
  opponent = enemyCheck( x , y ) ;
  
  if ( opponent!=null ) {
    
    // un ennemi est sur la case ou se dirige le joueur
    
    if ( d > 0 ) {
      attack( opponent ) ;
    }
    else         twist() ;
    
    enemyTurn() ;
    
    savedTime = millis() ;
    
  }
  
  else if ( pathCheck( x , y , true , true ) ) {
    
    // la salle ou se dirige le joueur est libre


 deletePancarte( );
    
    let thisItem = itemCheck( x , y ) ;
    
    if ( thisItem != null ) pick( thisItem ) ;
    else playerPos[1] = createVector( x , y ) ;
    
    if ( d < 0 ) vGrid = viewGrid( x , y , [ playerR[1] ] ) ;
    
 	savedTime = millis() ; 
    
    enemyTurn() ;
    
  } 

  else {
    
    // le joueur se dirige contre un mur
    
    let r = rooms[ playerPos[1].x ][ playerPos[1].y ] ;
    let l = r.walls.length ;
  
  	for ( let i = 0 ; i < l ; i++ ) {
        
      if( r.walls[i].num == moduloPos() ) actionWall( r.walls[i] ) ;
      
    }
  }
}
function rotationControl( r ) {
  
  //rotation du joueur
  
  let c = [];
  
  for( let i = 0 ; i <= abs( r ) ; i ++ ){
    
    if     ( r < 0 ) c[i] = playerR[0] - i ;
    else if( r > 0 ) c[i] = playerR[0] + i ;
    
  }
  
  playerR[1] = ( playerR[1] + r ) ;
  vGrid = viewGrid( playerPos[1].x , playerPos[1].y , c ) ;
  savedTime = millis() ;
  enemyTurn() ;

 deletePancarte( );
  
}

Afficher l'effet

Nous y sommes presque, il nous reste encore à afficher l'effet au bon endroit. Toujours dans le script game.js, trouve la fonction game() et ajoutes-y cette ligne.

function game(){
  
  background( 0 ) ;
  viewDisplay() ;
  inventoryDisplay();

 pancarteDisplay();
 
  if ( animation() ) playerControl() ;
  
}

Déclancher l'effet

Bravo ! Maintenant il ne nous reste plus qu'à choisir quand déclencher l'effet. Pour cela ajoute simplement cette ligne à l'endroit du programme où tu souhaites déclencher l'effet.

newPancarte(lee);

J'oubliais, tu voulais peut-être une autre image que celle du glorieux capitaine Lee. Remplace lee par le nom de ton image, comme dans l'exemple. Si tu n'a pas fait le hack pour ajouter d'autres images, c'est le moment !

newPancarte(monImage[0]); // pour l'image monImage[0]
newPancarte(monImage[1]); // pour l'image monImage[1]