| //--------------------------------------------------------  | 
| //    [Author]:           第二世界  | 
| //    [  Date ]:           Wednesday, November 01, 2017  | 
| //--------------------------------------------------------  | 
|   | 
| using System;  | 
| using System.Collections;  | 
| using System.Collections.Generic;  | 
|   | 
| using UnityEngine;  | 
| using UnityEngine.UI;  | 
|   | 
| namespace vnxbqy.UI  | 
| {  | 
|   | 
|     public class DungeonInspireWin : Window  | 
|     {  | 
|         [SerializeField] Button m_CoinInspire;  | 
|         [SerializeField] RectTransform m_CoinInspireCheck;  | 
|         [SerializeField] Button m_FairyInspire;  | 
|         [SerializeField] RectTransform m_FairyInspireCheck;  | 
|         [SerializeField] Text m_CoinCost;  | 
|         [SerializeField] Text m_FairyCost;  | 
|         [SerializeField] Text m_InspireLevel;  | 
|         [SerializeField] Text m_Remind;  | 
|         [SerializeField] Text m_DemonJarDoubleRemind;  | 
|         [SerializeField] Text m_InspireHurt;  | 
|         [SerializeField] Button m_Confirm;  | 
|         [SerializeField] Button m_Cancel;  | 
|         [SerializeField] Button m_Close;  | 
|   | 
|         [SerializeField] TextEx m_CoinMostTimes;  | 
|         //自动鼓舞  | 
|         [SerializeField] Button m_AutoCoinInspire;  | 
|         [SerializeField] RectTransform m_AutoCoinInspireCheck;  | 
|         [SerializeField] Button m_AutoFairyInspire;  | 
|         [SerializeField] RectTransform m_AutoFairyInspireCheck;  | 
|   | 
|         DungeonModel model { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }  | 
|         DemonJarModel demonJarModel { get { return ModelCenter.Instance.GetModel<DemonJarModel>(); } }  | 
|   | 
|         private bool coinInspire = false;  | 
|         private bool fairyInspire = false;  | 
|         private bool autoCoinInspire = false;  | 
|         private bool autoFairyInspire = false;  | 
|         private bool autoCoinInspireCheck = false;  | 
|         private bool autoFairyInspireCheck = false;  | 
|         private DungeonInspireConfig coinInspireConfig = null;  | 
|         private DungeonInspireConfig fairyInspireConfig = null;  | 
|   | 
|         #region Built-in  | 
|         protected override void BindController()  | 
|         {  | 
|         }  | 
|   | 
|         protected override void AddListeners()  | 
|         {  | 
|             m_CoinInspire.onClick.AddListener(CoinInspire);  | 
|             m_FairyInspire.onClick.AddListener(FairyInspire);  | 
|             m_AutoCoinInspire.onClick.AddListener(AutoCoinInspire);  | 
|             m_AutoFairyInspire.onClick.AddListener(AutoFairyInspire);  | 
|             m_Confirm.onClick.AddListener(TryConfirm);  | 
|             m_Cancel.onClick.AddListener(Cancel);  | 
|             m_Close.onClick.AddListener(CloseClick);  | 
|         }  | 
|   | 
|         void AutoCoinInspire()  | 
|         {  | 
|             autoCoinInspireCheck = !autoCoinInspireCheck;  | 
|             m_AutoCoinInspireCheck.SetActive(autoCoinInspireCheck);  | 
|             LocalSave.SetBool(StringUtility.Contact("AutoCoinInspire_", model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID), "_", PlayerDatas.Instance.PlayerId), autoCoinInspireCheck);  | 
|         }  | 
|   | 
|         void AutoFairyInspire()  | 
|         {  | 
|             autoFairyInspireCheck = !autoFairyInspireCheck;  | 
|             m_AutoFairyInspireCheck.SetActive(autoFairyInspireCheck);  | 
|             LocalSave.SetBool(StringUtility.Contact("AutoFairyInspire_", model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID), "_", PlayerDatas.Instance.PlayerId), autoFairyInspireCheck);  | 
|         }  | 
|   | 
|   | 
|   | 
|         protected override void OnPreOpen()  | 
|         {  | 
|             var mapId = PlayerDatas.Instance.baseData.MapID;  | 
|             var _list = model.GetDungeonInspire(mapId);  | 
|             if (_list == null)  | 
|             {  | 
|                 return;  | 
|             }  | 
|             coinInspireConfig = null;  | 
|             fairyInspireConfig = null;  | 
|   | 
|             for (int i = 0; i < _list.Count; i++)  | 
|             {  | 
|                 if (_list[i].InspireType == 3)  | 
|                 {  | 
|                     coinInspireConfig = _list[i];  | 
|                 }  | 
|                 else if (_list[i].InspireType == 2  | 
|                     || _list[i].InspireType == 1 || _list[i].InspireType == 5)  | 
|                 {  | 
|                     fairyInspireConfig = _list[i];  | 
|                 }  | 
|             }  | 
|   | 
|             m_CoinInspire.SetActive(coinInspireConfig != null);  | 
|             if (coinInspireConfig != null)  | 
|                 m_CoinMostTimes.text = Language.Get(coinInspireConfig.InspireCount == 10 ? "FairyLandMostTimes2" : "FairyLandMostTimes1");  | 
|             m_FairyInspire.SetActive(fairyInspireConfig != null);  | 
|             autoCoinInspireCheck = LocalSave.GetBool(StringUtility.Contact("AutoCoinInspire_", model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID), "_", PlayerDatas.Instance.PlayerId));  | 
|             autoFairyInspireCheck = LocalSave.GetBool(StringUtility.Contact("AutoFairyInspire_", model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID), "_", PlayerDatas.Instance.PlayerId));  | 
|             m_AutoCoinInspireCheck.SetActive(autoCoinInspireCheck);  | 
|             m_AutoFairyInspireCheck.SetActive(autoFairyInspireCheck);  | 
|             coinInspire = IsCoinInspireLimit() ? false : true;  | 
|             fairyInspire = !coinInspire;  | 
|             var dataMapId = model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);  | 
|   | 
|             if (dataMapId == 31080)//仙界秘境  | 
|             {  | 
|                 autoCoinInspire = true;  | 
|                 autoFairyInspire = true;  | 
|             }  | 
|             else  | 
|             {  | 
|                 autoCoinInspire = coinInspire;  | 
|                 autoFairyInspire = fairyInspire;  | 
|             }  | 
|   | 
|             Display();  | 
|             UpdateInspireType();  | 
|             DisplayRemind();  | 
|   | 
|             var singleHurt = model.GetDungeonInspireUpper(mapId);  | 
|             m_InspireHurt.text = Language.Get("InspireRemind", singleHurt, model.GetInspireMaxCount(mapId) * singleHurt);  | 
|   | 
|             model.dungeonInspireLvEvent += DungeonEncourageEvent;  | 
|         }  | 
|   | 
|         protected override void OnAfterOpen()  | 
|         {  | 
|             var _list = model.GetDungeonInspire(PlayerDatas.Instance.baseData.MapID);  | 
|             if (_list == null)  | 
|             {  | 
|                 CloseImmediately();  | 
|                 return;  | 
|             }  | 
|         }  | 
|   | 
|         protected override void OnPreClose()  | 
|         {  | 
|             model.dungeonInspireLvEvent -= DungeonEncourageEvent;  | 
|             WindowCenter.Instance.Open<MainInterfaceWin>();  | 
|         }  | 
|   | 
|         protected override void OnAfterClose()  | 
|         {  | 
|         }  | 
|         #endregion  | 
|   | 
|         private void DungeonEncourageEvent()  | 
|         {  | 
|             var level = model.GetDungeonInspireLevel();  | 
|             if (level >= model.GetInspireMaxCount(PlayerDatas.Instance.baseData.MapID)  | 
|                 && !InGuiding())  | 
|             {  | 
|                 CloseImmediately();  | 
|                 return;  | 
|             }  | 
|   | 
|             //if (IsCoinInspireLimit() && coinInspire)  | 
|             //{  | 
|             //    coinInspire = false;  | 
|             //    fairyInspire = !coinInspire;  | 
|             //}  | 
|   | 
|             DisplayCost();  | 
|             UpdateInspireType();  | 
|         }  | 
|   | 
|         private void CoinInspire()  | 
|         {  | 
|             if (!coinInspire && IsCoinInspireLimit())  | 
|             {  | 
|                 SysNotifyMgr.Instance.ShowTip("Xjmj_CopperInspireFull");  | 
|                 return;  | 
|             }  | 
|             coinInspire = true;  | 
|             fairyInspire = !coinInspire;  | 
|             UpdateInspireType();  | 
|         }  | 
|   | 
|         private void FairyInspire()  | 
|         {  | 
|             if (coinInspireConfig == null)  | 
|             {  | 
|                 return;  | 
|             }  | 
|             fairyInspire = true;  | 
|             coinInspire = false;  | 
|             UpdateInspireType();  | 
|         }  | 
|   | 
|         void TryConfirm()  | 
|         {  | 
|             if ((model.GetDungeonInspireLevel()) >= model.GetInspireMaxCount(PlayerDatas.Instance.baseData.MapID))  | 
|             {  | 
|                 SysNotifyMgr.Instance.ShowTip("Xjmj_InspireMaxLevel");  | 
|                 return;  | 
|             }  | 
|             if (autoCoinInspireCheck || autoFairyInspireCheck)  | 
|             {  | 
|                 demonJarModel.AutoConfirm();  | 
|             }  | 
|             else  | 
|             {  | 
|                 Confirm();  | 
|             }  | 
|         }  | 
|   | 
|         private void Confirm()  | 
|         {  | 
|             if (fairyInspire)  | 
|             {  | 
|                 uint money = 0;  | 
|                 switch (fairyInspireConfig.InspireType)  | 
|                 {  | 
|                     case 1:  | 
|                     case 5:  | 
|                         money += PlayerDatas.Instance.baseData.diamond;  | 
|                         break;  | 
|                 }  | 
|                 var cost = model.GetDungeonInspireCost(fairyInspireConfig);  | 
|                 if (money < cost && !InGuiding())  | 
|                 {  | 
|                     WindowCenter.Instance.Open<RechargeTipWin>();  | 
|                 }  | 
|                 else  | 
|                 {  | 
|                     var dataMapId = model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);  | 
|                     var isDouble = dataMapId == DemonJarModel.DATA_MAPID && demonJarModel.isDoubleAward;  | 
|   | 
|                     bool mix = fairyInspireConfig.InspireType == 5 && PlayerDatas.Instance.baseData.diamond < cost  | 
|                         && PlayerDatas.Instance.baseData.diamond > 0;  | 
|   | 
|                     var fairyCost = fairyInspireConfig.InspireType == 5 ? cost - PlayerDatas.Instance.baseData.diamond : cost;  | 
|                     fairyCost *= isDouble ? 2 : 1;  | 
|   | 
|                     if (fairyCost > 0 && (!model.inspireRemindEffective || !model.inspireNoRemind))  | 
|                     {  | 
|                         ConfirmCancel.ToggleConfirmCancel(Language.Get("Mail101"),  | 
|                             mix ? Language.Get("InspireRemind1", fairyCost, PlayerDatas.Instance.baseData.diamond)  | 
|                             : Language.Get("InspireRemind2", fairyCost),  | 
|                             Language.Get("InspireNoMention"), (bool isOk, bool toggle) =>  | 
|                           {  | 
|                               if (isOk)  | 
|                               {  | 
|                                   SendInspire(fairyInspireConfig.InspireType);  | 
|                               }  | 
|                               model.inspireNoRemind = toggle;  | 
|                               model.inspireRemindEffective = isOk;  | 
|                           }, model.inspireNoRemind);  | 
|                     }  | 
|                     else  | 
|                     {  | 
|                         SendInspire(fairyInspireConfig.InspireType);  | 
|                     }  | 
|                 }  | 
|             }  | 
|             else if (coinInspire)  | 
|             {  | 
|                 if (UIHelper.GetMoneyCnt(3) < (ulong)model.GetDungeonInspireCost(coinInspireConfig)  | 
|                     && !InGuiding())  | 
|                 {  | 
|                     SysNotifyMgr.Instance.ShowTip("Xjmj_InspireNoEnoughGold");  | 
|                 }  | 
|                 else  | 
|                 {  | 
|                     SendInspire(coinInspireConfig.InspireType);  | 
|                 }  | 
|             }  | 
|         }  | 
|   | 
|         void SendInspire(int inspireType)  | 
|         {  | 
|             CA508_tagCMDoFBAction pak = new CA508_tagCMDoFBAction();  | 
|             pak.ActionType = 0;  | 
|             pak.ActionInfo = (uint)inspireType;  | 
|             GameNetSystem.Instance.SendInfo(pak);  | 
|         }  | 
|   | 
|         private void Cancel()  | 
|         {  | 
|             CloseImmediately();  | 
|         }  | 
|   | 
|         private void Display()  | 
|         {  | 
|             DisplayCost();  | 
|         }  | 
|   | 
|         private void DisplayCost()  | 
|         {  | 
|             var dataMapId = model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);  | 
|             var isDouble = dataMapId == DemonJarModel.DATA_MAPID && demonJarModel.isDoubleAward;  | 
|   | 
|             if (coinInspireConfig != null)  | 
|             {  | 
|                 m_CoinCost.text = Language.Get("FairyLand_Func9", model.GetDungeonInspireCost(coinInspireConfig) * (isDouble ? 2 : 1), coinInspireConfig.InspireCount);  | 
|             }  | 
|             if (fairyInspireConfig != null)  | 
|             {  | 
|                 m_FairyCost.text = Language.Get("FairyLand_Func10", model.GetDungeonInspireCost(fairyInspireConfig) * (isDouble ? 2 : 1));  | 
|             }  | 
|         }  | 
|   | 
|         void DisplayRemind()  | 
|         {  | 
|             m_Remind.SetActive(fairyInspireConfig != null && fairyInspireConfig.InspireType == 5);  | 
|   | 
|             if (demonJarModel.isDoubleAward)  | 
|             {  | 
|                 var dataMapId = model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);  | 
|                 m_DemonJarDoubleRemind.SetActive(dataMapId == DemonJarModel.DATA_MAPID);  | 
|             }  | 
|             else  | 
|             {  | 
|                 m_DemonJarDoubleRemind.SetActive(false);  | 
|             }  | 
|         }  | 
|   | 
|         bool InGuiding()  | 
|         {  | 
|             if (NewBieCenter.Instance.inGuiding  | 
|                 && NewBieCenter.Instance.currentGuide == GeneralDefine.fairyLandGuideId)  | 
|             {  | 
|                 return true;  | 
|             }  | 
|             return false;  | 
|         }  | 
|   | 
|         bool IsCoinInspireLimit()  | 
|         {  | 
|             if (coinInspireConfig != null)  | 
|             {  | 
|                 return model.GetDungeonInspireLevel(3) >= coinInspireConfig.InspireCount;  | 
|             }  | 
|             return true;  | 
|         }  | 
|   | 
|         private void UpdateInspireType()  | 
|         {  | 
|             var level = model.GetDungeonInspireLevel();  | 
|             m_InspireLevel.text = level == 0 ? Language.Get("FairyLand_Func4")  | 
|                 : Language.Get("HaveInspired", StringUtility.Contact("<color=#109d06>",  | 
|                 level * model.GetDungeonInspireUpper(PlayerDatas.Instance.baseData.MapID), "%</color>"));  | 
|             m_CoinInspireCheck.SetActive(coinInspire);  | 
|             m_AutoCoinInspire.SetActive(autoCoinInspire);  | 
|             m_FairyInspireCheck.SetActive(fairyInspire);  | 
|             m_AutoFairyInspire.SetActive(autoFairyInspire);  | 
|         }  | 
|     }  | 
|   | 
| }  | 
|   | 
|   | 
|   | 
|   |