zxl
/
CTT
forked from Cal/CTT
1
0
Fork 0
CTT/Unity/Assets/HotfixView/UI/FriendUI/FriendUI.cs

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()
{
}
}
}