Browse Source

增加好友系统

LiuQilin 7 years ago
parent
commit
07bfae3703

+ 67 - 88
Assets/Resource/Prefab/PrefabUI/Canvas.prefab

@@ -1287,7 +1287,6 @@ GameObject:
   m_Component:
   - component: {fileID: 224295870535379978}
   - component: {fileID: 222393433203935230}
-  - component: {fileID: 114124968296634812}
   - component: {fileID: 225912482859049264}
   m_Layer: 5
   m_Name: AF_FriendPanelMask
@@ -1295,7 +1294,7 @@ GameObject:
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 0
+  m_IsActive: 1
 --- !u!1 &1092966110053212
 GameObject:
   m_ObjectHideFlags: 1
@@ -1976,13 +1975,15 @@ GameObject:
   m_Component:
   - component: {fileID: 224216203107484194}
   - component: {fileID: 225520572180302146}
+  - component: {fileID: 222934621534355630}
+  - component: {fileID: 114981110912400860}
   m_Layer: 5
   m_Name: AF_FriendPanelParent
   m_TagString: Untagged
   m_Icon: {fileID: 0}
   m_NavMeshLayer: 0
   m_StaticEditorFlags: 0
-  m_IsActive: 1
+  m_IsActive: 0
 --- !u!1 &1132159904803572
 GameObject:
   m_ObjectHideFlags: 1
@@ -5653,7 +5654,6 @@ GameObject:
   m_Component:
   - component: {fileID: 224273836529947404}
   - component: {fileID: 222456895115334374}
-  - component: {fileID: 114287037454087500}
   - component: {fileID: 225136886829367084}
   m_Layer: 5
   m_Name: AH_MessagePanelMask
@@ -6180,8 +6180,8 @@ GameObject:
   m_Component:
   - component: {fileID: 224635568216794974}
   - component: {fileID: 222255483006336346}
-  - component: {fileID: 114476537727794346}
   - component: {fileID: 225750143153578286}
+  - component: {fileID: 114926422777308756}
   m_Layer: 5
   m_Name: AG_AddFriendPanelMask
   m_TagString: Untagged
@@ -18729,33 +18729,6 @@ MonoBehaviour:
   m_FillAmount: 1
   m_FillClockwise: 1
   m_FillOrigin: 0
---- !u!114 &114124968296634812
-MonoBehaviour:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 1092011122088176}
-  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, g: 0, b: 0, a: 0.7058824}
-  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: 0}
-  m_Type: 0
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
 --- !u!114 &114125677296420010
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -23129,33 +23102,6 @@ MonoBehaviour:
       m_Calls: []
     m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,
       Culture=neutral, PublicKeyToken=null
---- !u!114 &114287037454087500
-MonoBehaviour:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 1376837791294128}
-  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, g: 0, b: 0, a: 0.7058824}
-  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: 0}
-  m_Type: 0
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
 --- !u!114 &114287644342854418
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -29554,33 +29500,6 @@ MonoBehaviour:
   m_ChildForceExpandHeight: 1
   m_ChildControlWidth: 0
   m_ChildControlHeight: 0
---- !u!114 &114476537727794346
-MonoBehaviour:
-  m_ObjectHideFlags: 1
-  m_PrefabParentObject: {fileID: 0}
-  m_PrefabInternal: {fileID: 100100000}
-  m_GameObject: {fileID: 1404512298800908}
-  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, g: 0, b: 0, a: 0.7058824}
-  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: 0}
-  m_Type: 0
-  m_PreserveAspect: 0
-  m_FillCenter: 1
-  m_FillMethod: 4
-  m_FillAmount: 1
-  m_FillClockwise: 1
-  m_FillOrigin: 0
 --- !u!114 &114476700776050892
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -43890,6 +43809,33 @@ MonoBehaviour:
   m_FillAmount: 1
   m_FillClockwise: 1
   m_FillOrigin: 0
+--- !u!114 &114926422777308756
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1404512298800908}
+  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, g: 0, b: 0, a: 0.7058824}
+  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: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
 --- !u!114 &114926465545881592
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -45385,6 +45331,33 @@ MonoBehaviour:
   m_FillAmount: 1
   m_FillClockwise: 1
   m_FillOrigin: 0
+--- !u!114 &114981110912400860
+MonoBehaviour:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1132125090877062}
+  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, g: 0, b: 0, a: 0.7058824}
+  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: 0}
+  m_Type: 0
+  m_PreserveAspect: 0
+  m_FillCenter: 1
+  m_FillMethod: 4
+  m_FillAmount: 1
+  m_FillClockwise: 1
+  m_FillOrigin: 0
 --- !u!114 &114981438069271984
 MonoBehaviour:
   m_ObjectHideFlags: 1
@@ -52679,6 +52652,12 @@ CanvasRenderer:
   m_PrefabParentObject: {fileID: 0}
   m_PrefabInternal: {fileID: 100100000}
   m_GameObject: {fileID: 1508446131469010}
+--- !u!222 &222934621534355630
+CanvasRenderer:
+  m_ObjectHideFlags: 1
+  m_PrefabParentObject: {fileID: 0}
+  m_PrefabInternal: {fileID: 100100000}
+  m_GameObject: {fileID: 1132125090877062}
 --- !u!222 &222937410435012828
 CanvasRenderer:
   m_ObjectHideFlags: 1
@@ -69431,7 +69410,7 @@ CanvasGroup:
   m_PrefabInternal: {fileID: 100100000}
   m_GameObject: {fileID: 1132125090877062}
   m_Enabled: 1
-  m_Alpha: 1
+  m_Alpha: 0
   m_Interactable: 1
   m_BlocksRaycasts: 1
   m_IgnoreParentGroups: 0
@@ -69761,7 +69740,7 @@ CanvasGroup:
   m_PrefabInternal: {fileID: 100100000}
   m_GameObject: {fileID: 1092011122088176}
   m_Enabled: 1
-  m_Alpha: 0
+  m_Alpha: 1
   m_Interactable: 1
   m_BlocksRaycasts: 1
   m_IgnoreParentGroups: 0

+ 10 - 0
Assets/Resource/XML/lan/ChineseSimplified.xml

@@ -233,6 +233,8 @@
     <AG_TipTitle1 desc=""><![CDATA[没有相关玩家,推荐如下]]></AG_TipTitle1>
     <AG_TipTitle2 desc=""><![CDATA[搜索到相关玩家如下]]></AG_TipTitle2>
     <AG_ChangeButtonTitle desc=""><![CDATA[换一个]]></AG_ChangeButtonTitle>
+    <AG_SendApplySucceed desc=""><![CDATA[发送申请成功]]></AG_SendApplySucceed>
+    <AG_ConnectError desc=""><![CDATA[连接服务器失败]]></AG_ConnectError>
     <AG_ApplyButtonTitle desc=""><![CDATA[发送申请]]></AG_ApplyButtonTitle>
     <AH_NicknameTitle desc=""><![CDATA[发送者]]></AH_NicknameTitle>
     <AH_ContentTitle desc=""><![CDATA[内容]]></AH_ContentTitle>
@@ -242,6 +244,14 @@
     <AH_SendMessageButtonTitle desc=""><![CDATA[发送]]></AH_SendMessageButtonTitle>
     <AH_CloseButtonTitle desc=""><![CDATA[关闭]]></AH_CloseButtonTitle>
   </UI>
+  <FriendItem>
+    <MinutesAgo desc=""><![CDATA[[&value&]分钟前]]></MinutesAgo>
+    <HoursAgo desc=""><![CDATA[[&value&]小时前]]></HoursAgo>
+    <DaysAgo desc=""><![CDATA[[&value&]天前]]></DaysAgo>
+    <SendMessageButtonText desc=""><![CDATA[私信]]></SendMessageButtonText>
+    <DeleteButtonText desc=""><![CDATA[删除]]></DeleteButtonText>
+    <DeleteWarning desc=""><![CDATA[删除后无法恢复!确认要继续吗?]]></DeleteWarning>
+  </FriendItem>
   <ApplicantItem>
     <MinutesAgo desc=""><![CDATA[[&value&]分钟前]]></MinutesAgo>
     <HoursAgo desc=""><![CDATA[[&value&]小时前]]></HoursAgo>

+ 10 - 0
Assets/Resource/XML/lan/ChineseTraditional.xml

@@ -233,6 +233,8 @@
     <AG_TipTitle1 desc=""><![CDATA[]]></AG_TipTitle1>
     <AG_TipTitle2 desc=""><![CDATA[]]></AG_TipTitle2>
     <AG_ChangeButtonTitle desc=""><![CDATA[]]></AG_ChangeButtonTitle>
+    <AG_SendApplySucceed desc=""><![CDATA[]]></AG_SendApplySucceed>
+    <AG_ConnectError desc=""><![CDATA[]]></AG_ConnectError>
     <AG_ApplyButtonTitle desc=""><![CDATA[]]></AG_ApplyButtonTitle>
     <AH_NicknameTitle desc=""><![CDATA[]]></AH_NicknameTitle>
     <AH_ContentTitle desc=""><![CDATA[]]></AH_ContentTitle>
@@ -242,6 +244,14 @@
     <AH_SendMessageButtonTitle desc=""><![CDATA[]]></AH_SendMessageButtonTitle>
     <AH_CloseButtonTitle desc=""><![CDATA[]]></AH_CloseButtonTitle>
   </UI>
+  <FriendItem>
+    <MinutesAgo desc=""><![CDATA[]]></MinutesAgo>
+    <HoursAgo desc=""><![CDATA[]]></HoursAgo>
+    <DaysAgo desc=""><![CDATA[]]></DaysAgo>
+    <SendMessageButtonText desc=""><![CDATA[]]></SendMessageButtonText>
+    <DeleteButtonText desc=""><![CDATA[]]></DeleteButtonText>
+    <DeleteWarning desc=""><![CDATA[]]></DeleteWarning>
+  </FriendItem>
   <ApplicantItem>
     <MinutesAgo desc=""><![CDATA[]]></MinutesAgo>
     <HoursAgo desc=""><![CDATA[]]></HoursAgo>

+ 10 - 0
Assets/Resource/XML/lan/English.xml

@@ -233,6 +233,8 @@ Program 水怪
     <AG_TipTitle1 desc=""><![CDATA[]]></AG_TipTitle1>
     <AG_TipTitle2 desc=""><![CDATA[]]></AG_TipTitle2>
     <AG_ChangeButtonTitle desc=""><![CDATA[]]></AG_ChangeButtonTitle>
+    <AG_SendApplySucceed desc=""><![CDATA[]]></AG_SendApplySucceed>
+    <AG_ConnectError desc=""><![CDATA[]]></AG_ConnectError>
     <AG_ApplyButtonTitle desc=""><![CDATA[]]></AG_ApplyButtonTitle>
     <AH_NicknameTitle desc=""><![CDATA[]]></AH_NicknameTitle>
     <AH_ContentTitle desc=""><![CDATA[]]></AH_ContentTitle>
@@ -242,6 +244,14 @@ Program 水怪
     <AH_SendMessageButtonTitle desc=""><![CDATA[]]></AH_SendMessageButtonTitle>
     <AH_CloseButtonTitle desc=""><![CDATA[]]></AH_CloseButtonTitle>
   </UI>
+  <FriendItem>
+    <MinutesAgo desc=""><![CDATA[]]></MinutesAgo>
+    <HoursAgo desc=""><![CDATA[]]></HoursAgo>
+    <DaysAgo desc=""><![CDATA[]]></DaysAgo>
+    <SendMessageButtonText desc=""><![CDATA[]]></SendMessageButtonText>
+    <DeleteButtonText desc=""><![CDATA[]]></DeleteButtonText>
+    <DeleteWarning desc=""><![CDATA[]]></DeleteWarning>
+  </FriendItem>
   <ApplicantItem>
     <MinutesAgo desc=""><![CDATA[]]></MinutesAgo>
     <HoursAgo desc=""><![CDATA[]]></HoursAgo>

BIN
Assets/Resource/Xlsx/language_config.xlsx


+ 3 - 1
Assets/Script/Extension/ExtList.cs

@@ -9,7 +9,9 @@ public static class ExtList
 {
     public static T Roll<T>(this List<T> list)
     {
-        Switch(list, 0, list.Count - 1);
+        T t = list[0];
+        list.RemoveAt(0);
+        list.Add(t);
         return list[0];
     }
 

+ 10 - 0
Assets/Script/Label/LanguageLabel.cs

@@ -231,6 +231,8 @@ public class LanguageLabel
 	public static string UI__AG_TipTitle1 = "UI__AG_TipTitle1";
 	public static string UI__AG_TipTitle2 = "UI__AG_TipTitle2";
 	public static string UI__AG_ChangeButtonTitle = "UI__AG_ChangeButtonTitle";
+	public static string UI__AG_SendApplySucceed = "UI__AG_SendApplySucceed";
+	public static string UI__AG_ConnectError = "UI__AG_ConnectError";
 	public static string UI__AG_ApplyButtonTitle = "UI__AG_ApplyButtonTitle";
 	public static string UI__AH_NicknameTitle = "UI__AH_NicknameTitle";
 	public static string UI__AH_ContentTitle = "UI__AH_ContentTitle";
@@ -240,6 +242,14 @@ public class LanguageLabel
 	public static string UI__AH_SendMessageButtonTitle = "UI__AH_SendMessageButtonTitle";
 	public static string UI__AH_CloseButtonTitle = "UI__AH_CloseButtonTitle";
 	
+	public static string FriendItem = "FriendItem";
+	public static string FriendItem__MinutesAgo = "FriendItem__MinutesAgo";
+	public static string FriendItem__HoursAgo = "FriendItem__HoursAgo";
+	public static string FriendItem__DaysAgo = "FriendItem__DaysAgo";
+	public static string FriendItem__SendMessageButtonText = "FriendItem__SendMessageButtonText";
+	public static string FriendItem__DeleteButtonText = "FriendItem__DeleteButtonText";
+	public static string FriendItem__DeleteWarning = "FriendItem__DeleteWarning";
+	
 	public static string ApplicantItem = "ApplicantItem";
 	public static string ApplicantItem__MinutesAgo = "ApplicantItem__MinutesAgo";
 	public static string ApplicantItem__HoursAgo = "ApplicantItem__HoursAgo";

+ 51 - 5
Assets/Script/Manage/HttpManager.cs

@@ -157,6 +157,7 @@ public class HttpManager : Regist
     public static string ApplyBuddyURL = NewBaseURL + "/buddy/apply";
     public static string DeleteBuddyURL = NewBaseURL + "/buddy/remove";
     public static string AcceptApplicantURL = NewBaseURL + "/buddy/agree";
+    public static string GetRecommendBuddyListURL = NewBaseURL + "/buddy/recommend";
     public static string ReportMailAddress = "bug@dashgame.com";
 
     #endregion
@@ -172,12 +173,12 @@ public class HttpManager : Regist
         //URLRequest.CreateStrURLRequest(true, GetBuddyListURL, requestData, data => Debug.Log("查看好友列表返回结果 " + data), URLRequest.Method.POST);
 
         //URLRequestData requestData = new URLRequestData();
-        //requestData.Add("b", 1709110835792772697);
+        //requestData.Add("b", 1709110839194378775);
         //requestData.Add("u", 1709207727231988804);
         //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
 
         //requestData.Add("b", 1709207727231988804);
-        //requestData.Add("u", 1709110835792772697);
+        //requestData.Add("u", 1709110839194378775);
         //URLRequest.CreateStrURLRequest(true, ApplyBuddyURL, requestData, data => Debug.Log("申请好友返回结果 " + data), URLRequest.Method.POST);
 
         //requestData = new URLRequestData();
@@ -189,6 +190,10 @@ public class HttpManager : Regist
         //requestData.Add("u", 1710065808151506837);
         //requestData.Add("b", 1710065808151506837);
         //URLRequest.CreateStrURLRequest(true, DeleteBuddyURL, requestData, data => Debug.Log("删除/拒绝好友返回结果 " + data), URLRequest.Method.POST);
+
+        //URLRequestData requestData = new URLRequestData();
+        //requestData.Add("u", 1709207727231988804);
+        //URLRequest.CreateStrURLRequest(true, GetRecommendBuddyListURL, requestData, data => Debug.Log("获取推荐好友列表返回结果 " + data), URLRequest.Method.POST);
     }
 
     public void Update()
@@ -1060,8 +1065,49 @@ public class HttpManager : Regist
             requestData,
             jData =>
             {
-                if (jData.Inst_Object.ContainsKey("i"))
+                //Debug.Log(jData.ToJson());
+                if (jData.Inst_Object.ContainsKey("l"))
                 {
+                    jData = jData["l"];
+                    List<AccountData> accountDatas = new List<AccountData>();
+                    for (int i = 0; i < jData.Count; i++)
+                    {
+                        string serialNumber = (string)jData[i]["i"];
+                        string nickname = (string)jData[i]["n"];
+                        string dateString = (string)jData[i]["t"];
+                        accountDatas.Add(new AccountData(nickname, serialNumber, dateString));
+                    }
+                    succeedCallback.Invoke(accountDatas);
+                }
+                else
+                {
+                    failedCallback.Invoke();
+                }
+            },
+            URLRequest.Method.POST
+        );
+    }
+
+    public static void GetRecommendBuddyList(Action<List<AccountData>> succeedCallback, Action failedCallback, string selfSerialNumber = null)
+    {
+        if (selfSerialNumber == null)
+        {
+            selfSerialNumber = SerialNumber;
+        }
+
+        URLRequestData requestData = new URLRequestData();
+        requestData.Add("u", selfSerialNumber);
+        URLRequest.CreateURLRequest
+        (
+            true,
+            GetRecommendBuddyListURL,
+            requestData,
+            jData =>
+            {
+                //Debug.Log(jData.ToJson());
+                if (jData.Inst_Object.ContainsKey("l"))
+                {
+                    jData = jData["l"];
                     List<AccountData> accountDatas = new List<AccountData>();
                     for (int i = 0; i < jData.Count; i++)
                     {
@@ -1131,7 +1177,7 @@ public class HttpManager : Regist
                 try
                 {
                     JsonData jData = JsonMapper.ToObject(data.Trim());
-                    if ((int)jData["error"] == 0)
+                    if ((int)jData[ResultCode.Error] == 0)
                     {
                         succeedCallback.Invoke(jData);
                     }
@@ -1168,7 +1214,7 @@ public class HttpManager : Regist
             {
                 try
                 {
-                    JsonData jData = JsonMapper.ToObject(data);
+                    JsonData jData = JsonMapper.ToObject(data.Trim());
                     if ((int)jData["error"] == 0)
                     {
                         succeedCallback.Invoke();

+ 1 - 0
Assets/Script/Manage/ResourceManager.cs

@@ -54,6 +54,7 @@ public enum ObjType
     GardenInfoItem,
     PlazaroomMemberItem,
     PlazaroomInfoItem,
+    FriendItem,
     SkillItem,
     SignItem,
     RankItem,

+ 47 - 4
Assets/Script/Social/AddFriendPanel.cs

@@ -38,10 +38,16 @@ public class AddFriendPanel : Regist
     public static Transform AddFriendPanelMask;
     public static InputField InputField;
 
+    private static AccountData CurrentRecommendData;
     private static List<AccountData> RecommendDatas = new List<AccountData>();
 
     #endregion
 
+    public override void ThirdInit()
+    {
+        RefreshRecommendBuddyList();
+    }
+
     public override void RegistReference()
     {
         Title = ResourceManager.Get<Text>(ObjectLabel.AG_Title);
@@ -68,19 +74,39 @@ public class AddFriendPanel : Regist
         SearchButton.onClick.AddListener(Search);
         ChangeButton.onClick.AddListener(OnChangeButtonClick);
         CloseButton.onClick.AddListener(ClosePanel);
+    }
+
+
+    private void RefreshRecommendBuddyList()
+    {
+        HttpManager.GetRecommendBuddyList(RefreshRecommendSucceedCallback, () => { });
+    }
 
-        //RecommendDatas.Add(new AccountData("测试账号", "测试ID", "2017-11-22 14:42:11"));
+    private void RefreshRecommendSucceedCallback(List<AccountData> accountDatas)
+    {
+        RecommendDatas = accountDatas;
     }
 
+
     public static void OpenPanel()
     {
+        if (RecommendDatas.Count > 0)
+        {
+            NicknameText.text = RecommendDatas[0].Nickname;
+            CurrentRecommendData = RecommendDatas[0];
+        }
+        else
+        {
+            NicknameText.text = "";
+            ChangeButton.interactable = false;
+        }
+
         TipText.text = Language.GetStr(LanguageLabel.UI__AG_TipTitle0);
-        NicknameText.text = RecommendDatas[0].Nickname;
         ChangeButtonTitle.text = Language.GetStr(LanguageLabel.UI__AG_ChangeButtonTitle);
 
         float preferredWidth = ChangeButtonTitle.preferredWidth;
         float underlineWidth = ChangeButtonUnderline.rectTransform.rect.width;
-        float underlineScale = preferredWidth/underlineWidth;
+        float underlineScale = preferredWidth / underlineWidth;
         ChangeButtonUnderline.transform.SetLocalScaleX(underlineScale);
 
         AddFriendPanelMask.TweenForCG();
@@ -92,6 +118,7 @@ public class AddFriendPanel : Regist
         AddFriendPanelMask.TweenBacCG();
     }
 
+
     private static void Search()
     {
         AudioManager.PlayClip(ResourceLabel.BtnClip);
@@ -112,16 +139,32 @@ public class AddFriendPanel : Regist
         NicknameText.text = RecommendDatas[0].Nickname;
     }
 
+
     private void OnApplyButtonClick()
     {
+        ApplyButton.interactable = false;
         AudioManager.PlayClip(ResourceLabel.BtnClip);
+        HttpManager.ApplyBuddy(CurrentRecommendData.SerialNumber, ApplySucceed, ApplyFailed);
+    }
 
+    private void ApplySucceed()
+    {
+        ApplyButton.interactable = true;
+        Bubble.Show(null, Language.GetStr(LanguageLabel.UI__AG_SendApplySucceed));
     }
 
+    private void ApplyFailed()
+    {
+        ApplyButton.interactable = true;
+        Bubble.Show(null, Language.GetStr(LanguageLabel.UI__AG_ConnectError));
+    }
+
+
     private void OnChangeButtonClick()
     {
         AudioManager.PlayClip(ResourceLabel.BtnClip);
         TipText.text = Language.GetStr(LanguageLabel.UI__AG_TipTitle0);
-        NicknameText.text = RecommendDatas.Roll().Nickname;
+        CurrentRecommendData = RecommendDatas.Roll();
+        NicknameText.text = CurrentRecommendData.Nickname;
     }
 }

+ 5 - 4
Assets/Script/Social/ApplicantItem.cs

@@ -66,6 +66,7 @@ public class ApplicantItem : VirtualScrollRectItem
         AcceptButton.onClick.AddListener(OnAcceptButtonClick);
         RefuseButton.onClick.AddListener(OnRefuseButtonClick);
 
+        VisitButtonTitle.text = ResourceManager.Get<Text>(ObjectLabel.C_CostLab).text;
         Manager.OnLevelChange += level =>
         {
             VisitButtonTitle.text = ResourceManager.Get<Text>(ObjectLabel.C_CostLab).text;
@@ -103,8 +104,8 @@ public class ApplicantItem : VirtualScrollRectItem
 
     public void OnVisitButtonClick()
     {
-        FriendPanel.ClosePanel();
-        CounterAction counterAction = new CounterAction(FriendPanel.OpenPanel);
+        FriendPanel.CloseRootFriendPanel();
+        CounterAction counterAction = new CounterAction(FriendPanel.OpenRootFriendPanel);
         counterAction.Bind(ref VisitManager.OnExitVisteeGarden);
         VisitManager.Visit(ConfigSource.SerialNumber, AccountData.SerialNumber);
     }
@@ -135,7 +136,7 @@ public class ApplicantItem : VirtualScrollRectItem
         {
             Bubble.Show(null, Language.GetStr(LanguageLabel.ApplicantItem__FriendFullSelf));
         }
-        else if ((int)jsonData[ResultCode.Error] == ResultCode.FriendFullOther)
+        else if ((int) jsonData[ResultCode.Error] == ResultCode.FriendFullOther)
         {
             Bubble.Show(null, Language.GetStr(LanguageLabel.ApplicantItem__FriendFullOther));
         }
@@ -143,6 +144,7 @@ public class ApplicantItem : VirtualScrollRectItem
         {
             Bubble.Show(null, Language.GetStr(LanguageLabel.ApplicantItem__AcceptFriendSucceed));
             FriendPanel.SaveApplicantItem(this);
+            FriendPanel.AddFriendItem(AccountData);
         }
     }
 
@@ -160,7 +162,6 @@ public class ApplicantItem : VirtualScrollRectItem
 
     public void RefuseApplicantSucceed()
     {
-        Debug.Log("RefuseApplicantSucceed");
         RefuseButton.interactable = true;
         FriendPanel.SaveApplicantItem(this);
     }

+ 80 - 7
Assets/Script/Social/FriendItem.cs

@@ -1,6 +1,7 @@
-using System.Collections;
+using System;
+using System.Collections;
 using System.Collections.Generic;
-
+using LitJson;
 using UnityEngine;
 using UnityEngine.UI;
 
@@ -61,13 +62,14 @@ public class FriendItem : VirtualScrollRectItem
         SendMessageButton = childDictionary[FriendItemLabel.SendMessageButton].GetComponent<Button>();
         DeleteButton = childDictionary[FriendItemLabel.DeleteButton].GetComponent<Button>();
 
-        //LanguageManager.Add(AcceptButtonText, new MulLanStr(LanguageLabel.ApplicantItem__Accept));
-        //LanguageManager.Add(RefuseButtonText, new MulLanStr(LanguageLabel.ApplicantItem__Deny));
+        LanguageManager.Add(SendMessageButtonText, new MulLanStr(LanguageLabel.FriendItem__SendMessageButtonText));
+        LanguageManager.Add(DeleteButtonText, new MulLanStr(LanguageLabel.FriendItem__DeleteButtonText));
 
-        //VisitButton.onClick.AddListener(OnVisitButtonClick);
-        //AcceptButton.onClick.AddListener(OnAcceptButtonClick);
-        //RefuseButton.onClick.AddListener(OnRefuseButtonClick);
+        VisitButton.onClick.AddListener(OnVisitButtonClick);
+        SendMessageButton.onClick.AddListener(OnSendMessageButtonClick);
+        DeleteButton.onClick.AddListener(OnDeleteButtonClick);
 
+        VisitButtonTitle.text = ResourceManager.Get<Text>(ObjectLabel.C_CostLab).text;
         Manager.OnLevelChange += level =>
         {
             VisitButtonTitle.text = ResourceManager.Get<Text>(ObjectLabel.C_CostLab).text;
@@ -75,4 +77,75 @@ public class FriendItem : VirtualScrollRectItem
 
         return false;
     }
+
+
+    public void Reset(AccountData accountData)
+    {
+        AccountData = accountData;
+        NicknameTitle.text = accountData.Nickname;
+        TimeSpan timeSpan = HttpManager.CurrentDateTime.Subtract(accountData.LastLoginDate);
+        if (timeSpan.TotalMinutes < 60)
+        {
+            string content = Language.GetStr(LanguageLabel.ApplicantItem__MinutesAgo);
+            content = content.Replace(TransferLabel.Value, timeSpan.TotalMinutes.ToString("0"));
+            ContentTitle.text = content;
+        }
+        else if (timeSpan.TotalHours < 24)
+        {
+            string content = Language.GetStr(LanguageLabel.ApplicantItem__HoursAgo);
+            content = content.Replace(TransferLabel.Value, timeSpan.TotalMinutes.ToString("0"));
+            ContentTitle.text = content;
+        }
+        else
+        {
+            string content = Language.GetStr(LanguageLabel.ApplicantItem__DaysAgo);
+            content = content.Replace(TransferLabel.Value, timeSpan.TotalMinutes.ToString("0"));
+            ContentTitle.text = content;
+        }
+    }
+
+
+    public void OnVisitButtonClick()
+    {
+        FriendPanel.CloseRootFriendPanel();
+        CounterAction counterAction = new CounterAction(FriendPanel.OpenRootFriendPanel);
+        counterAction.Bind(ref VisitManager.OnExitVisteeGarden);
+        VisitManager.Visit(ConfigSource.SerialNumber, AccountData.SerialNumber);
+    }
+
+    public void OnDeleteButtonClick()
+    {
+        Bubble.Show
+        (
+            null,
+            Language.GetStr(LanguageLabel.FriendItem__DeleteWarning),
+            null,
+            null,
+            () =>
+            {
+                DeleteButton.interactable = false;
+                HttpManager.DeleteBuddy(AccountData.SerialNumber, DeleteFriendSucceed, DeleteFriendFailed);
+            }
+        );
+    }
+
+    public void DeleteFriendFailed()
+    {
+        DeleteButton.interactable = true;
+        Bubble.Show(null, Language.GetStr(LanguageLabel.ApplicantItem__ConnectError));
+    }
+
+    public void DeleteFriendSucceed()
+    {
+        DeleteButton.interactable = true;
+        FriendPanel.SaveFriendItem(this);
+    }
+
+    public void OnSendMessageButtonClick()
+    {
+        FriendPanel.CloseFriendPanel();
+        MessagePanel.OpenPanel(AccountData);
+        CounterAction counterAction = new CounterAction(FriendPanel.OpenFriendPanel);
+        counterAction.Bind(ref MessagePanel.OnPanelClosed);
+    }
 }

+ 62 - 36
Assets/Script/Social/FriendPanel.cs

@@ -1,4 +1,5 @@
-using System.Collections;
+using System;
+using System.Collections;
 using System.Collections.Generic;
 
 using UnityEngine;
@@ -8,32 +9,6 @@ public class FriendPanel : Regist
 {
     #region Config
 
-    public static int MaxFriend
-    {
-        get { return maxFriend; }
-        set
-        {
-            maxFriend = value;
-            UpdateFriendAmountText();
-        }
-    }
-    public static int maxFriend;
-
-    public static List<VirtualScrollRectItem> FriendItems
-    {
-        get
-        {
-            UpdateFriendAmountText();
-            return friendItems;
-        }
-        set
-        {
-            UpdateFriendAmountText();
-            friendItems = value;
-        }
-    }
-    public static List<VirtualScrollRectItem> friendItems = new List<VirtualScrollRectItem>();
-
     public static Text NicknameTitle;
 	public static Text ContentTitle;
 	public static Text CloseButtonTitle;
@@ -50,6 +25,7 @@ public class FriendPanel : Regist
     public static Toggle ApplicantButton;
 	public static Transform FriendGrid;
     public static Transform ApplicantGrid;
+	public static Transform FriendPanelParentMask;
 	public static Transform FriendPanelMask;
     public static CanvasGroup PanelParentCanvasGroup;
     public static VirtualScrollRectPlus FriendScrollRect;
@@ -59,12 +35,29 @@ public class FriendPanel : Regist
     private static float RefreshApplicantTimer = RefreshApplicantTime;
     private static List<ApplicantItem> ApplicantItems = new List<ApplicantItem>();
 
+    public static int MaxFriend
+    {
+        get { return maxFriend; }
+        set
+        {
+            maxFriend = value;
+            UpdateFriendAmountText();
+        }
+    }
+    public static int maxFriend = 25;
+    public static List<VirtualScrollRectItem> FriendItems = new List<VirtualScrollRectItem>();
+
     public static TweenOutline OpenPanelButtonOutlineTween;
 
     public static int ActivateLevel = TutorialManager.VisitTutorialLevel;
 
     #endregion
 
+    public override void ThirdInit()
+    {
+        RefreshFriendList();
+    }
+
     public override void RegistReference()
     {
         NicknameTitle = ResourceManager.Get<Text>(ObjectLabel.AF_NicknameTitle);
@@ -83,6 +76,7 @@ public class FriendPanel : Regist
         OpenPanelButton = ResourceManager.Get<Button>(ObjectLabel.C_FriendButton);
         FriendGrid = ResourceManager.Get(ObjectLabel.AF_FriendGrid);
         ApplicantGrid = ResourceManager.Get(ObjectLabel.AF_ApplicantGrid);
+        FriendPanelParentMask = ResourceManager.Get(ObjectLabel.AF_FriendPanelParent);
         FriendPanelMask = ResourceManager.Get(ObjectLabel.AF_FriendPanelMask);
         PanelParentCanvasGroup = ResourceManager.Get<CanvasGroup>(ObjectLabel.AF_FriendPanelParent);
         FriendScrollRect = ResourceManager.Get<VirtualScrollRectPlus>(ObjectLabel.AF_FriendScrollRect);
@@ -97,13 +91,14 @@ public class FriendPanel : Regist
         LanguageManager.Add(AddFriendTitle, Language.GetStr(LanguageLabel.UI__AF_AddFriendTitle));
 
         OpenPanelButton.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
+        FriendPanelParentMask.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
         FriendPanelMask.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
         OpenPanelButtonOutlineTween = OpenPanelButton.CreateTweenOutline(0, 201/255f, 1f, true, true, Curve.EaseOutQuad);
         OpenPanelButtonOutlineTween.PingPong = true;
         OpenPanelButtonOutlineTween.IgnoreActiveControll = true;
 
-        OpenPanelButton.onClick.AddListener(OpenPanel);
-        CloseButton.onClick.AddListener(ClosePanel);
+        OpenPanelButton.onClick.AddListener(OpenRootFriendPanel);
+        CloseButton.onClick.AddListener(CloseRootFriendPanel);
         ApplicantButton.onValueChanged.AddListener(OnApplicantToggleClick);
         AddFriendButton.onClick.AddListener(OnAddFriendButtonClick);
         AcceptAllButton.onClick.AddListener(OnAcceptAllButtonClick);
@@ -126,20 +121,39 @@ public class FriendPanel : Regist
     }
 
 
-    private static void UpdateFriendAmountText()
+    public static void AddFriendItem(AccountData accountData)
     {
-        FriendAmountText.text = $"{friendItems.Count}/{maxFriend}";
+        FriendItem item = ResourceManager.Get(FriendItemLabel.FriendItem, Folder.UI, false, ApplicantScrollRect.content, false, ObjType.FriendItem, typeof(FriendItem)).GetComponent<FriendItem>();
+        item.Init();
+        item.Reset(accountData);
+        item.SetParent(FriendScrollRect.content);
+        FriendItems.Add(item);
+        UpdateFriendAmountText();
     }
 
+    public static void SaveFriendItem(FriendItem item)
+    {
+        ResourceManager.Save(item);
+        FriendItems.Remove(item);
+        UpdateFriendAmountText();
+    }
 
-    public static void AddFriendItem()
+    public static void UpdateFriendAmountText()
     {
+        FriendAmountText.text = $"{FriendItems.Count}/{maxFriend}";
+    }
 
+    public static void RefreshFriendList()
+    {
+        HttpManager.GetBuddyList(RefreshFriendListCallback, () => {});
     }
 
-    public static void SaveFriendItem()
+    private static void RefreshFriendListCallback(List<AccountData> accountDatas)
     {
-        
+        foreach (var accountData in accountDatas)
+        {
+            AddFriendItem(accountData);
+        }
     }
 
 
@@ -183,13 +197,25 @@ public class FriendPanel : Regist
     }
 
 
-    public static void OpenPanel()
+    public static void OpenRootFriendPanel()
+    {
+        AudioManager.PlayClip(ResourceLabel.BtnClip);
+        FriendPanelParentMask.TweenForCG();
+    }
+
+    public static void CloseRootFriendPanel()
+    {
+        AudioManager.PlayClip(ResourceLabel.CloseClip);
+        FriendPanelParentMask.TweenBacCG();
+    }
+
+    public static void OpenFriendPanel()
     {
         AudioManager.PlayClip(ResourceLabel.BtnClip);
         FriendPanelMask.TweenForCG();
     }
 
-    public static void ClosePanel()
+    public static void CloseFriendPanel()
     {
         AudioManager.PlayClip(ResourceLabel.CloseClip);
         FriendPanelMask.TweenBacCG();

+ 10 - 3
Assets/Script/Social/MessagePanel.cs

@@ -1,4 +1,5 @@
-using System.Collections;
+using System;
+using System.Collections;
 using System.Collections.Generic;
 
 using UnityEngine;
@@ -8,6 +9,8 @@ public class MessagePanel : Regist
 {
     #region Config
 
+    public static Action OnPanelClosed;
+
     public static Text NicknameTitle;
     public static Text ContentTitle;
     public static Text TimeTitle;
@@ -23,6 +26,8 @@ public class MessagePanel : Regist
     public static InputField InputField;
     public static ScrollRectPlus ScrollRect;
 
+    public static AccountData AccountData;
+
     #endregion
 
     public override void RegistReference()
@@ -42,7 +47,8 @@ public class MessagePanel : Regist
         InputField = ResourceManager.Get<InputField>(ObjectLabel.AH_InputField);
         ScrollRect = ResourceManager.Get<ScrollRectPlus>(ObjectLabel.AH_ScrollRect);
 
-        MessagePanelMask.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
+        TweenRoot tweenRoot = MessagePanelMask.CreateTweenCG(0, 1, 0.25f, false, true, Curve.EaseOutQuad);
+        tweenRoot.OnBackwardFinish += () => { OnPanelClosed.SafeInvoke(); };
 
         LanguageManager.Add(NicknameTitle, new MulLanStr(LanguageLabel.UI__AH_NicknameTitle));
         LanguageManager.Add(ContentTitle, new MulLanStr(LanguageLabel.UI__AH_ContentTitle));
@@ -56,8 +62,9 @@ public class MessagePanel : Regist
         SendMessageButton.onClick.AddListener(SendMessage);
     }
 
-    public static void OpenPanel()
+    public static void OpenPanel(AccountData accountData)
     {
+        AccountData = accountData;
         MessagePanelMask.TweenForCG();
     }
 

+ 2 - 0
Assets/Script/Object/PlazaroomMemberItem.cs → Assets/Script/Social/PlazaroomMemberItem.cs

@@ -77,6 +77,8 @@ public class PlazaroomMemberItem : MonoBehaviour
         AddFriendButton = childDictionary[PlazaroomMemberItemLabel.AddFriendButton].GetComponent<Button>();
         SendMessageButton = childDictionary[PlazaroomMemberItemLabel.SendMessageButton].GetComponent<Button>();
 
+        VisitButtonTitle.text = ResourceManager.Get<Text>(ObjectLabel.C_CostLab).text;
+
         VisitButton.onClick.AddListener(OnVisitButtonClick);
     }
 

+ 0 - 0
Assets/Script/Object/PlazaroomMemberItem.cs.meta → Assets/Script/Social/PlazaroomMemberItem.cs.meta


+ 1 - 0
Assets/Script/Social/VirtualScrollRectItem.cs

@@ -19,6 +19,7 @@ public class VirtualScrollRectItem : MonoBehaviour
             return true;
         }
 
+        Inited = true;
         RectTransform = GetComponent<RectTransform>();
 
         return false;

+ 1 - 1
Assets/Script/Tool/Auxiliary.cs

@@ -184,7 +184,7 @@ public class Auxiliary : Regist
 
         if (Input.GetKeyDown(KeyCode.V))
         {
-            MessagePanel.OpenPanel();
+            //MessagePanel.OpenPanel();
         }
 
         //if (Input.GetKeyDown(KeyCode.B))

+ 1 - 1
Assets/Script/Tool/LabelUtility/SerializeObject.prefab

@@ -55,4 +55,4 @@ MonoBehaviour:
   Languages:
   - {fileID: 4900000, guid: 6bf784d003b5c104e94531afb827212a, type: 3}
   Prefabs:
-  - {fileID: 1729611064873092, guid: 2419a390c1816dd4298ae3170193f310, type: 2}
+  - {fileID: 1626347861987158, guid: 7b82777cdb999ce468b189ea45f9d28d, type: 2}