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; } }