Accueil Github ↗
v1.0

Code — ChambreManager

Code source annoté de ChambreManager.cs, ChambreView.cs et ChambreData.cs.

← Retour à la Chambre

ChambreManager.cs

Gestionnaire principal. Hérite de AbstractSingleton<T>.

using UnityEngine;
using System;

public class ChambreManager : AbstractSingleton<ChambreManager>
{
    [Header("Références scène")]
    [SerializeField] private GameObject chambrePrefab;
    [SerializeField] private Transform  chambreParent;

    private string _currentEleveId;

    public static event Action<ChambreData> OnChambreChargee;
    public static event Action             OnChambreErreur;

    public void ChargerChambre(string idEleve)
    {
        _currentEleveId = idEleve;
        PlayFabManager.Instance.GetChambreData(
            idEleve,
            OnDataLoaded,
            OnDataErreur
        );
    }

    public void ViderChambre()
    {
        foreach (Transform child in chambreParent)
            Destroy(child.gameObject);
    }

    private void OnDataLoaded(ChambreData data)
    {
        ViderChambre();
        var instance = Instantiate(chambrePrefab, chambreParent);
        instance.GetComponent<ChambreView>().Initialiser(data);
        OnChambreChargee?.Invoke(data);
    }

    private void OnDataErreur(string message)
    {
        Debug.LogError($"[ChambreManager] {_currentEleveId} : {message}");
        OnChambreErreur?.Invoke();
    }
}

ChambreData.cs

Structure de données sérialisée depuis PlayFab.

using System;

[Serializable]
public class ChambreData
{
    public string   eleveId;
    public string   themeCouleur;      // "bleu" | "vert" | "orange"
    public string[] mobilierActifs;    // IDs des objets placés
    public int      dynablocksTotal;   // monnaie cumulée
}

ChambreView.cs

using UnityEngine;
using System.Collections.Generic;

public class ChambreView : MonoBehaviour
{
    [SerializeField] private List<ChambreObjectSlot> slots;
    [SerializeField] private SpriteRenderer fondSprite;
    [SerializeField] private Sprite[] fonds; // index = thème

    public void Initialiser(ChambreData data)
    {
        AppliquerTheme(data.themeCouleur);
        foreach (var id in data.mobilierActifs)
            PlacerObjet(id);
    }

    public void PlacerObjet(string id)
    {
        var slot = slots.Find(s => s.AccepteObjet(id));
        slot?.Placer(id);
    }

    private void AppliquerTheme(string theme)
    {
        int index = theme switch {
            "vert"   => 1,
            "orange" => 2,
            _        => 0  // bleu par défaut
        };
        fondSprite.sprite = fonds[index];
    }
}