Utiliser un deuxième inventaire pour les collectibles

pour Romain (Rosny-sous-bois)

Tu veux que ton joueur puisse accumuler des choses qu'il ramasse dans un deuxième inventaire ? Ça peut être judicieux si certains objets sont faits pour être utilisés et d'autres pour être collectionnés.

Créer les fonctions collectionDisplay() et pickCollectible( )

Nous allons créer une deuxième liste d'objet et l'appeler collection. Dans la page item.js crée une liste publique en collant cette ligne en dehors d'une fonction.

let collection ;

Puis, dans le script game.js, trouve la fonction initGame() et ajoutes-y cette ligne pour que la collection de ton joueur soit vide à chaque début de partie.

function initGame(){
  
  musics[5].stop();
  
  title  = false;
  win    = false;
  credit = false;
  thanks = false;

  collection = [ ] ;
  
  touchDir = null;
  
  playerR = [ 0 , 0 ];
  
  playerLevel();
  
}

Ensuite, nous allons créer une fonction pour afficher cette deuxième liste, cette fois-ci sur la partie haute de l'écran. Dans le script view.js colle cette nouvelle fonction.

function collectionDisplay(){ // affiche le deuxième inventaire du joueur if( collection != null ){ let w = height*0.1; let x = height*0.02; let y = height*0.05; let l = collection.length; for(let i = 0; i < l; i++){ let img = itemImage(collection[i]); if (collection[i].type!=0){ let p = width / 2 - w / 2 + ( w + x ) * i - ( ( l - 1 ) * ( w + x ) ) / 2; image( img[0] , p , y + w , w , w ); } } } }

Maintenant, il nous faut pouvoir ajouter des objets dans cette collection. Pour ce faire, colle cette nouvelle fonction dans le script item.js.

function pickCollectible( thisItem ){ // le joueur ramasse un objet playerPos[1] = thisItem.pos ; append( collection , thisItem ) ; items = supprObj( items , thisItem ) ; fx[1].play(); }

Appeler les fonctions

Maintenant que nous avons créé nos fonctions, il nous faut les appeler dans le progamme. Dans le scipt game.js, trouve la fonction game() et rajoutes-y cette ligne.

function game(){
  
  viewDisplay();
  inventoryDisplay();
  
  collectionDisplay();
  
  if (animation()) playerControl();
  
}

Enfin, dans la fonction pick() du script item.js, remplace pickItem par pickCollectible dans les lignes qui correspondent aux objets à collectionner.

function pick(thisItem){

  // interaction du joueur avec les objets
  // ici, l' objet 1 ira dans la collection

  let objet = thisItem.type ;
  
  if ( objet == 0 ) treasure( thisItem ) ;

  if ( objet == 1 ) pickItem( thisItem ) ;

  if ( objet == 1 ) pickCollectible( thisItem ) ;

  if ( objet == 2 ) pickItem( thisItem );
  if ( objet == 3 ) pickItem( thisItem ) ;
    
}

Ne pas cummuler deux collectibles identiques

Ah, j'oubliais. Tu veux peut-être que ton joueur ne puisse pas avoir d'objet en double dans sa collection. Ajoute d'abord cette fonction dans le scriptitem.js.

function isInCollection(t) { // vérifie si cet objet est dans la collection du joueur var b = false; var l = collection.length; for ( var i = 0 ; i < l ; i ++ ){ if ( collection[i].type == t ) b = true; } return b; }

Ensuite, nous allons pouvoir rajouter une condition dans la fonction pickCollectible() que nous avons créé dans le script item.js.

function pickCollectible( thisItem ){

  // le joueur ramasse un objet
  
  fx[1].play();

  if ( !isInCollection(thisItem.type) ) append( collection , thisItem ) ;
  
  items = supprObj( items , thisItem ) ;
  playerPos[1] = thisItem.pos ;
  
}

Et voilà moussaillon, bon courage dans ta collection !