Sfoglia il codice sorgente

增加好友系统

liuqilin 7 anni fa
parent
commit
bf9688d99b

+ 1 - 1
Assets/Resource/Prefab/PrefabUI/Canvas.prefab

@@ -21095,7 +21095,7 @@ MonoBehaviour:
   m_Interactable: 1
   m_TargetGraphic: {fileID: 114060588801599916}
   toggleTransition: 1
-  graphic: {fileID: 0}
+  graphic: {fileID: 114923624059624736}
   m_Group: {fileID: 0}
   onValueChanged:
     m_PersistentCalls:

+ 70 - 1
Assets/Resource/Prefab/PrefabUI/CommentItem.prefab

@@ -166,6 +166,23 @@ GameObject:
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
   m_IsActive: 0
+--- !u!1 &1929131330035216
+GameObject:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  serializedVersion: 5
+  m_Component:
+  - component: {fileID: 224456985212155488}
+  - component: {fileID: 222026311244124626}
+  - component: {fileID: 114208623427678278}
+  m_Layer: 5
+  m_Name: NewMessageFlagImage
+  m_TagString: Untagged
+  m_Icon: {fileID: 0}
+  m_NavMeshLayer: 0
+  m_StaticEditorFlags: 0
+  m_IsActive: 0
 --- !u!1 &1934844755920172
 GameObject:
   m_ObjectHideFlags: 1
@@ -315,6 +332,33 @@ MonoBehaviour:
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: "\u52A0\u4E3A\u597D\u53CB"
+--- !u!114 &114208623427678278
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1929131330035216}
+  m_Enabled: 1
+  m_EditorHideFlags: 0
+  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
+  m_Name: 
+  m_EditorClassIdentifier: 
+  m_Material: {fileID: 0}
+  m_Color: {r: 0.9372549, g: 0.3254902, b: 0.3137255, a: 1}
+  m_RaycastTarget: 1
+  m_OnCullStateChanged:
+    m_PersistentCalls:
+      m_Calls: []
+    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
+      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
+  m_Sprite: {fileID: 21300000, guid: c3253a9c218d503429b8ea8aa7699809, type: 3}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
 --- !u!114 &114218369184391990
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -648,6 +692,12 @@ MonoBehaviour:
     m_VerticalOverflow: 0
     m_LineSpacing: 1
   m_Text: "\u79C1\u4FE1"
+--- !u!222 &222026311244124626
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1929131330035216}
 --- !u!222 &222039781527285768
 CanvasRenderer:
   m_ObjectHideFlags: 1
@@ -725,7 +775,7 @@ RectTransform:
   m_LocalScale: {x: 1, y: 1, z: 1}
   m_Children: []
   m_Father: {fileID: 224965444617846838}
-  m_RootOrder: 0
+  m_RootOrder: 1
   m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
   m_AnchorMin: {x: 0.5, y: 0.5}
   m_AnchorMax: {x: 0.5, y: 0.5}
@@ -829,6 +879,24 @@ RectTransform:
   m_AnchoredPosition: {x: 317.40005, y: 2.999588}
   m_SizeDelta: {x: 397.6, y: 65}
   m_Pivot: {x: 0.5, y: 0.5}
+--- !u!224 &224456985212155488
+RectTransform:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1929131330035216}
+  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
+  m_LocalPosition: {x: 0, y: 0, z: 0}
+  m_LocalScale: {x: 6.666665, y: 6.666665, z: 1}
+  m_Children: []
+  m_Father: {fileID: 224965444617846838}
+  m_RootOrder: 0
+  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
+  m_AnchorMin: {x: 0.5, y: 0.5}
+  m_AnchorMax: {x: 0.5, y: 0.5}
+  m_AnchoredPosition: {x: -180.19986, y: 60.799988}
+  m_SizeDelta: {x: 17.6, y: 17.6}
+  m_Pivot: {x: 0.5, y: 0.5}
 --- !u!224 &224735141033996776
 RectTransform:
   m_ObjectHideFlags: 1
@@ -913,6 +981,7 @@ RectTransform:
   m_LocalPosition: {x: 0, y: 0, z: 0}
   m_LocalScale: {x: 0.15000002, y: 0.15000002, z: 1}
   m_Children:
+  - {fileID: 224456985212155488}
   - {fileID: 224038447440644656}
   m_Father: {fileID: 224042633406990250}
   m_RootOrder: 5

+ 2 - 0
Assets/Script/Manage/HttpManager.cs

@@ -166,6 +166,8 @@ public class HttpManager : Regist
 
     public void Awake()
     {
+        //AddComment("1709110834264628935 ", "1710065808151506837", "你好", CommentType.Garden);
+
         //URLRequestData requestData = new URLRequestData();
         //requestData.Add("u", "1710065808151506837");
         //requestData.Add("n", "甜美的铃铛");

+ 2 - 2
Assets/Script/Manage/ResourceManager.cs

@@ -779,8 +779,8 @@ public class ResourceManager : Regist
         CommentItem commentItem = tra.GetComponent<CommentItem>();
 
         commentItem.InitAtOnce();
-
-        commentItem.Reset(nickname, serialNumber, content);
+        AccountData accountData = new AccountData(nickname, serialNumber);
+        commentItem.Reset(accountData, content);
 
         return commentItem;
     }

+ 21 - 1
Assets/Script/Manage/SocialManager.cs

@@ -34,6 +34,7 @@ public class SocialManager : Regist
     public static int CurrentPlayerCommentPage;
     public static int CurrentVisiteeCommentPage;
 
+    public static bool IsFriendFilterOn;
     public static Text PraiseText;
     public static Button PraiseButton;
     public static Toggle CommentFriendFilterToggle;
@@ -97,6 +98,8 @@ public class SocialManager : Regist
         CommentFriendFilterToggle.onValueChanged.AddListener(OnCommentFriendFilterToggleClick);
 
         CommentScrollRect.onValueChanged.AddListener(OnScroll);
+
+        FriendPanel.OnFriendListRefresh += OnFriendListRefresh;
     }
 
 
@@ -654,14 +657,31 @@ public class SocialManager : Regist
 
     public static void EnableCommentFriendFilter()
     {
+        IsFriendFilterOn = true;
         foreach (var commentItem in CommentItems)
         {
-            
+            if (!commentItem.IsFriend(FriendPanel.FriendAccountDatas))
+            {
+                commentItem.SetActive(false);
+            }
         }
     }
 
     public static void DisableCommentFriendFilter()
     {
+        IsFriendFilterOn = false;
+        foreach (var commentItem in CommentItems)
+        {
+            commentItem.SetActive(true);
+        }
+    }
+
 
+    private static void OnFriendListRefresh(List<AccountData> accountDatas)
+    {
+        if (IsFriendFilterOn)
+        {
+            EnableCommentFriendFilter();
+        }
     }
 }

+ 28 - 13
Assets/Script/Object/CommentItem.cs

@@ -17,6 +17,7 @@ public class CommentItemLabel
     public static string AddFriendButtonTitle = "AddFriendButtonTitle";
     public static string SendMessageButton = "SendMessageButton";
     public static string SendMessageButtonTitle = "SendMessageButtonTitle";
+    public static string NewMessageFlagImage = "NewMessageFlagImage";
 }
 
 public class CommentData
@@ -68,13 +69,14 @@ public class CommentItem : Regist
     public Text ContentText;
     public Text AddFriendButtonTitle;
     public Text SendMessageButtonTitle;
+    public Image NewMessageFlagImage;
     public Button VisitButton;
     public Button AddFriendButton;
     public Button SendMessageButton;
     public BestfitText VisitButtonTitle;
 
     public string Content;
-    public string SerialNumber;
+    public AccountData AccountData;
 
     #endregion
 
@@ -93,6 +95,7 @@ public class CommentItem : Regist
         ContentText = childDic[CommentItemLabel.VisitButtonTitle].GetComponent<Text>();
         AddFriendButtonTitle = childDic[CommentItemLabel.AddFriendButtonTitle].GetComponent<Text>();
         SendMessageButtonTitle = childDic[CommentItemLabel.SendMessageButtonTitle].GetComponent<Text>();
+        NewMessageFlagImage = childDic[CommentItemLabel.NewMessageFlagImage].GetComponent<Image>();
         VisitButton = childDic[CommentItemLabel.VisitButton].GetComponent<Button>();
         AddFriendButton = childDic[CommentItemLabel.AddFriendButton].GetComponent<Button>();
         SendMessageButton = childDic[CommentItemLabel.SendMessageButton].GetComponent<Button>();
@@ -106,12 +109,15 @@ public class CommentItem : Regist
 
         VisitButton.onClick.AddListener(Visit);
         AddFriendButton.onClick.AddListener(OnAddFriendButtonClick);
+        SendMessageButton.onClick.AddListener(OnSendMessageButtonClick);
 
         Manager.OnLevelChange += level =>
         {
             ContentText.text = ResourceManager.Get<Text>(ObjectLabel.C_CostLab).text;
         };
 
+        FriendPanel.OnFriendListRefresh += RefreshRelationship;
+
         return false;
     }
 
@@ -119,15 +125,17 @@ public class CommentItem : Regist
     {
         SocialManager.CloseCommentPanel();
         SocialManager.RecordCommentPanel();
-        VisitManager.Visit(ConfigSource.SerialNumber, SerialNumber);
+        VisitManager.Visit(ConfigSource.SerialNumber, AccountData.SerialNumber);
     }
 
-    public void Reset(string nickname, string serialNumber, string content)
+    public void Reset(AccountData accountData, string content)
     {
         Content = content;
-        SerialNumber = serialNumber;
+        AccountData = accountData;
 
-        if (serialNumber == HttpManager.SerialNumber)
+        RefreshRelationship(FriendPanel.FriendAccountDatas);
+
+        if (accountData.SerialNumber == HttpManager.SerialNumber)
         {
             VisitButton.SetActive(false);
         }
@@ -136,15 +144,15 @@ public class CommentItem : Regist
             VisitButton.SetActive(true);
         }
 
-        if (!string.IsNullOrEmpty(nickname))
+        if (!string.IsNullOrEmpty(accountData.Nickname))
         {
-            Title.text = nickname;
+            Title.text = accountData.Nickname;
         }
         else
         {
             if (Title.text.Length >= 4)
             {
-                Title.text = "****" + serialNumber.Substring(serialNumber.Length - 4);
+                Title.text = "****" + accountData.SerialNumber.Substring(accountData.SerialNumber.Length - 4);
             }
             else
             {
@@ -162,7 +170,7 @@ public class CommentItem : Regist
         {
             AudioManager.PlayClip(ResourceLabel.BtnClip);
             AddFriendButton.interactable = false;
-            HttpManager.ApplyBuddy(SerialNumber, SendApplySucceed, SendApplyFailed);
+            HttpManager.ApplyBuddy(AccountData.SerialNumber, SendApplySucceed, SendApplyFailed);
         }
     }
 
@@ -180,17 +188,24 @@ public class CommentItem : Regist
     }
 
 
-    public void RefreshRelationship()
+    public void RefreshRelationship(List<AccountData> accountDatas)
     {
-        if (IsFriend())
+        if (IsFriend(accountDatas))
         {
             AddFriendButton.SetActive(false);
             SendMessageButton.SetActive(true);
         }
     }
 
-    public bool IsFriend()
+    public bool IsFriend(List<AccountData> accountDatas)
+    {
+        return accountDatas.MyContains(item => AccountData.SerialNumber == item.SerialNumber);
+    }
+
+
+    public void OnSendMessageButtonClick()
     {
-        return FriendPanel.FriendItems.MyContains(item => AccountData.SerialNumber == item.AccountData.SerialNumber);
+        AudioManager.PlayClip(ResourceLabel.BtnClip);
+        MessagePanel.OpenPanel(AccountData);
     }
 }

+ 22 - 26
Assets/Script/Social/FriendPanel.cs

@@ -34,6 +34,7 @@ public class FriendPanel : Regist
     private static float RefreshApplicantTime = 15f;
     private static float RefreshApplicantTimer = RefreshApplicantTime;
     private static List<ApplicantItem> ApplicantItems = new List<ApplicantItem>();
+    public static List<AccountData> ApplicantAccountDatas = new List<AccountData>();
 
     public static int MaxFriend
     {
@@ -48,6 +49,7 @@ public class FriendPanel : Regist
     private static float RefreshFriendTime = 15f;
     private static float RefreshFriendTimer = RefreshFriendTime;
     public static List<FriendItem> FriendItems = new List<FriendItem>();
+    public static List<AccountData> FriendAccountDatas = new List<AccountData>();
 
     public static bool HaveNewApplicant;
     public static bool HaveNewPrivateMessage
@@ -64,6 +66,8 @@ public class FriendPanel : Regist
 
     public static int ActivateLevel = TutorialManager.VisitTutorialLevel;
 
+    public static Action<List<AccountData>> OnFriendListRefresh;
+
     #endregion
 
     public override void ThirdInit()
@@ -179,6 +183,7 @@ public class FriendPanel : Regist
         item.Reset(accountData);
         item.SetParent(FriendScrollRect.content);
         FriendItems.Add(item);
+        FriendAccountDatas.Add(accountData);
         UpdateFriendAmountText();
     }
 
@@ -186,6 +191,7 @@ public class FriendPanel : Regist
     {
         ResourceManager.Save(item);
         FriendItems.Remove(item);
+        FriendAccountDatas.Remove(item.AccountData);
         UpdateFriendAmountText();
     }
 
@@ -209,25 +215,28 @@ public class FriendPanel : Regist
         {
             AddFriendItem(accountData);
         }
-        foreach (var memberItem in PlazaroomMemberPanel.MemberItemDictionary.Values)
-        {
-            string memberItemSerialNumber = memberItem.AccountData.SerialNumber;
-            if (accountDatas.MyContains(data => data.SerialNumber == memberItemSerialNumber))
-            {
-                memberItem.RefreshRelationship();
-            }
-        }
-        if (PlazaroomMemberPanel.IsFriendFilterOn)
+        FriendAccountDatas = accountDatas;
+        if (OnFriendListRefresh != null)
         {
-            PlazaroomMemberPanel.EnableFriendFilter();
+            OnFriendListRefresh.Invoke(accountDatas);
         }
     }
 
 
+    public static void AddApplicantItem(AccountData accountData)
+    {
+        ApplicantItem item = ResourceManager.Get(ApplicantItemLabel.ApplicantItem, Folder.UI, false, ApplicantScrollRect.content, false, ObjType.ApplicantItem, typeof(ApplicantItem)).GetComponent<ApplicantItem>();
+        item.Init();
+        item.Reset(accountData);
+        ApplicantItems.Add(item);
+        ApplicantAccountDatas.Add(accountData);
+    }
+
     public static void SaveApplicantItem(ApplicantItem item)
     {
         ResourceManager.Save(item);
         ApplicantItems.Remove(item);
+        ApplicantAccountDatas.Remove(item.AccountData);
         if (ApplicantItems.Count == 0)
         {
             OnDontHaveApplicant();
@@ -245,16 +254,13 @@ public class FriendPanel : Regist
     {
         foreach (var applicantItem in ApplicantItems)
         {
-            ResourceManager.Save(applicantItem);
+            SaveApplicantItem(applicantItem);
         }   
-        ApplicantItems = new List<ApplicantItem>();
         for (int i = 0; i < accountDatas.Count; i++)
         {
-            ApplicantItem item = ResourceManager.Get(ApplicantItemLabel.ApplicantItem, Folder.UI, false, ApplicantScrollRect.content, false, ObjType.ApplicantItem, typeof(ApplicantItem)).GetComponent<ApplicantItem>();
-            item.Init();
-            item.Reset(accountDatas[i]);
-            ApplicantItems.Add(item);
+            AddApplicantItem(accountDatas[i]);
         }
+        ApplicantAccountDatas = accountDatas;
         if (ApplicantItems.Count > 0)
         {
             OnHaveApplicant();
@@ -366,16 +372,6 @@ public class FriendPanel : Regist
     }
 
 
-    public static void TryAddFriend()
-    {
-
-    }
-
-    public static void AddFriend()
-    {
-
-    }
-
     public static bool IsFriendFull(bool showBubble)
     {
         if (FriendItems.Count >= MaxFriend)

+ 7 - 5
Assets/Script/Social/PlazaroomMemberItem.cs

@@ -86,6 +86,8 @@ public class PlazaroomMemberItem : MonoBehaviour
         VisitButton.onClick.AddListener(OnVisitButtonClick);
         AddFriendButton.onClick.AddListener(OnAddFriendButtonClick);
         SendMessageButton.onClick.AddListener(OnSendMessageButtonClick);
+
+        FriendPanel.OnFriendListRefresh += RefreshRelationship;
     }
 
     public void Reset(AccountData accountData, DateTime joinedTime)
@@ -102,7 +104,7 @@ public class PlazaroomMemberItem : MonoBehaviour
         AddFriendButton.interactable = true;
         SendMessageButton.SetActive(false);
 
-        RefreshRelationship();
+        RefreshRelationship(FriendPanel.FriendAccountDatas);
     }
 
     private string GetContent()
@@ -124,18 +126,18 @@ public class PlazaroomMemberItem : MonoBehaviour
     }
 
 
-    public void RefreshRelationship()
+    public void RefreshRelationship(List<AccountData> accountDatas)
     {
-        if (IsFriend())
+        if (IsFriend(accountDatas))
         {
             AddFriendButton.SetActive(false);
             SendMessageButton.SetActive(true);
         }
     }
 
-    public bool IsFriend()
+    public bool IsFriend(List<AccountData> accountDatas)
     {
-        return FriendPanel.FriendItems.MyContains(item => AccountData.SerialNumber == item.AccountData.SerialNumber);
+        return accountDatas.MyContains(item => AccountData.SerialNumber == item.SerialNumber);
     }
 
 

+ 13 - 2
Assets/Script/Social/PlazaroomMemberPanel.cs

@@ -55,6 +55,8 @@ public class PlazaroomMemberPanel : Regist
         CloseButton.onClick.AddListener(ClosePanel);
         FriendFilterButton.onClick.AddListener(OnFilterButtonClick);
         FriendListButton.onClick.AddListener(OnFriendListButtonClick);
+
+        FriendPanel.OnFriendListRefresh += OnFriendListRefresh;
     }
 
 
@@ -92,7 +94,7 @@ public class PlazaroomMemberPanel : Regist
         IsFriendFilterOn = true;
         foreach (var memberItem in MemberItemDictionary.Values)
         {
-            if (!memberItem.IsFriend())
+            if (!memberItem.IsFriend(FriendPanel.FriendAccountDatas))
             {
                 memberItem.SetActive(false);
             }
@@ -123,7 +125,7 @@ public class PlazaroomMemberPanel : Regist
         AccountData accountData = new AccountData(nickname, serialNumber);
         memberItem.Reset(accountData, joinedTime);
         MemberItemDictionary.Add(serialNumber, memberItem);
-        if (IsFriendFilterOn && !memberItem.IsFriend())
+        if (IsFriendFilterOn && !memberItem.IsFriend(FriendPanel.FriendAccountDatas))
         {
             memberItem.SetActive(false);
         }
@@ -135,4 +137,13 @@ public class PlazaroomMemberPanel : Regist
         ResourceManager.Save(memberItem);
         MemberItemDictionary.Remove(serialNumber);
     }
+
+
+    private static void OnFriendListRefresh(List<AccountData> accountDatas)
+    {
+        if (IsFriendFilterOn)
+        {
+            EnableFriendFilter();
+        }
+    }
 }