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.
335 lines
11 KiB
335 lines
11 KiB
4 years ago
|
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;
|
||
|
}
|
||
|
}
|