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