Accueil Github ↗
Itération 3

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

  1. L’utilisateur clique sur un bouton de catégorie (ex. “Chapeaux”) → CategorieSelected s’active.
  2. CategorieSelected change sa couleur et demande à PersonnalisationMenu de désélectionner les autres boutons.
  3. PersonnalisationMenu nettoie la grille (layoutGroupForIcons), lit les ScriptableObjects, et instancie un prefab par item.
  4. Chaque prefab contient PersonnalisationItemIconUI qui 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égorieChampTypeDescription
InterfaceplayerDBAutoResizableLabelSolde actuel de DB
InterfacelayoutGroupForIconsLayoutGroupConteneur de la grille d’items
InterfacepurchaseButtonGameObjectBouton “Acheter” (affiché/grisé selon l’item sélectionné)
SystèmeitemIconPrefabGameObjectModèle de bouton généré pour chaque item
CaméramainCamera, zoomCameraPosition, defaultCameraPositionTransformZoom sur le visage pour les accessoires de tête

Méthodes clés

MéthodeDescription
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égorieChampsDescription
Visuel principal_previewItemImage de l’item
Rareté_background, _backgroundInfoRarete, _rareteTextChangent de couleur/texte selon la rareté (Commun, Rare, Épique, Légendaire)
Statut_price, _priceValue, _buyedCheckmark, _lockIconCalques 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).

ChampDescription
_isInitiallySelectedSi vrai, ce bouton se sélectionne automatiquement au démarrage pour éviter une grille vide.
_isBigCategorieIndique 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éthodeDescription
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.