You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
334 lines
11 KiB
334 lines
11 KiB
using System.Collections; |
|
using System.Collections.Generic; |
|
using UnityEngine; |
|
using UnityEngine.UI; |
|
using AX.NetworkSystem; |
|
|
|
/// <summary> |
|
/// 房间中用户列表的显示与刷新 |
|
/// </summary> |
|
public class MainPanel : MonoBehaviour |
|
{ |
|
/// <summary> |
|
/// Content下的所有子物体 |
|
/// </summary> |
|
public ItemRoleType[] allrolearr; |
|
public Transform Content; |
|
public GameObject RoleItem; |
|
public Sprite RoleReadyBG; |
|
public Sprite RoleWaitBG; |
|
public Sprite RoleSelf; |
|
public Toggle Redytoggle; |
|
/// <summary> |
|
/// 当前房间用户列表 |
|
/// </summary> |
|
public List<UserData> nowUserDataList = new List<UserData>(); |
|
|
|
List<UserData> updateUserDataList = new List<UserData>(); |
|
|
|
|
|
List<Role> rolelist = new List<Role>(); |
|
public static MainPanel Instance; |
|
// Use this for initialization |
|
void Awake() |
|
{ |
|
|
|
if (GameSettings.othersSettings.mode==Mode.DisasterManagement) |
|
{ |
|
return; |
|
} |
|
NetworkManager.Default.SendRequestAsync("GET_ROOM_USERLIST_REQUEST", CurrentUserInfo.room.Id); |
|
|
|
} |
|
void Start() |
|
{ |
|
Instance = this; |
|
} |
|
/// <summary> |
|
/// 当前用户加入房间等待 |
|
/// </summary> |
|
public void startShowItem() |
|
{ |
|
//showAllPanel(); |
|
hideuselessPanel(nowUserDataList); |
|
//因为可能room_enter_sync比awake里的GET_ROOM_USERLIST先执行,所以要把有的都删掉 |
|
RoleItem[] all = GetComponentsInChildren<RoleItem>(); |
|
if (all.Length>0) |
|
{ |
|
for (int i = 0; i < all.Length; i++) |
|
{ |
|
Destroy(all[i].gameObject); |
|
} |
|
} |
|
|
|
CreatRoleItem(nowUserDataList); |
|
var roomUserNum = transform.parent.Find("RoomInfoPanel/Panel/RoonNum/Text"); |
|
roomUserNum.GetComponent<Text>().text = CurrentUserInfo.room.UserList.Count.ToString() + "/32"; |
|
} |
|
/// <summary> |
|
/// 显示Content下的所有panel |
|
/// </summary> |
|
public void showAllPanel() |
|
{ |
|
for (int i = 0; i < Content.childCount; i++) |
|
{ |
|
if (!Content.GetChild(i).gameObject.activeSelf) |
|
{ |
|
Content.GetChild(i).gameObject.SetActive(true); |
|
} |
|
} |
|
} |
|
/// <summary> |
|
/// 隐藏无用的UI(当前房间里没有选择的角色对应的ui) |
|
/// </summary> |
|
public void hideuselessPanel(List<UserData> UdataList) |
|
{ |
|
rolelist.Clear(); |
|
//showAllPanel(); |
|
foreach (var userdata in UdataList) |
|
{ |
|
if (!rolelist.Contains(userdata.Role)) |
|
{ |
|
rolelist.Add(userdata.Role); |
|
} |
|
} |
|
|
|
//ItemRoleType[] allrolearr =Content.GetComponentsInChildren<ItemRoleType>(); |
|
for (int i = 0; i < allrolearr.Length; i++) |
|
{ |
|
if (!rolelist.Contains(allrolearr[i].role)) |
|
{ |
|
allrolearr[i].gameObject.SetActive(false); |
|
} |
|
else |
|
{ |
|
if (!allrolearr[i].gameObject.activeInHierarchy) |
|
{ |
|
allrolearr[i].gameObject.SetActive(true); |
|
} |
|
} |
|
} |
|
} |
|
/// <summary> |
|
/// 后加入角色panel显示 |
|
/// </summary> |
|
/// <param name="udata"></param> |
|
public void ShowNewRolePanel(UserData udata) |
|
{ |
|
for (int i = 0; i < allrolearr.Length; i++) |
|
{ |
|
if (allrolearr[i].role == udata.Role) |
|
{ |
|
if (!allrolearr[i].gameObject.activeInHierarchy) |
|
{ |
|
allrolearr[i].gameObject.SetActive(true); |
|
} |
|
} |
|
} |
|
} |
|
/// <summary> |
|
/// 角色离开房间,并且角色UI被摧毁后调用 |
|
/// </summary> |
|
/// <param name="udata"></param> |
|
public void HideRolePanelWhileLevel(UserData udata) |
|
{ |
|
bool empty = false; |
|
for (int i = 0; i < allrolearr.Length; i++) |
|
{ |
|
if (allrolearr[i].role == udata.Role) |
|
{ |
|
if (allrolearr[i].gameObject.activeInHierarchy) |
|
{ |
|
if (!allrolearr[i].GetComponentInChildren<RoleItem>() && allrolearr[i].panelType == PanelType.Role) |
|
{ |
|
empty = true; |
|
} |
|
} |
|
if (empty) |
|
{ |
|
allrolearr[i].gameObject.SetActive(false); |
|
} |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 创建RoleItem |
|
/// </summary> |
|
public void CreatRoleItem(List<UserData> UdataList) |
|
{ |
|
for (int i = 0; i < UdataList.Count; i++) |
|
{ |
|
for (int j = 0; j < allrolearr.Length; j++) |
|
{ |
|
if (UdataList[i].Role == allrolearr[j].role && allrolearr[j].panelType == PanelType.Role) |
|
{ |
|
GameObject item = Instantiate(RoleItem, allrolearr[j].transform) as GameObject; |
|
item.name = UdataList[i].UserInfo.RealName; |
|
bool isready = UdataList[i].IsReady; |
|
item.GetComponent<RoleItem>().userData = UdataList[i]; |
|
item.transform.Find("NameText").GetComponent<Text>().text = UdataList[i].UserInfo.RealName; |
|
item.transform.Find("RoleText").GetComponent<Text>().text = UdataList[i].Role.ToString(); |
|
PrepareSet(item, isready); |
|
//if (UdataList[i].UserInfo.Id == CurrentUserInfo.mySelf.Id && UdataList[i].UserInfo.Id != CurrentUserInfo.room.Owner.UserInfo.Id) |
|
//{ |
|
// item.GetComponent<Image>().sprite = RoleSelf; |
|
// item.GetComponent<Image>().type = Image.Type.Sliced;//fillMethod = Image.FillMethod.Horizontal; |
|
// // item.GetComponent<ReadyToggle>().Myself = item; |
|
//} |
|
//if (UdataList[i].UserInfo.Id == CurrentUserInfo.mySelf.Id&&UdataList[i].UserInfo.Id == CurrentUserInfo.room.Owner.UserInfo.Id) |
|
//{ |
|
// item.GetComponent<Image>().sprite = RoleSelf; |
|
// item.GetComponent<Image>().type = Image.Type.Sliced; |
|
// item.transform.Find("Image").gameObject.SetActive(true); |
|
// item.transform.Find("ReadyImage").gameObject.SetActive(false); |
|
// item.transform.Find("WaitImage").gameObject.SetActive(false); |
|
//} |
|
} |
|
} |
|
} |
|
} |
|
|
|
|
|
/// <summary> |
|
/// 准备状态设置 |
|
/// </summary> |
|
/// <param name="RoleItem">要设置的RoleItem</param> |
|
/// <param name="ready">要更改的准备状态</param> |
|
void PrepareSet(GameObject RoleItem, bool ready) |
|
{ |
|
if (ready) |
|
{ |
|
RoleItem.GetComponent<Image>().sprite = RoleReadyBG; |
|
RoleItem.transform.Find("ReadyImage").gameObject.SetActive(true); |
|
RoleItem.transform.Find("WaitImage").gameObject.SetActive(false); |
|
} |
|
else |
|
{ |
|
RoleItem.GetComponent<Image>().sprite = RoleWaitBG; |
|
RoleItem.transform.Find("ReadyImage").gameObject.SetActive(false); |
|
RoleItem.transform.Find("WaitImage").gameObject.SetActive(true); |
|
} |
|
//自己,并且自己不是房主 |
|
if (RoleItem.GetComponent<RoleItem>().userData.UserInfo.Id == CurrentUserInfo.mySelf.Id && CurrentUserInfo.mySelf.Id != CurrentUserInfo.room.Owner.UserInfo.Id) |
|
{ |
|
RoleItem.GetComponent<Image>().sprite = RoleSelf; |
|
RoleItem.GetComponent<Image>().type = Image.Type.Sliced; |
|
} |
|
//是房主 |
|
if (RoleItem.GetComponent<RoleItem>().userData.UserInfo.Id == CurrentUserInfo.room.Owner.UserInfo.Id) |
|
{ |
|
RoleItem.transform.Find("ReadyImage").gameObject.SetActive(false); |
|
RoleItem.transform.Find("WaitImage").gameObject.SetActive(false); |
|
|
|
RoleItem.GetComponent<Image>().sprite = RoleSelf; |
|
RoleItem.GetComponent<Image>().type = Image.Type.Sliced; |
|
RoleItem.transform.Find("Image").gameObject.SetActive(true); |
|
|
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 用户离开房间删除该用户UI |
|
/// </summary> |
|
/// <param name="udata"></param> |
|
public void RemoveRoleItem(UserData udata) |
|
{ |
|
RoleItem[] allroleitem = GetComponentsInChildren<RoleItem>(); |
|
for (int i = 0; i < allroleitem.Length; i++) |
|
{ |
|
if (allroleitem[i].userData.UserInfo.Id == udata.UserInfo.Id) |
|
{ |
|
Destroy(allroleitem[i].gameObject); |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 踢出房间更新 |
|
/// </summary> |
|
/// <param name="role"></param> |
|
/// <param name="ulist"></param> |
|
public void delectFormRoomFunction() |
|
{ |
|
//新的用户列表 |
|
updateUserDataList = CurrentUserInfo.room.UserList; |
|
//已画出的RoleItem的用户 |
|
RoleItem[] roleitemarr = Content.GetComponentsInChildren<RoleItem>(); |
|
|
|
|
|
//要被踢出的列表 |
|
List<UserData> kickOutList = new List<UserData>(); |
|
//筛选踢出人员 |
|
for (int i = 0; i < nowUserDataList.Count; i++) |
|
{ |
|
if (!updateUserDataList.Contains(nowUserDataList[i])) |
|
{ |
|
kickOutList.Add(nowUserDataList[i]); |
|
} |
|
} |
|
//从UI上移除 |
|
for (int i = 0; i < kickOutList.Count; i++) |
|
{ |
|
for (int j = 0; j < roleitemarr.Length; j++) |
|
{ |
|
if (roleitemarr[j].userData == kickOutList[i]) |
|
{ |
|
Destroy(roleitemarr[j].gameObject); |
|
} |
|
} |
|
} |
|
nowUserDataList = updateUserDataList; |
|
//ToDo:移除房间请求 |
|
//ToDo:返回大厅请求 |
|
hideuselessPanel(updateUserDataList); |
|
} |
|
|
|
/// <summary> |
|
/// 用户状态更新,接收到用户状态更新消息后调用 |
|
/// </summary> |
|
public void UpdateUserStateFunction(long UdataId, bool isReady) |
|
{ |
|
//更改房间列表里用户的状态 |
|
for (int j = 0; j < CurrentUserInfo.room.UserList.Count; j++) |
|
{ |
|
if (CurrentUserInfo.room.UserList[j].UserInfo.Id == UdataId) |
|
{ |
|
CurrentUserInfo.room.UserList[j].IsReady = isReady; |
|
} |
|
//Debug.Log(CurrentUserInfo.room.UserList[j].IsReady); |
|
} |
|
//当前已经画出的用户 |
|
RoleItem[] roleItemArr = Content.GetComponentsInChildren<RoleItem>(); |
|
//更改UI显示 |
|
for (int i = 0; i < roleItemArr.Length; i++) |
|
{ |
|
if (roleItemArr[i].userData.UserInfo.Id == UdataId) |
|
{ |
|
roleItemArr[i].userData.IsReady = isReady; |
|
PrepareSet(roleItemArr[i].gameObject, isReady); |
|
} |
|
} |
|
} |
|
|
|
/// <summary> |
|
/// 是否除房主外都准备完毕 |
|
/// </summary> |
|
/// <returns></returns> |
|
public bool IsAllReadyExcludeOwner() |
|
{ |
|
bool allready = true; |
|
updateUserDataList = CurrentUserInfo.room.UserList; |
|
for (int i = 0; i < updateUserDataList.Count; i++) |
|
{ |
|
if (updateUserDataList[i].UserInfo.Id != CurrentUserInfo.room.Owner.UserInfo.Id) |
|
{ |
|
if (!updateUserDataList[i].IsReady) |
|
{ |
|
allready = false; |
|
} |
|
} |
|
} |
|
return allready; |
|
} |
|
}
|
|
|