Créer un inventaire

Gérer facilement l’inventaire d'objets récoltés dans votre serious game

Créer un inventaire d'objets récoltés dans un serious-game

Finie la galère !!

Simplifiez la manipulation des objets-clé en réduisant à la fois le nombre de variables utilisées et les déclencheurs à programmer.

Cas Client


Pour mettre en lumière le problème, nous allons prendre comme exemple un cas client que de nombreux développeurs ont rencontré au moins une fois.

Situation Dans un serious game sur les « procédures d’évacuation d’un bâtiment et la sécurité », un client souhaite que les joueurs aient chacun plusieurs « poches » dans leur « sacs à dos » pour récolter différents objets-clé de plusieurs catégories différentes.
Conditions Les joueurs peuvent se lancer dans la résolution d’une énigme dès le moment où ils ont 4 objets sur 5 d’une catégorie donnée.
Besoin
  • Pouvoir identifier les objets comme appartenant à une catégorie et
  • Pouvoir identifier les objets comme comme récupérés ou non.

Comme vous pouvez le constater, le scénario est complèxe. Un défi de taille !

Avant Nuggets


Le développement aurait exiger la création d'un grand nombre de variables, tant en termes de variables booléennes pour chaque objet à trouver que de variables numériques pour chaque catégorie.

A cela se serait ajouter la gestion de tous les déclencheurs à créer pour récupérer les objets, comptabiliser les objets récupérés pour chaque catégorie, débloquer les énigmes au bon moment, etc.

La complexité du développement des déclencheurs aurait été en plus source de bugs...

Avec Nuggets


Prérequis


  • Maîtriser l'utilisation des expressions opératoires fournies par la fonctionnalité LocalTrack ;
  • Paramétrer votre fichier .STORY pour utiliser LocalTrack :
    • créer une variable de traitement et une variable de résultat ;
      Pour l'article, nous utiliserons InventoryTracking et InventoryResult.
    • créer le déclencheur qui manipulera ces deux variables.
Déclencheur Storyline
Quand 'InventoryTracking' change
- Exécuter 'JavaScript'
    Si 'InventoryTracking' ≠ valeur '(vide)'
JavaScript
LocalTrack.parse('InventoryTracking','InventoryResult');

Pour plus d'informations, référez-vous à la page « LocalTrack ».

Nous n'inclurons pas les conditions Si 'nuggetsLoad' = valeur 'Vrai' et Si 'isOnline' = valeur 'Vrai' dans les déclencheurs qui illustrent l'article..

Pour votre développement, pensez à les implémenter.

Comment ça marche ?


Heureusement, avec la fonctionnalité LocalTrack de Nuggets, nous pouvons simplifier énormément ce problème.

Nous ne garderons que les variables « catégorie » et les expressions opératoires de LocalTrack vont drastiquement réduire le nombre de déclencheurs à créer.

La première étape est de poser sous forme de tableau la liste des catégories et des objets.

Index Catégorie Cat_1 Catégorie Cat_2 Catégorie Cat_3
1 Objet 1.1 Objet 2.1 Objet 3.1
2 Objet 1.2 Objet 2.2 Objet 3.2
3 Objet 1.3 Objet 2.3 Objet 3.3
4 Objet 1.4 Objet 2.4 Objet 3.4
5 Objet 1.5 Objet 2.5 Objet 3.5

Créons ensuite les variables des catégories dans le panneau de variables de Storyline, ainsi qu'une variable supplémentaire Categories qui surveillera les catégories terminées, et une variable tampon CategoriesBuffer.

Passons aux déclencheurs. Ici, la magie des expressions opératoires entre en œuvre.

Commençons par affecter un déclencheur à chacun des objets à récupérer pour incrémenter chacune des variables « catégorie » correspondantes.

Déclencheur Storyline
Quand l’utilisateur clique sur 'Bouton Objet 1.1'
- Affecter à 'InventoryTracking' la valeur 'Cat_1+1' 

Quand l’utilisateur clique sur 'Bouton Objet 1.2'
- Affecter à 'InventoryTracking' la valeur 'Cat_1+2' 
// ...
Quand l’utilisateur clique sur 'Bouton Objet 2.1'
- Affecter à 'InventoryTracking' la valeur 'Cat_2+1' 
// Etc.

Par la suite, afin de surveiller les variables « catégories » sans avoir à dupliquer les déclencheurs chaque fois qu'un objet peut être trouvé, nous allons placer les déclencheurs sur la mise en page appliquée du masque de diapositive utilisé.

Déclencheur Storyline
Quand 'Cat_1' change
- Affecter à 'InventoryTracking' la valeur 'Cat_1!1' 
- Affecter à 'CategoriesBuffer' la variable 'InventoryResult' 
- Affecter à 'InventoryTracking' la valeur 'Categories+1'
    Si 'CategoriesBuffer' >= valeur '4'

Quand 'Cat_2' change
- Affecter à 'InventoryTracking' la valeur 'Cat_2!1' 
- Affecter à 'CategoriesBuffer' la variable 'InventoryResult' 
- Affecter à 'InventoryTracking' la valeur 'Categories+2'
    Si 'CategoriesBuffer' >= valeur '4'
// Etc.

Et pour terminer, nous vérifions pour chaque catégorie si la variable Categorie à enregistrer une modification.

Déclencheur Storyline
Quand la chronologie de 'cette diapositive' commence
- Affecter à 'InventoryTracking' la valeur 'Categories?1'
- Définir l’état de 'Bouton - Faire le Quiz 1' à 'Normal'
    Si 'InventoryResult' ≠ valeur '0'

Quand la chronologie de 'cette diapositive' commence
- Affecter à 'InventoryTracking' la valeur 'Categories?2'
- Définir l’état de 'Bouton - Faire le Quiz 2' à 'Normal'
    Si 'InventoryResult' ≠ valeur '0'
// Etc.

Quand 'Categories' change
- Affecter à 'InventoryTracking' la valeur 'Categories?1'
- Définir l’état de 'Bouton - Faire le Quiz 1' à 'Normal'
    Si 'InventoryResult' ≠ valeur '0'

Quand 'Categories' change
- Affecter à 'InventoryTracking' la valeur 'Categories?2'
- Définir l’état de 'Bouton - Faire le Quiz 2' à 'Normal'
    Si 'InventoryResult' ≠ valeur '0'
// Etc.

Variations


Mettons que ce ne soit pas un nombre X sur un total Y d'objets qui déclenche l'accessibilité à une énigme, mais plusieurs objets précis. Par exemple, les objets 1.1, 1.3 et 1.4.

Ici aussi, c'est la puissance des expressions opératoires qui va nous être utile. Et plus précisement, les expressions opératoires binaires. Comme nous allons manipuler les expressions binaires, nous allons essayer de rester simple et de ne pas vous perdre.

Reprenons le tableau ci-dessus et intéressons-nous à la colonne Cat_1.

Rajoutons une colonne Binaire qui nous indiquera en base décimale la valeur du bit à l'index correspondant. Pour faire simple, cela correspond à 2index (2 puissance index) et calculons la somme des valeurs décimales des objets requis.

Binaire Index Catégorie Cat_1
21 = 2 1 Objet 1.1
22 = 4 2 Objet 1.2
23 = 8 3 Objet 1.3
24 = 16 4 Objet 1.4
25 = 32 5 Objet 1.5

26

Il nous suffit ensuite d'adapter uniquement le déclencheur présent sur la mise en page appliquée du masque de diapositive utilisée.

Déclencheur Storyline
Quand 'Cat_1' change
- Affecter à 'InventoryTracking' la valeur 'Cat_1&26' 
- Affecter à 'CategoriesBuffer' la variable 'InventoryResult' 
- Affecter à 'InventoryTracking' la valeur 'Categories+1'
    Si 'CategoriesBuffer' = valeur '26'

Observez l'élégance de la modification !

Cat_1&26 filtre les index 1, 3 et 4 dans le nombre stocké dans Cat_1 et fait la somme des valeurs de chaque index retenu, qu'elles soient égale à 0 ou à la valeur décimale 2index. Si la somme n'est pas égale à 26, l'énigme n'est pas débloquée.

En maîtrisant les expressions opératoires, vous pourrez adapter encore et encore. N'hésitez pas à explorer les possibilités qui s'offrent à vous !



Post suivant