//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, July 24, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class ChatFloatWin : Window { [SerializeField] RectTransform m_ContainerFloat; [SerializeField] RichText m_Chat; DateTime overdueTime; ChatCenter chatCenter { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { } protected override void OnPreOpen() { m_ContainerFloat.SetActive(false); ChatCtrl.Inst.chatFloatUpdate += ChatFloatUpdate; WindowCenter.Instance.windowAfterOpenEvent += WindowAfterOpenEvent; } protected override void OnAfterOpen() { } protected override void OnPreClose() { ChatCtrl.Inst.chatFloatUpdate -= ChatFloatUpdate; WindowCenter.Instance.windowAfterOpenEvent -= WindowAfterOpenEvent; } protected override void OnAfterClose() { } #endregion protected override void LateUpdate() { base.LateUpdate(); if (DateTime.Now > overdueTime && m_ContainerFloat.gameObject.activeSelf) { m_ContainerFloat.SetActive(false); } } void WindowAfterOpenEvent(Window window) { if (window is MainInterfaceWin || window is LoadingWin || window is TreasureBaseWin) { m_ContainerFloat.SetActive(false); } } private void ChatFloatUpdate(ChatData data) { if (!chatCenter.IsShowChatFloat()) { return; } if (data == null) { return; } if (string.IsNullOrEmpty(data.content)) { return; } switch (data.type) { case ChatInfoType.Friend: case ChatInfoType.FairyQuestion: case ChatInfoType.FairyTip: case ChatInfoType.TeamTip: case ChatInfoType.default2: return; } m_ContainerFloat.SetActive(true); m_Chat.text = string.Empty; overdueTime = DateTime.Now.AddTicks(3 * TimeSpan.TicksPerSecond); if (data.infoList != null) { m_Chat.SetExtenalData(data.infoList); } Co_SetText(StringUtility.Contact(SetChatExtraInfo(data), data.content)); } void Co_SetText(string value) { m_Chat.text = value; if (m_Chat.preferredWidth >= 1000) { m_Chat.alignment = TextAnchor.MiddleLeft; } else { m_Chat.alignment = TextAnchor.MiddleCenter; } } string SetChatExtraInfo(ChatData data) { switch (data.type) { case ChatInfoType.World: { return string.Format(" {1}: ", "ChatIcon_World", (data as ChatUeseData).name); } case ChatInfoType.Area: return string.Format(" {1}: ", "ChatIcon_Area", (data as ChatUeseData).name); case ChatInfoType.CrossServer: return string.Format(" {1}: ", "ChatIcon_CrossServer", (data as ChatUeseData).name); case ChatInfoType.Team: { string playerName = (data as ChatUeseData).name; return string.Format(" {1}", "ChatIcon_Team", playerName + (playerName != string.Empty ? ": " : string.Empty)); } case ChatInfoType.Friend: break; case ChatInfoType.Fairy: { string playerName = (data as ChatUeseData).name; return string.Format(" {1}", "ChatIcon_Fairy", playerName + (playerName != string.Empty ? ": " : string.Empty)); } case ChatInfoType.Trumpet: return string.Format(" {1}: ", "ChatIcon_Trumpet", (data as ChatTrumpetData).name); case ChatInfoType.Invite: return string.Format(" ", "ChatIcon_Invite"); case ChatInfoType.System: return string.Format(" ", "ChatIcon_System"); case ChatInfoType.default1: return string.Format(" {1}: ", "ChatIcon_default1", (data as ChatUeseData).name); } return string.Empty; } } }