//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, May 03, 2018 //-------------------------------------------------------- using UnityEngine; using System.Collections; using UnityEngine.UI; using System.Collections.Generic; namespace vnxbqy.UI { public class DungeonBossBriefInfoContainer : MonoBehaviour { [SerializeField] Button m_Switch; [SerializeField] RectTransform m_BossesContainer; [SerializeField] ScrollRect m_ScrollRect; List behaviours = new List(); BossHomeModel bossHomeModel { get { return ModelCenter.Instance.GetModel(); } } ElderGodAreaModel elderGodAreadModel { get { return ModelCenter.Instance.GetModel(); } } CrossServerBossModel crossServerBossModel { get { return ModelCenter.Instance.GetModel(); } } int dataMapId = 0; bool bossesInited = false; List bosses = new List(); public void Display(int _dataMapId) { dataMapId = _dataMapId; bosses.Clear(); bossesInited = false; m_BossesContainer.SetActive(false); m_Switch.RemoveAllListeners(); m_Switch.AddListener(OpenFindPreciousFrameWin); } private void OpenFindPreciousFrameWin() { switch (dataMapId) { case 32080: WindowCenter.Instance.Open(false, 2); break; case CrossServerBossModel.DATA_MAPID: WindowCenter.Instance.Open(false, 1); break; case BossHomeModel.BOSSHOME_MAPID: WindowCenter.Instance.Open(false, 2); break; default: WindowCenter.Instance.Open(false, 1); break; } } public void Display(List _bosses) { //dataMapId = 0; //bosses.Clear(); //bosses.AddRange(_bosses); //bossesInited = false; //m_BossesContainer.SetActive(false); //m_Switch.RemoveAllListeners(); //m_Switch.AddListener(SwitchDungeonBossInfoContainer); } public void Dispose() { m_BossesContainer.SetActive(false); m_Switch.RemoveAllListeners(); } private void ShowBosses() { if (dataMapId > 0) { bosses.Clear(); switch (dataMapId) { case ElderGodAreaModel.ELDERGODAREA_MAPID: bosses.AddRange(elderGodAreadModel.GetElderGodBosses()); break; case BossHomeModel.BOSSHOME_MAPID: var floor = PlayerDatas.Instance.baseData.dungeonLineId + 1; BossHomeData bossHomeData; if (bossHomeModel.TryGetBossHomeData(floor, out bossHomeData)) { for (int i = 0; i < bossHomeData.bossIds.Count; i++) { var bossId = bossHomeData.bossIds[i]; var config = BossHomeConfig.Get(bossId); if (config.MonsterType == 2) { bosses.Add(bossId); } } } break; } } GenerateBehaviour(m_ScrollRect.content.transform as RectTransform, bosses.Count); for (int i = 0; i < behaviours.Count; i++) { var behaviour = behaviours[i]; if (i < bosses.Count) { behaviour.Dispose(); behaviour.Display(bosses[i], OnMoveToBoss); behaviour.SetActive(true); } else { behaviour.SetActive(false); } } m_ScrollRect.verticalNormalizedPosition = 1f; } private void GenerateBehaviour(RectTransform _parent, int _need) { var own = behaviours.Count; if (_need > own) { var gap = _need - own; var prefab = UILoader.LoadPrefab("DungeonBossBriefInfoBehaviour"); for (int i = 0; i < gap; i++) { var instance = Instantiate(prefab); instance.name = "DungeonBossBriefInfoBehaviour"; instance.transform.SetParentEx(_parent, Vector3.zero, Vector3.zero, Vector3.one); behaviours.Add(instance.AddMissingComponent()); } } } public void Unfold(bool _unfold) { if (_unfold) { m_BossesContainer.SetActive(!m_BossesContainer.gameObject.activeInHierarchy); if (m_BossesContainer.gameObject.activeInHierarchy && !bossesInited) { ShowBosses(); bossesInited = true; } } else { m_BossesContainer.SetActive(false); } } private void OnMoveToBoss() { Unfold(false); } private void SwitchDungeonBossInfoContainer() { Unfold(true); } } }