//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, October 31, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class WorldBossWin : Window { [SerializeField] CyclicScroll m_Bosses; [SerializeField] BossIntroduceBehaviour m_BossIntroduce; [SerializeField] Text m_WearyValue; [SerializeField] Button m_Goto; [SerializeField] Button m_KillRecord; [SerializeField] Transform m_SurpassLevel; [SerializeField] RectTransform m_NoDamageTip; [SerializeField] ToggleButton m_Subscribe; [SerializeField] Button m_BuyTimesBtn; [SerializeField] GameObject m_BuyTip; WorldBossModel model { get { return ModelCenter.Instance.GetModel(); } } FindPreciousModel findPreciousModel { get { return ModelCenter.Instance.GetModel(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } BossHomeModel bossHomeModel { get { return ModelCenter.Instance.GetModel(); } } PackModel m_PackModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Goto.AddListener(GotoKillBoss); m_KillRecord.AddListener(ShowKillRecords); m_Subscribe.AddListener(SwitchSubscribeBoss); m_BuyTimesBtn.AddListener(OnBuyTimesBtnDown); } protected override void OnPreOpen() { OnBossWearyValue(); model.UpdateAddTimesRedPoint(); m_BuyTip.SetActive(IsShowBuyTip()); } protected override void OnAfterOpen() { model.bossSelectedEvent += OnBossSelected; findPreciousModel.bossSubscribeChangeEvent += OnSubscribeBoss; model.bossWearyValueChangeEvent += OnBossWearyValue; } protected override void OnPreClose() { model.bossSelectedEvent -= OnBossSelected; findPreciousModel.bossSubscribeChangeEvent -= OnSubscribeBoss; model.bossWearyValueChangeEvent -= OnBossWearyValue; } protected override void OnAfterClose() { } protected override void OnActived() { base.OnActived(); ShowBosses(); } #endregion private bool IsShowBuyTip() { int bossRemainCount = model.GetWorldBossRemainCount(); if(bossRemainCount == model.WorldBossMaxCount) { return false; } ulong activePoint = UIHelper.GetMoneyCnt(15); StoreConfig storeConfig = StoreConfig.Get(351); var price = storeConfig.MoneyNumber; if( (ulong)price > activePoint ) { return false; } int remainBuyCount = BuyItemController.Instance.GetBuyCountLimit(351, PlayerDatas.Instance.baseData.LV); if(remainBuyCount == 0) { return false; } int remainUseCount = ItemConfig.Get(1129).MaxSkillCnt - m_PackModel.GetItemUsedTimesToday(1129); if(remainUseCount == 0) { return false; } return true; } private void OnBuyTimesBtnDown() { WindowCenter.Instance.Open(); model.worldBossAddTimeRedPoint.state = RedPointState.None; m_BuyTip.SetActive(false); } private void ShowBosses() { var bosses = new List(); bosses.AddRange(model.GetWorldBosses()); model.selectedBoss = model.GetRecommendBoss(); m_BossIntroduce.Display(model.selectedBoss, true); m_Bosses.Init(bosses); m_Bosses.MoveToCenter(bosses.IndexOf(model.selectedBoss)); DisplayGotoKillButton(model.selectedBoss); DisplaySubscribe(model.selectedBoss); DisplayTip(model.selectedBoss); } private void ShowKillRecords() { ModelCenter.Instance.GetModel().ViewKillRecordsBoss = model.selectedBoss; WindowCenter.Instance.Open(); } private void GotoKillBoss() { var error = 0; if (TestGotoKillBoss(out error)) { WindowJumpMgr.Instance.ClearJumpData(); WindowCenter.Instance.Close(); MapTransferUtility.Instance.MoveToNPC(model.selectedBoss); } else { ProcessGotoKillBossError(error); } } private void SwitchSubscribeBoss() { if (findPreciousModel.IsBossSubscribed(model.selectedBoss)) { findPreciousModel.RequestDeSubscribeBoss(model.selectedBoss); } else { findPreciousModel.RequestSubscribeBoss(model.selectedBoss, false); } } private void OnSubscribeBoss(int _bossId) { m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(model.selectedBoss); } private void OnBossSelected(int bossId) { m_BossIntroduce.Display(bossId, false); DisplayGotoKillButton(bossId); DisplaySubscribe(bossId); DisplayTip(bossId); } private void OnBossWearyValue() { var remainCount = model.GetWorldBossRemainCount(); var countInfo = string.Format("{0}/{1}", remainCount, model.WorldBossMaxCount); m_WearyValue.text = countInfo; m_WearyValue.color = remainCount == 0 ? UIHelper.GetUIColor(TextColType.Red) : UIHelper.GetUIColor(TextColType.DarkGreen); //m_WearyValue.text = StringUtility.Contact(model.wearyValue, "/", GeneralDefine.bossWearyValues[0] + model.extraBossWearyValue); } private bool TestGotoKillBoss(out int _error) { if (!findPreciousModel.IsBossUnlock(model.selectedBoss)) { _error = 4; return false; } var mapId = PlayerDatas.Instance.baseData.MapID; var mapConfig = MapConfig.Get(mapId); if (mapConfig.MapFBType != (int)MapType.OpenCountry) { _error = 2; return false; } if (CrossServerUtility.IsCrossServer() || ClientCrossServerOneVsOne.isClientCrossServerOneVsOne) { _error = 3; return false; } _error = 0; return true; } private void ProcessGotoKillBossError(int _error) { switch (_error) { case 1: var dataMapId = dungeonModel.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID); var config = DungeonOpenTimeConfig.Get(dataMapId); var tip = string.Empty; if (dataMapId == BossHomeModel.BOSSHOME_MAPID) { var vipLevel = PlayerDatas.Instance.baseData.VIPLv; var vipNeed = bossHomeModel.GetFloorVipRequirement(PlayerDatas.Instance.baseData.dungeonLineId + 1); if (vipLevel < vipNeed) { var moneyNeed = bossHomeModel.GetVipLackCost(PlayerDatas.Instance.baseData.dungeonLineId + 1); var dungeonId = dungeonModel.GetDungeonId(BossHomeModel.BOSSHOME_MAPID, PlayerDatas.Instance.baseData.dungeonLineId); var dungeonConfig = DungeonConfig.Get(dungeonId); tip = Language.Get("QuitRemindBossHome", dungeonConfig.FBName, vipNeed, moneyNeed); } else { //tip = Language.Get(config.ExitDescription); } } else { tip = Language.Get(config.ExitDescription); } if (tip == string.Empty) { WindowCenter.Instance.Close(); MapTransferUtility.Instance.MoveToNPC(model.selectedBoss); } else { ConfirmCancel.ShowPopConfirm( Language.Get("Mail101"), tip, (bool _ok) => { if (_ok) { WindowCenter.Instance.Close(); MapTransferUtility.Instance.MoveToNPC(model.selectedBoss); } } ); } break; case 2: SysNotifyMgr.Instance.ShowTip("InDungeon_CantGo"); break; case 3: SysNotifyMgr.Instance.ShowTip("CrossMap10"); break; case 4: SysNotifyMgr.Instance.ShowTip("BossRealmHint2", RealmConfig.Get(NPCConfig.Get(model.selectedBoss).Realm).LvLarge); break; } } private void DisplayGotoKillButton(int bossId) { } private void DisplaySubscribe(int bossId) { var isUnLocked = findPreciousModel.IsBossUnlock(bossId); m_Subscribe.SetActive(isUnLocked); if (isUnLocked) { m_Subscribe.isOn = findPreciousModel.IsBossSubscribed(bossId); } } private void DisplayTip(int bossId) { if (!findPreciousModel.IsBossUnlock(bossId)) { m_NoDamageTip.SetActive(true); m_SurpassLevel.SetActive(false); } else { m_NoDamageTip.SetActive(false); var dropConfig = NPCDropItemConfig.Get(bossId); var noDrop = dropConfig == null || (dropConfig.MaxLV != 0 && PlayerDatas.Instance.baseData.LV > dropConfig.MaxLV); m_SurpassLevel.SetActive(noDrop); } } } }