protected override void OnDestroy() { ChatConfig.instance.OnConfigChanged -= this.Instance_OnConfigChanged; BSEvents.menuSceneActive -= this.BSEvents_menuSceneActive; BSEvents.gameSceneActive -= this.BSEvents_gameSceneActive; VRPointerOnEnablePatch.OnEnabled -= this.PointerOnEnabled; this.StopAllCoroutines(); while (this._messages.TryDequeue(out var msg)) { msg.OnLatePreRenderRebuildComplete -= this.OnRenderRebuildComplete; if (msg.Text.ChatMessage != null) { _backupMessageQueue.Enqueue(new KeyValuePair <DateTime, IChatMessage>(msg.ReceivedDate, msg.Text.ChatMessage)); } if (msg.SubText.ChatMessage != null) { _backupMessageQueue.Enqueue(new KeyValuePair <DateTime, IChatMessage>(msg.ReceivedDate, msg.SubText.ChatMessage)); } Destroy(msg); } //_messages.Clear(); Destroy(this._rootGameObject); if (this.TextPool != null) { this.TextPool.Dispose(); this.TextPool = null; } if (this._chatScreen != null) { Destroy(this._chatScreen); this._chatScreen = null; } if (this._chatMoverMaterial != null) { Destroy(this._chatMoverMaterial); this._chatMoverMaterial = null; } base.OnDestroy(); }
private IEnumerator Start() { DontDestroyOnLoad(this.gameObject); this._chatConfig = ChatConfig.instance; yield return(new WaitWhile(() => !ESCFontManager.instance.IsInitialized)); this.SetupScreens(); foreach (var msg in this._messages.ToArray()) { msg.Text.SetAllDirty(); if (msg.SubTextEnabled) { msg.SubText.SetAllDirty(); } } (this.transform as RectTransform).pivot = new Vector2(0.5f, 0f); this.TextPool = new ObjectMemoryComponentPool <EnhancedTextMeshProUGUIWithBackground>(64, constructor: () => { var go = new GameObject(nameof(EnhancedTextMeshProUGUIWithBackground), typeof(EnhancedTextMeshProUGUIWithBackground)); DontDestroyOnLoad(go); go.SetActive(false); var msg = go.GetComponent <EnhancedTextMeshProUGUIWithBackground>(); msg.Text.enableWordWrapping = true; msg.Text.autoSizeTextContainer = false; msg.SubText.enableWordWrapping = true; msg.SubText.autoSizeTextContainer = false; (msg.transform as RectTransform).pivot = new Vector2(0.5f, 0); msg.transform.SetParent(this._chatContainer.transform, false); this.UpdateMessage(msg); return(msg); }, onFree: (msg) => { try { msg.gameObject.SetActive(false); (msg.transform as RectTransform).localPosition = Vector3.zero; msg.OnLatePreRenderRebuildComplete -= this.OnRenderRebuildComplete; msg.HighlightEnabled = false; msg.AccentEnabled = false; msg.SubTextEnabled = false; msg.Text.text = ""; msg.Text.ChatMessage = null; msg.SubText.text = ""; msg.SubText.ChatMessage = null; msg.Text.ClearImages(); msg.SubText.ClearImages(); } catch (Exception ex) { Logger.Error($"An exception occurred while trying to free CustomText object. {ex.ToString()}"); } } ); ChatConfig.instance.OnConfigChanged += this.Instance_OnConfigChanged; BSEvents.menuSceneActive += this.BSEvents_menuSceneActive; BSEvents.gameSceneActive += this.BSEvents_gameSceneActive; yield return(new WaitWhile(() => this._chatScreen == null)); while (_backupMessageQueue.TryDequeue(out var msg)) { var task = this.OnTextMessageReceived(msg.Value, msg.Key).GetAwaiter(); yield return(new WaitWhile(() => !task.IsCompleted)); } }