| //--------------------------------------------------------  | 
| //    [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<DungeonBossBriefInfoBehaviour> behaviours = new List<DungeonBossBriefInfoBehaviour>();  | 
|   | 
|         BossHomeModel bossHomeModel { get { return ModelCenter.Instance.GetModel<BossHomeModel>(); } }  | 
|         ElderGodAreaModel elderGodAreadModel { get { return ModelCenter.Instance.GetModel<ElderGodAreaModel>(); } }  | 
|         CrossServerBossModel crossServerBossModel { get { return ModelCenter.Instance.GetModel<CrossServerBossModel>(); } }  | 
|   | 
|         int dataMapId = 0;  | 
|         bool bossesInited = false;  | 
|         List<int> bosses = new List<int>();  | 
|   | 
|         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<CrossServerWin>(false, 2);  | 
|                     break;  | 
|                 case CrossServerBossModel.DATA_MAPID:  | 
|                     WindowCenter.Instance.Open<CrossServerWin>(false, 1);  | 
|                     break;  | 
|                 case BossHomeModel.BOSSHOME_MAPID:  | 
|                     WindowCenter.Instance.Open<FindPreciousFrameWin>(false, 2);  | 
|                     break;  | 
|                 default:  | 
|                     WindowCenter.Instance.Open<FindPreciousFrameWin>(false, 1);  | 
|                     break;  | 
|             }  | 
|         }  | 
|   | 
|   | 
|         public void Display(List<int> _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<GameObject>(prefab);  | 
|                     instance.name = "DungeonBossBriefInfoBehaviour";  | 
|                     instance.transform.SetParentEx(_parent, Vector3.zero, Vector3.zero, Vector3.one);  | 
|                     behaviours.Add(instance.AddMissingComponent<DungeonBossBriefInfoBehaviour>());  | 
|                 }  | 
|             }  | 
|         }  | 
|   | 
|         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);  | 
|         }  | 
|   | 
|     }  | 
|   | 
| }  | 
|   | 
|   | 
|   |