566 lines
22 KiB
C#
566 lines
22 KiB
C#
|
|
using ET;
|
|
using FairyGUI;
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace ET
|
|
{
|
|
public class FriendUIAwakeSyatem : AwakeSystem<FriendUI>
|
|
{
|
|
public override void Awake(FriendUI self)
|
|
{
|
|
self.Awake();
|
|
}
|
|
}
|
|
public class FriendUIDestroySyatem : DestroySystem<FriendUI>
|
|
{
|
|
public override void Destroy(FriendUI self)
|
|
{
|
|
self.Destroy();
|
|
}
|
|
}
|
|
public class FriendUI : Entity
|
|
{
|
|
public FUI_FriendUI ui;
|
|
|
|
private List<FamilyMemberInfo> familyMemberList = new List<FamilyMemberInfo>();
|
|
private List<FriendInfo> friendList = new List<FriendInfo>();
|
|
private List<RequestAddFriendInfo> requestList = new List<RequestAddFriendInfo>();
|
|
private List<RequestAddFriendInfo> familyRequestList = new List<RequestAddFriendInfo>();
|
|
private Scene zoneScene;
|
|
|
|
public void Awake()
|
|
{
|
|
zoneScene = this.ZoneScene();
|
|
ui = GetParent<FUI_FriendUI>();
|
|
AwakeAsync().Coroutine();
|
|
}
|
|
private async ETVoid AwakeAsync()
|
|
{
|
|
//!临时变量
|
|
int page = 0;
|
|
ui.m_pageList.selectedIndex = 0;
|
|
ShowPage(ui, page);
|
|
|
|
ui.m_pageList.onClickItem.Set(() =>
|
|
{
|
|
page = ui.m_pageList.selectedIndex;
|
|
ShowPage(ui, page);
|
|
});
|
|
|
|
ui.m_friendList.itemRenderer = FriendListItemRender;
|
|
ui.m_famailyList.itemRenderer = FamilyListItemRender;
|
|
|
|
|
|
|
|
//!+列表点击事件
|
|
ui.m_friendList.onClickItem.Set1(context =>
|
|
{
|
|
if (!context.inputEvent.isDoubleClick)
|
|
return;
|
|
int btnIndex = ui.m_friendList.GetChildIndex(context.data as GButton);
|
|
btnIndex = ui.m_friendList.ChildIndexToItemIndex(btnIndex);
|
|
|
|
|
|
FriendInfo friendInfo = friendList[btnIndex];
|
|
Game.EventSystem.Publish_Sync(new ET.EventType.MenuPopup
|
|
{
|
|
list = new Dictionary<string, Action<EventContext>>
|
|
{
|
|
["私聊"] = _ =>
|
|
{
|
|
MainUI.PrivateChat(friendInfo.Id);
|
|
},
|
|
["删除好友"] = _ =>
|
|
{
|
|
DeleteFriend(friendInfo);
|
|
},
|
|
}
|
|
});
|
|
|
|
});
|
|
//!+添加好友
|
|
ui.m_btnFindFriend.self.onClick.Set(() =>
|
|
{
|
|
FUI_TipUI tipUI = TipHelper.OpenUI("请输入您要添加的好友的昵称:", tipType: TipType.DoubleInput);
|
|
tipUI.m_btnYes.self.onClick.Set(TipYesCallBack);
|
|
tipUI.AddEventCallBack(TipYesCallBack);
|
|
|
|
async void TipYesCallBack()
|
|
{
|
|
string str = tipUI.m_IptTxt.text;
|
|
if (str.IsNullOrEmpty())
|
|
{
|
|
return;
|
|
}
|
|
M2C_FindFriend ret = await zoneScene.GetComponent<SessionComponent>().Call<M2C_FindFriend>(new C2M_FindFriend { Name = str });
|
|
if (!ret.Message.IsNullOrEmpty())
|
|
{
|
|
TipHelper.OpenUI(ret.Message);
|
|
return;
|
|
}
|
|
AddFriend(this.zoneScene, ret.Id).Coroutine();
|
|
}
|
|
});
|
|
//!+申请列表
|
|
ui.m_btnRequest.self.onClick.Set(OpRequestUI);
|
|
|
|
#region 家族
|
|
ui.m_famailyList.onClickItem.Set1(context =>
|
|
{
|
|
if (!context.inputEvent.isDoubleClick)
|
|
return;
|
|
int btnIndex = ui.m_famailyList.GetChildIndex(context.data as GButton);
|
|
btnIndex = ui.m_famailyList.ChildIndexToItemIndex(btnIndex);
|
|
|
|
|
|
FamilyMemberInfo memberInfo = familyMemberList[btnIndex];
|
|
Game.EventSystem.Publish_Sync(new ET.EventType.MenuPopup
|
|
{
|
|
list = new Dictionary<string, Action<EventContext>>
|
|
{
|
|
["私聊"] = _ =>
|
|
{
|
|
MainUI.PrivateChat(memberInfo.Id);
|
|
},
|
|
["踢出家族"] = _ =>
|
|
{
|
|
DeleteMember(memberInfo);
|
|
},
|
|
}
|
|
});
|
|
|
|
});
|
|
//!创建家族
|
|
ui.m_btnCreateFamily.self.onClick.Set(() =>
|
|
{
|
|
FUI_TipUI tip = TipHelper.OpenUI("请输入家族名称:", true, TipType.DoubleInput);
|
|
tip.m_btnYes.self.onClick.Set(async () =>
|
|
{
|
|
string str = tip.m_IptTxt.text;
|
|
if (str.IsNullOrEmpty())
|
|
return;
|
|
if (str.Length > 9)
|
|
{
|
|
|
|
TipHelper.OpenUI("名称过长");
|
|
return;
|
|
}
|
|
if (IllegalWordHelper.DetectIllegalWords(str).Count > 0)
|
|
{
|
|
TipHelper.OpenUI("含有敏感字");
|
|
return;
|
|
}
|
|
M2C_CrateFamily ret = await zoneScene.GetComponent<SessionComponent>().Call<M2C_CrateFamily>(new C2M_CrateFamily { Name = str });
|
|
if (!ret.Message.IsNullOrEmpty())
|
|
{
|
|
TipHelper.OpenUI(ret.Message);
|
|
return;
|
|
}
|
|
RefreshFamilyList(ui, ret.FamilyMemberInfoList, null, ret.Info);
|
|
});
|
|
});
|
|
//!解散
|
|
ui.m_btnDeleteFamily.self.onClick.Set(async () =>
|
|
{
|
|
M2C_DeleteFamily ret = await zoneScene.GetComponent<SessionComponent>().Call<M2C_DeleteFamily>(new C2M_DeleteFamily { });
|
|
if (!ret.Message.IsNullOrEmpty())
|
|
{
|
|
TipHelper.OpenUI(ret.Message);
|
|
return;
|
|
}
|
|
ClearPage(ui, 1);
|
|
});
|
|
//!申请加入家族
|
|
ui.m_btnRequestFamily.self.onClick.Set(() =>
|
|
{
|
|
Game.EventSystem.Publish(new ET.EventType.ShowTipUI
|
|
{
|
|
zoneScene = ui.ZoneScene(),
|
|
tip = "请输入您想要查找的家族名称:",
|
|
isClearIpt = true,
|
|
tipType = TipType.DoubleInput,
|
|
okAction = (string inpt) =>
|
|
{
|
|
RequestEnterFamily(inpt).Coroutine();
|
|
},
|
|
}).Coroutine();
|
|
|
|
});
|
|
//!处理申请列表
|
|
ui.m_btnHandleFamilyRequest.self.onClick.Set(OpFamilyRequestUI);
|
|
//!退出家族
|
|
ui.m_btnQuitFamily.self.onClick.Set(QuitFamily);
|
|
//!家族boss
|
|
ui.m_btnFamilyBoss.self.onClick.Set(async () => { await FUIHelper.Open<FUI_FamilyBossUI, FamilyBossUI>(ui.ZoneScene(), FUIPackage.Friend_FamilyBossUI, WindowPos.Center, null); });
|
|
//!申请进入家族
|
|
async ETVoid RequestEnterFamily(string inpt)
|
|
{
|
|
M2C_FindFamily ret = await zoneScene.GetComponent<SessionComponent>().Call<M2C_FindFamily>(new C2M_FindFamily { Name = inpt });
|
|
if (!ret.Message.IsNullOrEmpty())
|
|
{
|
|
Game.EventSystem.Publish(new ET.EventType.ShowTipUI
|
|
{
|
|
zoneScene = ui.ZoneScene(),
|
|
tip = ret.Message,
|
|
tipType = TipType.Single
|
|
}).Coroutine();
|
|
return;
|
|
}
|
|
M2C_RequestEnterFamily _ret = await zoneScene.GetComponent<SessionComponent>().Call<M2C_RequestEnterFamily>(new C2M_RequestEnterFamily { Name = ret.Info.Name });
|
|
if (!_ret.Message.IsNullOrEmpty())
|
|
{
|
|
Game.EventSystem.Publish(new ET.EventType.ShowTipUI
|
|
{
|
|
zoneScene = ui.ZoneScene(),
|
|
tip = _ret.Message,
|
|
tipType = TipType.Single
|
|
}).Coroutine();
|
|
return;
|
|
}
|
|
}
|
|
#endregion
|
|
await ETTask.CompletedTask;
|
|
}
|
|
|
|
private void DeleteMember(FamilyMemberInfo memberInfo)
|
|
{
|
|
FUI_TipUI tipUI = TipHelper.OpenUI("是否从家族移除此成员", tipType: TipType.Double);
|
|
tipUI.m_btnYes.self.onClick.Set(TipYesCallBack);
|
|
tipUI.AddEventCallBack(TipYesCallBack);
|
|
|
|
async void TipYesCallBack()
|
|
{
|
|
M2C_DeleteFamilyMember ret = await zoneScene.GetComponent<SessionComponent>().Call<M2C_DeleteFamilyMember>(new C2M_DeleteFamilyMember { UnitId = memberInfo.Id });
|
|
if (!ret.Message.IsNullOrEmpty())
|
|
{
|
|
TipHelper.OpenUI(ret.Message);
|
|
return;
|
|
}
|
|
ShowFamilyList(ui).Coroutine();
|
|
}
|
|
}
|
|
|
|
private void DeleteFriend(FriendInfo friendInfo)
|
|
{
|
|
FUI_TipUI tipUI = TipHelper.OpenUI("是否删除此好友", tipType: TipType.Double);
|
|
tipUI.m_btnYes.self.onClick.Set(TipYesCallBack);
|
|
tipUI.AddEventCallBack(TipYesCallBack);
|
|
|
|
async void TipYesCallBack()
|
|
{
|
|
M2C_DeleteFriend ret = await zoneScene.GetComponent<SessionComponent>().Call<M2C_DeleteFriend>(new C2M_DeleteFriend { Id = friendInfo.Id });
|
|
if (!ret.Message.IsNullOrEmpty())
|
|
{
|
|
TipHelper.OpenUI(ret.Message);
|
|
return;
|
|
}
|
|
ShowFriendList(ui).Coroutine();
|
|
}
|
|
}
|
|
private void ShowPage(FUI_FriendUI ui, int page)
|
|
{
|
|
ui.m_page.selectedIndex = page;
|
|
switch (page)
|
|
{
|
|
default:
|
|
break;
|
|
case 0:
|
|
//!展示好友
|
|
ShowFriendList(ui).Coroutine();
|
|
break;
|
|
case 1:
|
|
//!展示家族
|
|
ShowFamilyList(ui).Coroutine();
|
|
break;
|
|
}
|
|
}
|
|
private void ClearPage(FUI_FriendUI ui, int page)
|
|
{
|
|
switch (page)
|
|
{
|
|
default:
|
|
break;
|
|
case 0:
|
|
//!好友 不会把
|
|
break;
|
|
case 1:
|
|
//!家族
|
|
familyMemberList.Clear();
|
|
familyRequestList.Clear();
|
|
//!+设置好友虚拟列表
|
|
ui.m_famailyList.numItems = 0;
|
|
ui.m_famailyList.RefreshVirtualList();
|
|
|
|
//!设置信息
|
|
ui.m_txtFamilyName.text = "您还没有家族";
|
|
ui.m_txtFamilyNotice.text = null;
|
|
ui.m_txtFamilyInfo.text = null;
|
|
ui.m_txtFamilyHornor.text = null;
|
|
ui.m_txtFamilyCount.text = null;
|
|
ui.m_txtFamilyLevel.text = null;
|
|
break;
|
|
}
|
|
}
|
|
|
|
#region 家族
|
|
private async ETVoid ShowFamilyList(FUI_FriendUI ui)
|
|
{
|
|
M2C_GetFamily ret = await zoneScene.GetComponent<SessionComponent>().Call<M2C_GetFamily>(new C2M_GetFamily { });
|
|
if (!ret.Message.IsNullOrEmpty())
|
|
{
|
|
TipHelper.OpenUI(ret.Message);
|
|
ClearPage(ui, 1);
|
|
return;
|
|
}
|
|
RefreshFamilyList(ui, ret.FamilyMemberInfoList, ret.RequestInfoList, ret.Info);
|
|
}
|
|
|
|
private void RefreshFamilyList(FUI_FriendUI ui, List<FamilyMemberInfo> familyMemberInfoList, List<RequestAddFriendInfo> requestList, FamilyInfo info)
|
|
{
|
|
familyMemberList.Clear();
|
|
familyRequestList.Clear();
|
|
if (familyMemberInfoList != null)
|
|
familyMemberList.AddRange(familyMemberInfoList);
|
|
if (requestList != null)
|
|
familyRequestList.AddRange(requestList);
|
|
//!+设置好友虚拟列表
|
|
ui.m_famailyList.numItems = familyMemberList.Count;
|
|
ui.m_famailyList.RefreshVirtualList();
|
|
|
|
//!设置信息
|
|
ui.m_txtFamilyName.text = info.Name;
|
|
ui.m_txtFamilyNotice.text = " " + info.Notice;
|
|
string positionStr = null;
|
|
foreach (FamilyPositionMap item in info.PositinMapList)
|
|
{
|
|
switch (item.Position)
|
|
{
|
|
case FamilyPosition.FamilyLeader:
|
|
positionStr += $"族长:{item.Name}";
|
|
break;
|
|
case FamilyPosition.FamilyDeputyLeader:
|
|
positionStr += $"副族长:{item.Name}";
|
|
break;
|
|
case FamilyPosition.FamilyMember:
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
ui.m_txtFamilyInfo.text = positionStr;
|
|
ui.m_txtFamilyHornor.text = $"荣誉值:{info.Hornor}";
|
|
ui.m_txtFamilyCount.text = $"家族人数:{familyMemberList.Count}";
|
|
ui.m_txtFamilyLevel.text = $"等级:{info.Level}";
|
|
}
|
|
private void FamilyListItemRender(int index, GObject item)
|
|
{
|
|
GButton btn = item.asButton;
|
|
FUI_ButtonFamilyItem btnItem = FUI_ButtonFamilyItem.GetFormPool(this.ui, btn);
|
|
FamilyMemberInfo familyInfo = familyMemberList[index];
|
|
btnItem.m_txtName.text = familyInfo.Name;
|
|
btnItem.m_txtLevel.text = familyInfo.Level + "";
|
|
if (!familyInfo.dic.TryGetValue(familyInfo.Id, out int value))
|
|
value = 0;
|
|
btnItem.m_txtContribution.text = value + string.Empty;
|
|
btnItem.m_txtJob.text = TabHelper.GetStrJob(familyInfo.Job);
|
|
string state;
|
|
switch (familyInfo.LastLginTime)
|
|
{
|
|
default:
|
|
state = (DateTime.UtcNow - DateTimeOffset.FromUnixTimeMilliseconds(familyInfo.LastLginTime).DateTime).ToString("hh\\:mm") + "前";
|
|
break;
|
|
case -1:
|
|
state = "未知";
|
|
break;
|
|
case 0:
|
|
state = "在线";
|
|
break;
|
|
}
|
|
btnItem.m_txtState.text = state;
|
|
}
|
|
|
|
private void QuitFamily()
|
|
{
|
|
Game.EventSystem.Publish(new ET.EventType.ShowTipUI
|
|
{
|
|
zoneScene = ui.ZoneScene(),
|
|
tip = "是否退出家族",
|
|
tipType = TipType.Double,
|
|
okAction = async str =>
|
|
{
|
|
M2C_LeaveFamily ret = await zoneScene.GetComponent<SessionComponent>().Call<M2C_LeaveFamily>(new C2M_LeaveFamily { });
|
|
if (!ret.Message.IsNullOrEmpty())
|
|
{
|
|
Game.EventSystem.Publish(new ET.EventType.ShowTipUI
|
|
{
|
|
zoneScene = ui.ZoneScene(),
|
|
tip = ret.Message,
|
|
tipType = TipType.Single
|
|
}).Coroutine();
|
|
}
|
|
},
|
|
}).Coroutine();
|
|
}
|
|
|
|
private void OpFamilyRequestUI()
|
|
{
|
|
if (!(FUIComponent.Instance.Get(FUIPackage.Friend_RequestFriendUI) is FUI_RequestFriendUI ui))
|
|
{
|
|
ui = FUI_RequestFriendUI.CreateInstance(this.ui);
|
|
ui.Name = FUIPackage.Friend_RequestFriendUI;
|
|
FUIComponent.Instance.Add(ui, true);
|
|
ui.m_itemList.SetVirtual();
|
|
}
|
|
ui.m_frame.self.title = "家族申请";
|
|
FUIWindowComponent window = ui.GetOrAddComponent<FUIWindowComponent>();
|
|
if (window.IsShowing) return;
|
|
window.Show();
|
|
//ui.m_Effect.Play();
|
|
window.Window.Center();
|
|
|
|
ui.m_itemList.itemRenderer = RequestFamilyListItemRender;
|
|
//!+设置申请虚拟列表
|
|
ui.m_itemList.numItems = familyRequestList.Count;
|
|
ui.m_itemList.RefreshVirtualList();
|
|
|
|
}
|
|
private void RequestFamilyListItemRender(int index, GObject item)
|
|
{
|
|
GLabel label = item.asLabel;
|
|
FUI_LabelRequestItem labelItem = FUI_LabelRequestItem.GetFormPool(ui, label);
|
|
RequestAddFriendInfo friendInfo = familyRequestList[index];
|
|
labelItem.self.title = $"昵称:{friendInfo.Name}\r\n[size=16]职业:{TabHelper.GetStrJob(friendInfo.Job)} 等级:{friendInfo.Level} 性别:{CharacterHelper.SexToSTring(friendInfo.Sex)}[/size]";
|
|
labelItem.m_btnAgree.onClick.Set(async () =>
|
|
{
|
|
await SendProto(friendInfo.Id, true);
|
|
});
|
|
labelItem.m_btnRefuse.onClick.Set(async () =>
|
|
{
|
|
await SendProto(friendInfo.Id, false);
|
|
});
|
|
|
|
async ETTask SendProto(long id, bool isAgree)
|
|
{
|
|
M2C_HandleEnterFamiy ret = await zoneScene.GetComponent<SessionComponent>().Call<M2C_HandleEnterFamiy>(new C2M_HandleEnterFamiy { Id = id, IsAgree = isAgree });
|
|
if (!ret.Message.IsNullOrEmpty())
|
|
{
|
|
TipHelper.OpenUI(ret.Message);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 好友
|
|
private async ETVoid ShowFriendList(FUI_FriendUI ui)
|
|
{
|
|
M2C_GetFriend response = await zoneScene.GetComponent<SessionComponent>().Call<M2C_GetFriend>(new C2M_GetFriend { });
|
|
if (!response.Message.IsNullOrEmpty())
|
|
{
|
|
TipHelper.OpenUI(response.Message);
|
|
return;
|
|
}
|
|
friendList.Clear();
|
|
requestList.Clear();
|
|
friendList.AddRange(response.FriendInfoList);
|
|
requestList.AddRange(response.RequestInfoList);
|
|
//!+设置好友虚拟列表
|
|
ui.m_friendList.numItems = friendList.Count;
|
|
ui.m_friendList.RefreshVirtualList();
|
|
}
|
|
|
|
public static async ETVoid AddFriend(Scene zoneScene ,long id)
|
|
{
|
|
M2C_AddFriend addret = await zoneScene.GetComponent<SessionComponent>().Call<M2C_AddFriend>(new C2M_AddFriend { Id = id });
|
|
if (!addret.Message.IsNullOrEmpty())
|
|
{
|
|
TipHelper.OpenUI(addret.Message);
|
|
return;
|
|
}
|
|
TipHelper.OpenUI("已经发送好友申请,请等待对方同意");
|
|
}
|
|
private void OpRequestUI()
|
|
{
|
|
if (!(FUIComponent.Instance.Get(FUIPackage.Friend_RequestFriendUI) is FUI_RequestFriendUI ui))
|
|
{
|
|
ui = FUI_RequestFriendUI.CreateInstance(this.ui);
|
|
ui.Name = FUIPackage.Friend_RequestFriendUI;
|
|
FUIComponent.Instance.Add(ui, true);
|
|
ui.m_itemList.SetVirtual();
|
|
}
|
|
FUIWindowComponent window = ui.GetOrAddComponent<FUIWindowComponent>();
|
|
if (window.IsShowing) return;
|
|
window.Show();
|
|
//ui.m_Effect.Play();
|
|
window.Window.Center();
|
|
|
|
ui.m_itemList.itemRenderer = RequestListItemRender;
|
|
//!+设置申请虚拟列表
|
|
ui.m_itemList.numItems = requestList.Count;
|
|
ui.m_itemList.RefreshVirtualList();
|
|
|
|
}
|
|
|
|
private void FriendListItemRender(int index, GObject item)
|
|
{
|
|
GButton btn = item.asButton;
|
|
FUI_ButtonFriendItem btnItem = FUI_ButtonFriendItem.GetFormPool(ui, btn);
|
|
FriendInfo friendInfo = friendList[index];
|
|
btnItem.m_txtName.text = friendInfo.Name;
|
|
btnItem.m_txtLevel.text = friendInfo.Level + "";
|
|
btnItem.m_txtJob.text = TabHelper.GetStrJob(friendInfo.Job);
|
|
string state;
|
|
switch (friendInfo.LastLginTime)
|
|
{
|
|
default:
|
|
state = (DateTime.UtcNow - DateTimeOffset.FromUnixTimeMilliseconds(friendInfo.LastLginTime).DateTime).ToString("hh\\:mm") + "前";
|
|
break;
|
|
case -1:
|
|
state = "未知";
|
|
break;
|
|
case 0:
|
|
state = "在线";
|
|
break;
|
|
}
|
|
btnItem.m_txtState.text = state;
|
|
}
|
|
|
|
|
|
private void RequestListItemRender(int index, GObject item)
|
|
{
|
|
GLabel label = item.asLabel;
|
|
FUI_LabelRequestItem labelItem = FUI_LabelRequestItem.GetFormPool(ui, label);
|
|
RequestAddFriendInfo friendInfo = requestList[index];
|
|
labelItem.self.title = $"昵称:{friendInfo.Name}\r\n[size=16]职业:{TabHelper.GetStrJob(friendInfo.Job)} 等级:{friendInfo.Level} 性别:{CharacterHelper.SexToSTring(friendInfo.Sex)}[/size]";
|
|
labelItem.m_btnAgree.onClick.Set(async () =>
|
|
{
|
|
await SendProto(friendInfo.Id, true);
|
|
});
|
|
labelItem.m_btnRefuse.onClick.Set(async () =>
|
|
{
|
|
await SendProto(friendInfo.Id, false);
|
|
});
|
|
|
|
async ETTask SendProto(long id, bool isAgree)
|
|
{
|
|
M2C_HandleAddFriend ret = await zoneScene.GetComponent<SessionComponent>().Call<M2C_HandleAddFriend>(new C2M_HandleAddFriend { Id = id, IsAgree = isAgree });
|
|
if (!ret.Message.IsNullOrEmpty())
|
|
{
|
|
TipHelper.OpenUI(ret.Message);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
public void Destroy()
|
|
{
|
|
|
|
|
|
}
|
|
}
|
|
}
|