using AX.MessageSystem; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; /// /// 此脚本挂在4GPersonItem上 /// public class FourthGPersonItemCtrl : BaseToggle { public Toggle toggle; public ToggleGroup toggleGroup; public UserData data; public CloneGameObjInfo info; public Text userName; private static List toggles = new List(4); public override void RespondFun(bool value) { if (QuadrupleMode.quadingMode ==false) { PersonSelected(value); //不在四分屏模式时的选中 } else { PersonDisplayed(value); //四分屏模式下的选中 } } // Use this for initialization void Start () { } public void SetPersonInfo(CloneGameObjInfo userInfo,UserData userData) { info = userInfo; data = userData; userName = transform.Find("Label").GetComponent(); userName.text = data.UserInfo.RealName + "(外)"; //判断室内室外 toggle = GetComponent(); toggleGroup = transform.parent.GetComponent(); if (QuadrupleMode.quadingMode == false) //如果当前不在四分屏模式,就添加toggleGroup,不能多选 { toggle.group = toggleGroup; } else //如果当前在四分屏模式下 { if (toggles.Count > 3) //如果已经选了4个 { toggle.interactable = false; //不能再选此toggle了 } MessageDispatcher.AddListener("QuadDisplayMore", DisableToggle); //限制只能选4个 } //toggle.onValueChanged.AddListener(PersonSelected); MessageDispatcher.AddListener("QuadrupleMode", SwitchToggle); } void PersonSelected(bool isON) { //如果没有人员被选中,就取消地图相机跟随 if (!toggleGroup.AnyTogglesOn()) { //取消相机跟随 FourthGCamCtrl.NobodySelected() //清空LookOver的selectedInfo FourthGLookOver.ClearSelectedPerson() MessageDispatcher.SendMessage("4GNobodySelected"); } MapSelectedPair pair = new MapSelectedPair() { gameObjID = info.gameObjID, isOn = isON }; MessageDispatcher.SendMessage("4GPersonSelected", pair); if (isON == true) { //查看按钮设置对象 FourthGLookOver.SetSelectedPerson() MessageDispatcher.SendMessage("FourthGLookOver", info); } } /// /// 是否分屏显示此人员 /// /// 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; //解禁 } } } // Update is called once per frame void Update () { } /// /// 开启、取消四分屏模式,相应的toggle变化控制 /// /// void SwitchToggle(IMessage obj) { var isQuaded = (bool)obj.Data; if (isQuaded) //开启四分屏模式 { toggle.isOn = false; //StartCoroutine(SwitchIntoQuad()); toggle.group = null; toggleGroup.UnregisterToggle(toggle); MessageDispatcher.AddListener("QuadDisplayMore", DisableToggle); //限制只能选4个 toggle.interactable = true; } else //关闭四分屏 { toggles.Clear(); if (toggle) { toggle.group = toggleGroup; //toggle.onValueChanged.RemoveListener(PersonDisplayed); toggle.isOn = false; //取消选中此toggle //toggle.onValueChanged.AddListener(PersonSelected); toggle.interactable = true; //如果之前禁用了此toggle,则恢复 } MessageDispatcher.RemoveListener("QuadDisplayMore", DisableToggle); } } public override void OnDestroy() { base.OnDestroy(); RespondFun(false); if (QuadrupleMode.quadingMode) { MessageDispatcher.AddListener("QuadDisplayMore", DisableToggle); } MessageDispatcher.RemoveListener("QuadrupleMode", SwitchToggle); } } public class MapSelectedPair { public long gameObjID; public bool isOn; }