Boutique — interface
Scripts UI de la boutique de personnalisation : navigation par catégories, grille d'items générée dynamiquement et gestion de l'état visuel (acheté/verrouillé/disponible).
Le dossier UserInterface/Boutique/ gère l’interface de la boutique de personnalisation. Pour les données (ScriptableObjects, rareté, sauvegarde), voir Données de la boutique.
Pipeline d’interaction
- L’utilisateur clique sur un bouton de catégorie (ex. “Chapeaux”) →
CategorieSelecteds’active. CategorieSelectedchange sa couleur et demande àPersonnalisationMenude désélectionner les autres boutons.PersonnalisationMenunettoie la grille (layoutGroupForIcons), lit les ScriptableObjects, et instancie un prefab par item.- Chaque prefab contient
PersonnalisationItemIconUIqui s’initialise avec ses données et met à jour son interface de manière autonome.
PersonnalisationMenu — gestionnaire principal
Fait le lien entre les données, l’interface, le joueur et la caméra.
Champs sérialisés
| Catégorie | Champ | Type | Description |
|---|---|---|---|
| Interface | playerDB | AutoResizableLabel | Solde actuel de DB |
| Interface | layoutGroupForIcons | LayoutGroup | Conteneur de la grille d’items |
| Interface | purchaseButton | GameObject | Bouton “Acheter” (affiché/grisé selon l’item sélectionné) |
| Système | itemIconPrefab | GameObject | Modèle de bouton généré pour chaque item |
| Caméra | mainCamera, zoomCameraPosition, defaultCameraPosition | Transform | Zoom sur le visage pour les accessoires de tête |
Méthodes clés
| Méthode | Description |
|---|---|
Display[...]() (ex. DisplayLunettesType) | Appelle CreateItemIcons(catégorie, sousCatégorie). Pour les lunettes, passe needToZoom = true pour déclencher le mouvement de caméra. |
ButtonCategorieSelected() / ButtonSubCategorieSelected() | Émet les événements de désélection pour que les anciens boutons reprennent leur couleur blanche. |
QuitBoutique() | Quitte le menu de personnalisation. |
PersonnalisationItemIconUI — vitrine d’un item
Gère l’esthétique et les informations d’un seul bouton généré. Analyse son ScriptableObject et met à jour son Canvas.
Champs sérialisés
| Catégorie | Champs | Description |
|---|---|---|
| Visuel principal | _previewItem | Image de l’item |
| Rareté | _background, _backgroundInfoRarete, _rareteText | Changent de couleur/texte selon la rareté (Commun, Rare, Épique, Légendaire) |
| Statut | _price, _priceValue, _buyedCheckmark, _lockIcon | Calques affichés/masqués selon l’état de l’item |
SetItemData(PersonnalisationItem_SO data) : calcule le prix selon la rareté, assigne les sprites de fond, puis applique la logique de statut :
- Possédé (
isBuy) : affiche le checkmark, cache le prix. - Verrouillé (
isLock) : affiche le cadenas, cache prix et checkmark. - Disponible : affiche le prix.
CategorieSelected — état visuel du bouton
Attaché à chaque bouton de catégorie. Gère uniquement le retour visuel (bleu = sélectionné, blanc = inactif).
| Champ | Description |
|---|---|
_isInitiallySelected | Si vrai, ce bouton se sélectionne automatiquement au démarrage pour éviter une grille vide. |
_isBigCategorie | Indique si c’est une catégorie majeure (ex. “Vêtements”) ou une sous-catégorie (ex. “T-shirts”). Évite de désélectionner la catégorie parente quand on clique sur une sous-catégorie. |
| Méthode | Description |
|---|---|
SelectIcon() | Prévient le menu, s’abonne à l’événement de désélection, et colore en bleu. |
UnselectIcon() | Déclenché automatiquement quand un autre bouton de même rang est cliqué. Remet en blanc et se désabonne. |