网上演练贵港万达广场(人员密集)
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

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