using System.Collections; using System.Collections.Generic; using UnityEngine; using Normal.Realtime; public class HeadPhoneSync : RealtimeComponent { [SerializeField] private MeshRenderer[] meshRenderers; [SerializeField] private Color color; private Color lastColor; private void Update() { if (color != lastColor) { model.color = color; lastColor = color; } } private void UpdateMeshRendererColor() { foreach (var renderer in meshRenderers) { foreach (var mat in renderer.materials) { mat.color = model.color; } } } protected override void OnRealtimeModelReplaced(HeadPhoneSyncModel previousModel, HeadPhoneSyncModel currentModel) { if (previousModel != null) { previousModel.colorDidChange -= DidColorChange; previousModel.isActiveDidChange -= DidActiveStateChange; } if (currentModel != null) { if (currentModel.isFreshModel) { currentModel.color = meshRenderers[0].material.color; currentModel.isActive = gameObject.activeSelf; UpdateMeshRendererColor(); } else { gameObject.SetActive(currentModel.isActive); // Ensure consistency for new clients } currentModel.colorDidChange += DidColorChange; currentModel.isActiveDidChange += DidActiveStateChange; } } private void DidColorChange(HeadPhoneSyncModel model, Color value) { UpdateMeshRendererColor(); } private void DidActiveStateChange(HeadPhoneSyncModel model, bool isActive) { Debug.Log($"Active state changed to: {isActive}"); gameObject.SetActive(isActive); } public void SetActiveState(bool state) { gameObject.SetActive(state); model.isActive = state; } }