using UnityEngine; using Normal.Realtime; namespace Doctopedia.Megaphone { [RequireComponent(typeof(Megaphone))] public class MegaphoneSync : RealtimeComponent { Megaphone megaphone; private void Start() { megaphone = GetComponent(); } protected override void OnRealtimeModelReplaced(MegaphoneModel previousModel, MegaphoneModel currentModel) { if (previousModel != null) { // Unsubscribe from events previousModel.currentUserIDDidChange -= CurrentUserIDDidChange; previousModel.isOnDidChange -= SetOnDidChange; } if (currentModel != null) { if (!currentModel.isFreshModel) { if (currentModel.currentUserID >= 0) { CurrentUserUpdatedFromModel(currentModel.currentUserID); } megaphone.SetOnLocal(model.isOn); } // Update the state of the component // Subscribe to events currentModel.currentUserIDDidChange += CurrentUserIDDidChange; currentModel.isOnDidChange += SetOnDidChange; } } public void SetCurrentUserID(int value) { model.currentUserID = value; } public void RemoveCurrentUser() { model.currentUserID = -1; } void CurrentUserUpdatedFromModel(int value) { if (value == -1) megaphone.RemoveCurrentUser(); else megaphone.SetCurrentUserID(value); } private void CurrentUserIDDidChange(MegaphoneModel model, int value) { CurrentUserUpdatedFromModel(value); } private void SetOnDidChange(MegaphoneModel model, bool value) { megaphone.SetOnLocal(value); } internal void SetOn(bool value) { model.isOn = value; } } }