From 78bfe524ea4776c47f6314e56e97f39970b00fce Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期二, 25 九月 2018 15:07:07 +0800
Subject: [PATCH] Merge branch 'master' into 1871天赋功能

---
 System/Chat/ChatCtrl.cs |   82 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 82 insertions(+), 0 deletions(-)

diff --git a/System/Chat/ChatCtrl.cs b/System/Chat/ChatCtrl.cs
index 220b877..b8eca6c 100644
--- a/System/Chat/ChatCtrl.cs
+++ b/System/Chat/ChatCtrl.cs
@@ -179,6 +179,9 @@
 
         DTC0102_tagCDBPlayer.switchAccountEvent += SwitchAccountEvent;
         StageManager.Instance.onStageLoadFinish += OnStageLoadFinish;
+        DTC0403_tagPlayerLoginLoadOK.playerLoginOkEvent += PlayerLoginOkEvent;
+
+        InitChatRedpoints();
 
         FuncConfigConfig _cfg = Config.Instance.Get<FuncConfigConfig>("RandomWord");
         try
@@ -192,12 +195,20 @@
         }
     }
 
+    private void PlayerLoginOkEvent()
+    {
+        UpdateRedpoint(ChatInfoType.Team);
+        UpdateRedpoint(ChatInfoType.Fairy);
+    }
+
     private void OnStageLoadFinish()
     {
         bool isDungeon = StageManager.Instance.CurrentStage is DungeonStage;
         if (!isDungeon)
         {
             ClearAllChatInfo();
+            unReadChatCounts[ChatInfoType.Fairy] = 0;
+            unReadChatCounts[ChatInfoType.Team] = 0;
         }
     }
 
@@ -430,6 +441,7 @@
     {
         ChatData chatData = new ChatFamilyData(vNetData.Content, (int)vNetData.PlayerID, vNetData.Name, vNetData.Extras);
         KeepChatInfo(chatData);
+        ReceiveNewChat(ChatInfoType.Fairy);
     }
     /// <summary>
     /// 濂藉弸绉佽亰
@@ -494,6 +506,7 @@
     {
         ChatData chatData = new ChatTeamData(vNetData.Content, (int)vNetData.PlayerID, vNetData.Name, vNetData.Extras);
         KeepChatInfo(chatData);
+        ReceiveNewChat(ChatInfoType.Team);
     }
     /// <summary>
     /// GM
@@ -990,6 +1003,75 @@
         return string.Empty;
     }
     #endregion
+
+    #region 浠欑紭绾㈢偣
+    Dictionary<ChatInfoType, Redpoint> chatSocialRedpoints = new Dictionary<ChatInfoType, Redpoint>();
+    Dictionary<ChatInfoType, int> unReadChatCounts = new Dictionary<ChatInfoType, int>();
+    public void InitChatRedpoints()
+    {
+        chatSocialRedpoints.Add(ChatInfoType.Fairy, new Redpoint(MainRedDot.RedPoint_FriendChatKey, 2502));
+        chatSocialRedpoints.Add(ChatInfoType.Team, new Redpoint(MainRedDot.RedPoint_FriendChatKey, 2503));
+        unReadChatCounts.Add(ChatInfoType.Fairy, 0);
+        unReadChatCounts.Add(ChatInfoType.Team, 0);
+    }
+
+    public void ViewChat(ChatInfoType type)
+    {
+        if (unReadChatCounts.ContainsKey(type))
+        {
+            unReadChatCounts[type] = 0;
+            UpdateRedpoint(type);
+        }
+    }
+
+    void ReceiveNewChat(ChatInfoType type)
+    {
+        switch (type)
+        {
+            case ChatInfoType.Team:
+                if (!WindowCenter.Instance.CheckOpen<TeamChatWin>())
+                {
+                    unReadChatCounts[ChatInfoType.Team] = Mathf.Min(unReadChatCounts[ChatInfoType.Team] + 1, 99);
+                }
+                break;
+            case ChatInfoType.Fairy:
+                if (!WindowCenter.Instance.CheckOpen<FairyChatWin>())
+                {
+                    unReadChatCounts[ChatInfoType.Fairy] = Mathf.Min(unReadChatCounts[ChatInfoType.Fairy] + 1, 99);
+                }
+                break;
+        }
+        UpdateRedpoint(type);
+    }
+
+    public void UpdateRedpoint(ChatInfoType type)
+    {
+        if (chatSocialRedpoints.ContainsKey(type))
+        {
+            var redpoint = chatSocialRedpoints[type];
+            if (unReadChatCounts[type] > 0)
+            {
+                redpoint.state = RedPointState.Quantity;
+                redpoint.count = unReadChatCounts[type];
+            }
+            else
+            {
+                redpoint.state = RedPointState.None;
+            }
+        }
+        var socialRed = MainRedDot.Instance.redPointFriendChat;
+        if (chatSocialRedpoints[ChatInfoType.Fairy].state == RedPointState.Quantity
+            || chatSocialRedpoints[ChatInfoType.Team].state == RedPointState.Quantity)
+        {
+            socialRed.count = unReadChatCounts[ChatInfoType.Fairy] > 0 ?
+                unReadChatCounts[ChatInfoType.Fairy] : unReadChatCounts[ChatInfoType.Team];
+        }
+        else
+        {
+            socialRed.count = 0;
+        }
+    }
+    #endregion
 }
 public struct ChatExtraData
 {

--
Gitblit v1.8.0