//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, October 18, 2017 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using System.Collections.Generic; namespace vnxbqy.UI { public class TeamMissionBehaviour : MonoBehaviour { [SerializeField] Text m_Mission; [SerializeField] FontColorSizeConfig m_FontColorSize; [SerializeField] Image m_Arrow; [SerializeField] ToggleButton m_MissionButton; public ToggleButton missionButton { get { return m_MissionButton; } } [SerializeField] TeamMissionGroup m_Group; public TeamMissionGroup group { get { return m_Group; } set { m_Group = value; } } int subMissionCount = 0; bool isShowSubMission = false; int dataMapId = 0; int mapEx = 0; List mapExs; List subMissionBehaviours = new List(); TeamModel m_Model; TeamModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } public void SetMission(int _dataMapId, int _mapEx) { dataMapId = _dataMapId; mapEx = _mapEx; mapExs = null; subMissionCount = 0; isShowSubMission = false; if (_dataMapId == TeamModel.NONE_MISSION) { m_Mission.text = Language.Get("No_Target"); } else if (_dataMapId == TeamModel.CURRENTMAP_MISSION) { m_Mission.text = Language.Get("RightHereMap"); } else { var config = TeamTargetConfig.Get(_dataMapId); m_Mission.text = config != null ? config.FBName : ""; } if (model.missionBuf.mapId == dataMapId) { SelectMission(); } else { m_MissionButton.isOn = false; OnSelected(false); } m_MissionButton.RemoveListener(); m_MissionButton.AddListener(SelectMission); m_MissionButton.RemoveOnValueChange(); m_MissionButton.OnValueChange(OnSelected); m_Arrow.SetActive(false); } public void SetMission(int _dataMapId, List _mapExs) { dataMapId = _dataMapId; mapEx = 0; mapExs = _mapExs; subMissionCount = mapExs.Count; isShowSubMission = false; var config = TeamTargetConfig.Get(_dataMapId); m_Mission.text = config != null ? config.FBName : ""; CreateSubMissionBehaviours(this.transform.parent, subMissionCount); for (int i = 0; i < subMissionBehaviours.Count; i++) { var behaviour = subMissionBehaviours[i]; if (i < subMissionCount) { var show = model.IsMissionUnLock(dataMapId, mapExs[i]); behaviour.SetActive(show); behaviour.SetMission(dataMapId, mapExs[i]); } else { behaviour.SetActive(false); } } m_Arrow.SetActive(true); if (model.missionBuf.mapId == dataMapId) { SelectMission(); } else { m_MissionButton.isOn = false; OnSelected(false); } m_MissionButton.RemoveListener(); m_MissionButton.AddListener(SelectMission); m_MissionButton.RemoveOnValueChange(); m_MissionButton.OnValueChange(OnSelected); } private void CreateSubMissionBehaviours(Transform _container, int _needCount) { var toggleButtonGroup = _container.AddMissingComponent(); var nowCount = subMissionBehaviours.Count; if (nowCount < _needCount) { var dif = _needCount - nowCount; var prefab = UILoader.LoadPrefab(StringUtility.Contact("TeamSubMissionBehaviour_", group.pattern)); var mySibling = this.transform.GetSiblingIndex(); for (int i = 0; i < dif; i++) { var instance = Instantiate(prefab); var behaviour = instance.AddMissingComponent(); subMissionBehaviours.Add(behaviour); behaviour.transform.SetParentEx(_container, Vector3.zero, Quaternion.identity, Vector3.one); behaviour.group = this.group; behaviour.missionButton.group = toggleButtonGroup; behaviour.missionButton.isOn = false; behaviour.SetActive(false); behaviour.transform.SetSiblingIndex(++mySibling); } } } private void SelectMission() { if (subMissionCount > 0) { OnSelected(!isShowSubMission); } m_MissionButton.isOn = true; if (group != null) { switch (m_Group.pattern) { case TeamMissionGroup.Pattern.Pattern1: group.NotifySelectMission(dataMapId, mapExs == null ? mapEx : -1); break; case TeamMissionGroup.Pattern.Pattern2: group.NotifySelectMission(dataMapId, mapEx); break; } } if (subMissionCount > 0) { for (int i = 0; i < subMissionBehaviours.Count; i++) { var behaviour = subMissionBehaviours[i]; if (behaviour.mapId == model.missionBuf.mapId) { if (behaviour.mapEx == model.missionBuf.mapEx) { behaviour.SelectMission(); break; } } else { if (m_Group.pattern == TeamMissionGroup.Pattern.Pattern2) { behaviour.SelectMission(); break; } } } } } private void OnSelected(bool _show) { m_Mission.color = m_FontColorSize.GetColorSize(_show ? "Selected" : "UnSelected").color; if (subMissionCount > 0) { isShowSubMission = _show; m_Arrow.transform.localEulerAngles = isShowSubMission ? new Vector3(0, 0, 270) : Vector3.zero; for (int i = 0; i < subMissionBehaviours.Count; i++) { var behaviour = subMissionBehaviours[i]; behaviour.missionButton.isOn = false; behaviour.SetActive(_show && i < subMissionCount); } } } } }