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 !