using UnityEngine; using Mirror; /// /// BaieNetworkSetup.cs - v6.3 Multijoueur /// /// Ajouté automatiquement par BoutiqueReseau lors du spawn d'une baie. /// Quand le client reçoit l'objet via NetworkServer.Spawn(), les materials /// créés en runtime par BaieProcedurale.Generer() ne sont PAS synchronisés /// (Mirror ne sync pas les materials). Ce script régénère la baie localement /// sur chaque client après le spawn. /// /// SETUP : Ne pas ajouter manuellement — BoutiqueReseau l'ajoute automatiquement. /// public class BaieNetworkSetup : NetworkBehaviour { public override void OnStartClient() { base.OnStartClient(); // Sur le serveur/host, la baie est déjà générée dans TraiterPlacementBaieServeur // Sur les clients distants, il faut la régénérer pour avoir les materials if (isServer) return; BaieProcedurale bp = GetComponent(); if (bp != null) { bp.Generer(); bp.InstallerPDUAutomatiquement(); Debug.Log($"[BaieNetworkSetup] Baie régénérée côté client : {gameObject.name}"); } BaieRack br = GetComponent() ?? GetComponentInChildren(); if (br != null) br.GenererSlots(); // Appliquer les layers int layerBaie = LayerMask.NameToLayer("Baie"); int layerEquip = LayerMask.NameToLayer("Equipement"); if (layerBaie >= 0) SetLayerRecursif(gameObject, layerBaie); foreach (Transform t in GetComponentsInChildren(true)) { if (t.GetComponent() != null && layerEquip >= 0) SetLayerRecursif(t.gameObject, layerEquip); } // v7.1 : notifier le gestionnaire de cables que cette baie est prete. // Le gestionnaire va retenter de recreer les cables en attente qui // referencent cette baie / ses PDUs / ses equipements. if (GestionnaireCablesReseau.Instance != null) GestionnaireCablesReseau.Instance.NotifierBaiePrete(gameObject); } private void SetLayerRecursif(GameObject obj, int layer) { obj.layer = layer; foreach (Transform c in obj.transform) SetLayerRecursif(c.gameObject, layer); } }