2026-04-18 11:31:50 +00:00

61 lines
2.3 KiB
C#

using UnityEngine;
using Mirror;
/// <summary>
/// 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.
/// </summary>
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<BaieProcedurale>();
if (bp != null)
{
bp.Generer();
bp.InstallerPDUAutomatiquement();
Debug.Log($"[BaieNetworkSetup] Baie régénérée côté client : {gameObject.name}");
}
BaieRack br = GetComponent<BaieRack>() ?? GetComponentInChildren<BaieRack>();
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<Transform>(true))
{
if (t.GetComponent<PDU>() != 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);
}
}