//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, November 01, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using TableConfig; using UnityEngine; using UnityEngine.UI; namespace Snxxz.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; DungeonModel model { get { return ModelCenter.Instance.GetModel(); } } DemonJarModel demonJarModel { get { return ModelCenter.Instance.GetModel(); } } private bool coinInspire = false; private bool fairyInspire = 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_Confirm.onClick.AddListener(Confirm); m_Cancel.onClick.AddListener(Cancel); m_Close.onClick.AddListener(CloseClick); } 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.gameObject.SetActive(coinInspireConfig != null); coinInspire = IsCoinInspireLimit() ? false : true; fairyInspire = !coinInspire; 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; } 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(); } private void Confirm() { if (fairyInspire) { uint money = 0; switch (fairyInspireConfig.InspireType) { case 1: money += PlayerDatas.Instance.baseData.Gold; break; case 2: money += PlayerDatas.Instance.baseData.GoldPaper; break; case 5: money = PlayerDatas.Instance.baseData.GoldPaper + PlayerDatas.Instance.baseData.Gold; break; } var cost = model.GetDungeonInspireCost(fairyInspireConfig); if (money < cost && !InGuiding()) { WindowCenter.Instance.Open(); } else { var dataMapId = model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID); var isDouble = dataMapId == DemonJarModel.DEMONJAR_MAPID && demonJarModel.isDoubleAward; bool mix = fairyInspireConfig.InspireType == 5 && PlayerDatas.Instance.baseData.GoldPaper < cost && PlayerDatas.Instance.baseData.GoldPaper > 0; var fairyCost = fairyInspireConfig.InspireType == 5 ? cost - PlayerDatas.Instance.baseData.GoldPaper : 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.GoldPaper) : 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.DEMONJAR_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.gameObject.SetActive(fairyInspireConfig != null && fairyInspireConfig.InspireType == 5); if (demonJarModel.isDoubleAward) { var dataMapId = model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID); m_DemonJarDoubleRemind.gameObject.SetActive(dataMapId == DemonJarModel.DEMONJAR_MAPID); } else { m_DemonJarDoubleRemind.gameObject.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("", level * model.GetDungeonInspireUpper(PlayerDatas.Instance.baseData.MapID), "%")); m_CoinInspireCheck.gameObject.SetActive(coinInspire); m_FairyInspireCheck.gameObject.SetActive(fairyInspire); } } }