Bien, comme je le disais :
- Kitai a écrit:
- Maintenant, si ce qui te chagrine c'est d'utiliser plusieurs fenêtres d'inventaires dans ton GUI qui correspondent à des personnages différents, alors il va falloir passer par un système beaucoup plus compliqué de DynamicSprite/DrawingSurface et Cie (et là y'a de la matière pour un module ).
Du coup ça m'a suffisamment tracassé l'esprit pour que je le fasse, ce fichu module.
Il est disponible
ici.
L'utilisation est la suivante :
Après avoir importé le module, tu verras à la première ligne de
TypeInventaire.asc - Code:
-
#define TYPE_PROPRIETE "Type_Inv"
Cela signifie que
TypeInv est le nom de la propriété personnalisée à regarder pour trier tes objets d'inventaires.
En supposant que tu gardes
Type_Inv, tu crées donc une propriété personnalisée
de type textuelle pour tes objets d'inventaire que tu nommes "Type_Inv". De cette façon, tu peux donner la valeur "habits" à tous tes objets d'inventaire qui sont des vêtemets.
Ensuite, dans le GUI qui va contenir ton inventaire, tu crées un
bouton de la dimension voulue pour ton inventaire.
En supposant que le nom de script de ce bouton soit
bInventaire, il faut alors mettre dans le script, quelque part avant l'affichage du GUI, la commande suivante :
- Code:
-
bInventaire.AsInv(player, "habits");
Ce faisant, ton bouton deviendra une fenêtre d'inventaire qui affichera uniquement les vêtements que porte le personnage joueur (cf.
player).
Par défaut, le GUI est prévu pour défiler verticalement, mais tu peux régler ça en passant un troisième paramètre :
- Code:
-
bInventaire.AsInv(player, "habits", eInvBtn_Horizontal);
// ou bien
bInventaire.AsInv(player, "habits", eInvBtn_Vertical);
Pour que l'utilisateur puisse faire défiler l'inventaire, justement, tu crées des boutons "haut" et "bas" (ou "gauche" et "droite" selon le défilement de ton inventaire) dans lesquels tu mets la commande correspondante parmi les suivantes :
- Code:
-
bInventaire.ScrollUp();
bInventaire.ScrollDown();
bInventaire.ScrollLeft();
bInventaire.ScrollRigth();
Dernières précisions, pour mettre à jour l'inventaire, tu appelles à nouveau la commande
AsInv sur le bouton. Donc dans l'idéal, il faudrait que tu appelles cette commande après chaque commande
AddInventory.
Enfin, si tu veux récupérer l'objet d'inventaire survolé par la souris, tu peux utiliser la commande
GetInvBtnAt(mouse.x, mouse.y) (la commande traditionnelle
InventoryItem.GetAtScreen(mouse.x, mouse.y) ne fonctionnera pas avec ces inventaires).
EDIT : AGS a un problème de gestion sur les tableaux dynamiques pour les DynamicSprites. Du coup, j'ai ajouté une fonction InvBtnFree(); qu'il faudra appeler avant toute commande RestartGame(), RestoreGame() ou QuitGame() (c'est-à-dire à chaque fois qu'on "quitte" la partie en cours).Voilà, je crois que j'ai à peu près fait le tour. Dis-moi si ça te convient et n'hésite pas à me suggérer des améliorations.