using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using AX.NetworkSystem; /// /// 房间中用户列表的显示与刷新 /// public class MainPanel : MonoBehaviour { /// /// Content下的所有子物体 /// public ItemRoleType[] allrolearr; public Transform Content; public GameObject RoleItem; public Sprite RoleReadyBG; public Sprite RoleWaitBG; public Sprite RoleSelf; public Toggle Redytoggle; /// /// 当前房间用户列表 /// public List nowUserDataList = new List(); List updateUserDataList = new List(); List rolelist = new List(); 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; } /// /// 当前用户加入房间等待 /// public void startShowItem() { //showAllPanel(); hideuselessPanel(nowUserDataList); //因为可能room_enter_sync比awake里的GET_ROOM_USERLIST先执行,所以要把有的都删掉 RoleItem[] all = GetComponentsInChildren(); 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 = CurrentUserInfo.room.UserList.Count.ToString() + "/32"; } /// /// 显示Content下的所有panel /// public void showAllPanel() { for (int i = 0; i < Content.childCount; i++) { if (!Content.GetChild(i).gameObject.activeSelf) { Content.GetChild(i).gameObject.SetActive(true); } } } /// /// 隐藏无用的UI(当前房间里没有选择的角色对应的ui) /// public void hideuselessPanel(List UdataList) { rolelist.Clear(); //showAllPanel(); foreach (var userdata in UdataList) { if (!rolelist.Contains(userdata.Role)) { rolelist.Add(userdata.Role); } } //ItemRoleType[] allrolearr =Content.GetComponentsInChildren(); 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); } } } } /// /// 后加入角色panel显示 /// /// 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); } } } } /// /// 角色离开房间,并且角色UI被摧毁后调用 /// /// 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() && allrolearr[i].panelType == PanelType.Role) { empty = true; } } if (empty) { allrolearr[i].gameObject.SetActive(false); } } } } /// /// 创建RoleItem /// public void CreatRoleItem(List 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().userData = UdataList[i]; item.transform.Find("NameText").GetComponent().text = UdataList[i].UserInfo.RealName; item.transform.Find("RoleText").GetComponent().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().sprite = RoleSelf; // item.GetComponent().type = Image.Type.Sliced;//fillMethod = Image.FillMethod.Horizontal; // // item.GetComponent().Myself = item; //} //if (UdataList[i].UserInfo.Id == CurrentUserInfo.mySelf.Id&&UdataList[i].UserInfo.Id == CurrentUserInfo.room.Owner.UserInfo.Id) //{ // item.GetComponent().sprite = RoleSelf; // item.GetComponent().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); //} } } } } /// /// 准备状态设置 /// /// 要设置的RoleItem /// 要更改的准备状态 void PrepareSet(GameObject RoleItem, bool ready) { if (ready) { RoleItem.GetComponent().sprite = RoleReadyBG; RoleItem.transform.Find("ReadyImage").gameObject.SetActive(true); RoleItem.transform.Find("WaitImage").gameObject.SetActive(false); } else { RoleItem.GetComponent().sprite = RoleWaitBG; RoleItem.transform.Find("ReadyImage").gameObject.SetActive(false); RoleItem.transform.Find("WaitImage").gameObject.SetActive(true); } //自己,并且自己不是房主 if (RoleItem.GetComponent().userData.UserInfo.Id == CurrentUserInfo.mySelf.Id && CurrentUserInfo.mySelf.Id != CurrentUserInfo.room.Owner.UserInfo.Id) { RoleItem.GetComponent().sprite = RoleSelf; RoleItem.GetComponent().type = Image.Type.Sliced; } //是房主 if (RoleItem.GetComponent().userData.UserInfo.Id == CurrentUserInfo.room.Owner.UserInfo.Id) { RoleItem.transform.Find("ReadyImage").gameObject.SetActive(false); RoleItem.transform.Find("WaitImage").gameObject.SetActive(false); RoleItem.GetComponent().sprite = RoleSelf; RoleItem.GetComponent().type = Image.Type.Sliced; RoleItem.transform.Find("Image").gameObject.SetActive(true); } } /// /// 用户离开房间删除该用户UI /// /// public void RemoveRoleItem(UserData udata) { RoleItem[] allroleitem = GetComponentsInChildren(); for (int i = 0; i < allroleitem.Length; i++) { if (allroleitem[i].userData.UserInfo.Id == udata.UserInfo.Id) { Destroy(allroleitem[i].gameObject); } } } /// /// 踢出房间更新 /// /// /// public void delectFormRoomFunction() { //新的用户列表 updateUserDataList = CurrentUserInfo.room.UserList; //已画出的RoleItem的用户 RoleItem[] roleitemarr = Content.GetComponentsInChildren(); //要被踢出的列表 List kickOutList = new List(); //筛选踢出人员 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); } /// /// 用户状态更新,接收到用户状态更新消息后调用 /// 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(); //更改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); } } } /// /// 是否除房主外都准备完毕 /// /// 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; } }