示例#1
0
 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();
 }
示例#2
0
        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));
            }
        }