using AX.MessageSystem; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class TransferPersonItemFour : BaseToggle { public Toggle toggle; //public ToggleGroup toggleGroup; public UserData data; public CloneGameObjInfo info; public Text userName; public static List toggles = new List(4); public void SetPersonInfo(CloneGameObjInfo userInfo, UserData userData) { info = userInfo; data = userData; userName = transform.Find("Label").GetComponent(); userName.text = data.UserInfo.RealName + "(外)"; //判断室内室外 toggle = GetComponent(); if (toggles.Count > 3) { toggle.interactable = false; } MessageDispatcher.AddListener("QuadDisplayMore", DisableToggle); } public override void OnDestroy() { base.OnDestroy(); //删除前先看自己是否被选中 if (toggle.isOn == true) { //如果被选中先执行取消选中的逻辑 MessageDispatcher.SendMessage("CancelQuadDisplay", info);//取消相机 toggles.Remove(toggle); if (toggles.Count < 4) { MessageDispatcher.SendMessage("QuadDisplayMore", true); //没有选到4个人,则可以再选中 } } MessageDispatcher.RemoveListener("QuadDisplayMore", DisableToggle); } public override void RespondFun(bool value) { PersonDisplayed(value); } /// /// 是否分屏显示此人员 /// /// void PersonDisplayed(bool isON) { if (isON) //被选中显示 { //创建相机 MessageDispatcher.SendMessage("QuadDisplay", info); toggles.Add(toggle); if (toggles.Count > 3) //已经选了4个显示人员 { MessageDispatcher.SendMessage("QuadDisplayMore", false); //禁用其他toggle,不能再选人员了 } } else //被取消选中 { if (toggles.Contains(toggle)) { //取消相机 MessageDispatcher.SendMessage("CancelQuadDisplay", info); toggles.Remove(toggle); if (toggles.Count < 4) { MessageDispatcher.SendMessage("QuadDisplayMore", true); //没有选到4个人,则可以再选中 } } } } void DisableToggle(IMessage obj) { var canMore = (bool)obj.Data; //是否可以选中更多 if (canMore == false) //不能再选中了 { if (toggle && toggle.isOn == false) //如果此按钮没被选中 { toggle.interactable = false; //则不可以再选中了 } } else //可以再选中 { if (toggle && toggle.interactable == false) //如果当前toggle被禁用 { toggle.interactable = true; //解禁 } } } IEnumerator BeforeDestroy() { //等待取消选中逻辑完成 yield return new WaitForEndOfFrame(); //取消注册消息 MessageDispatcher.RemoveListener("QuadDisplayMore", DisableToggle); } }