//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, September 12, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using Snxxz.UI; namespace Snxxz.UI { public class NormalDungeonEntranceWin : Window { [SerializeField] Image m_EntranceBG; [Header("BaseInfo")] [SerializeField] Text m_DungeonTitle; [SerializeField] RawImage m_BossPortrayal; [SerializeField] DungeonBreifInfo m_BreifInfo; [Header("EnterCD")] [SerializeField] DungeonEnterInfo m_EnterCdContainer; [Header("Sweep")] [SerializeField] Text m_SweepLevelNeed; [SerializeField] ItemBehaviour m_SweepContainer; [SerializeField] Text m_SweepCostCount; [Header("DungeonTicket")] [SerializeField] Transform m_TicketContainer; [SerializeField] ItemBehaviour m_DungeonTicketItem; [Header("Button")] [SerializeField] ButtonEx m_Sweep; [SerializeField] RectTransform m_ContainerBtns; [SerializeField] ButtonEx m_GroupStart; [SerializeField] ButtonEx m_SingleStart; [SerializeField] ButtonEx m_AutoGroupStart; [SerializeField] ButtonEx m_Group; [SerializeField] Button m_CloseWin; [SerializeField] RectTransform m_ContainerGroup; [SerializeField] RectTransform m_FairyLandTipBehaviour; [SerializeField] Text m_FairyLandTip; [SerializeField] Text m_WhyjEnterRule;//娲皇遗迹 [SerializeField] Text WhyjEnterFloor;//娲皇遗迹 [SerializeField] Button m_RuletBtn;//规则说明按钮 DungeonModel model { get { return ModelCenter.Instance.GetModel(); } } TeamModel teamModel { get { return ModelCenter.Instance.GetModel(); } } PackModel playerPack { get { return ModelCenter.Instance.GetModel(); } } DungeonNuwaModel dungeonNuwaModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_GroupStart.AddListener(ChallengeDungeonGroup); m_SingleStart.AddListener(ChallengeDungeon); m_AutoGroupStart.AddListener(AutoGroupChallenge); m_Sweep.AddListener(SweepDungeon); m_Group.AddListener(OpenGroup); m_CloseWin.AddListener(CloseClick); m_RuletBtn.AddListener(RuletBtn); } protected override void OnPreOpen() { DrawDungeonBaseInfo(); DrawSweepInfo(); DrawDungeonTicketInfo(); DisplayFairyLandTip(); m_BreifInfo.SetDungeonInfo(model.currentDungeon); if (DungeonNuwaModel.DATAMAPID == model.currentDungeon.mapId)//娲皇遗迹 { m_WhyjEnterRule.gameObject.SetActive(true); WhyjEnterFloor.gameObject.SetActive(true); m_WhyjEnterRule.text = Language.Get("WhyjEnterRule"); int floor = dungeonNuwaModel.GetChallengeFloor(); WhyjEnterFloor.text = Language.Get("WhyjEnterFloor", floor); } else { m_WhyjEnterRule.gameObject.SetActive(false); WhyjEnterFloor.gameObject.SetActive(false); } if (model.currentDungeon.mapId == DungeonNuwaModel.DATAMAPID) { m_RuletBtn.gameObject.SetActive(true); } else { m_RuletBtn.gameObject.SetActive(false); } } protected override void OnAfterOpen() { playerPack.refreshItemCountEvent += OnPackageItemChange; model.dungeonEnterCoolDownUpdate += DungeonEnterCoolDownUpdate; m_EnterCdContainer.OnCoolDowndComplete += DungeonEnterCoolDownUpdate; PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshInfoEvent; PlayerDatas.Instance.worldLevelUpdateEvent += OnWorldLevelRefresh; FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChangeEvent; } protected override void OnPreClose() { playerPack.refreshItemCountEvent -= OnPackageItemChange; model.dungeonEnterCoolDownUpdate -= DungeonEnterCoolDownUpdate; m_EnterCdContainer.OnCoolDowndComplete -= DungeonEnterCoolDownUpdate; PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshInfoEvent; PlayerDatas.Instance.worldLevelUpdateEvent -= OnWorldLevelRefresh; FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChangeEvent; } protected override void OnAfterClose() { } protected override void LateUpdate() { base.LateUpdate(); } #endregion private void OpenGroup() { var openGroup = m_ContainerGroup.gameObject.activeSelf; m_ContainerGroup.gameObject.SetActive(!openGroup); } private void DungeonEnterCoolDownUpdate() { var dungeonId = model.GetDungeonId(model.currentDungeon); var dungeonConfig = DungeonConfig.Get(dungeonId); bool inCoolDown = model.ContainsDungeonEnter(dungeonConfig.DataMapID) && model.IsEnterCountDown(dungeonConfig.DataMapID); m_EnterCdContainer.gameObject.SetActive(inCoolDown); m_ContainerBtns.gameObject.SetActive(!inCoolDown); DisplayFairyLandTip(); } private void DrawDungeonBaseInfo() { var dungeonId = model.GetDungeonId(model.currentDungeon); var dungeonConfig = DungeonConfig.Get(dungeonId); var dungeonOpenTimeConfig = DungeonOpenTimeConfig.Get(model.currentDungeon.mapId); var fbType = dungeonOpenTimeConfig.FBType; m_GroupStart.gameObject.SetActive(fbType == 2 || fbType == 3); m_SingleStart.gameObject.SetActive(fbType == 1 || fbType == 2); m_AutoGroupStart.gameObject.SetActive(fbType == 2 || fbType == 3); m_ContainerGroup.gameObject.SetActive(false); m_Group.gameObject.SetActive(fbType == 2 || fbType == 3); m_EntranceBG.SetSprite(dungeonOpenTimeConfig.PanelImg); m_DungeonTitle.text = dungeonConfig.FBName; DungeonEnterCoolDownUpdate(); m_BossPortrayal.gameObject.SetActive(true); if (dungeonConfig.BossActorID != null && dungeonConfig.BossActorID.Length > 0) { if (dungeonConfig.BossActorID[0] == 0) { m_BossPortrayal.gameObject.SetActive(false); } else { UI3DModelExhibition.Instance.ShowNPC(dungeonConfig.BossActorID[0], Vector3.zero, m_BossPortrayal); } } } private void DrawSweepInfo() { var dungeonId = model.GetDungeonId(model.currentDungeon); var dungeonConfig = DungeonConfig.Get(dungeonId); var playerLevel = PlayerDatas.Instance.baseData.LV; var sweepLevelLimit = dungeonConfig.SweepLVLimit; if (dungeonConfig.SweepLVLimit == 0) { m_Sweep.gameObject.SetActive(false); m_SweepContainer.gameObject.SetActive(false); m_SweepLevelNeed.gameObject.SetActive(false); } else { m_SweepLevelNeed.gameObject.SetActive(false); m_SweepContainer.gameObject.SetActive(false); m_Sweep.gameObject.SetActive(true); } } private void DrawDungeonTicketInfo() { var config = DungeonConfig.Get(model.GetDungeonId(model.currentDungeon)); if (config == null || config.TicketID == 0) { m_TicketContainer.gameObject.SetActive(false); } else { m_TicketContainer.gameObject.SetActive(true); m_DungeonTicketItem.showCount = true; DungeonRecord record; int _times = 0; if (model.TryGetRecord(model.currentDungeon.mapId, out record)) { _times = record.enterTimes; } m_DungeonTicketItem.SetItem(model.GetTicketCost(model.currentDungeon.mapId, model.currentDungeon.lineId)); } } private void SweepDungeon() { var sweepError = 0; if (TestSweepDungeon(out sweepError)) { model.RequestSweep(model.currentDungeon); } else { ProcessSweepDungeonError(sweepError); } } private void ChallengeDungeon() { switch (model.currentDungeon.mapId) { case 51010://娲皇遗迹 DungeonRecord record; model.TryGetRecord(51010, out record); var entertimes = model.GetEnterTimes(51010); var totalTimes = model.GetTotalTimes(51010); if (entertimes >= totalTimes) { ProcessEnterDungeonError(4); return; } var floor = dungeonNuwaModel.GetChallengeFloor(); model.currentDungeon = new Dungeon(DungeonNuwaModel.DATAMAPID, floor - 1); break; } var error = 0; if (model.TestChallange(model.currentDungeon, out error)) { if (GeneralDefine.dungeonCanUseMoneyIds.Contains(model.currentDungeon.mapId)) { CheckUseMoneyDungeon(model.currentDungeon); } else { model.SingleChallenge(model.currentDungeon); } } else { if (GeneralDefine.dungeonCanUseMoneyIds.Contains(model.currentDungeon.mapId) && error == 5) { CheckUseMoneyDungeon(model.currentDungeon); } else { ProcessEnterDungeonError(error); } } } private void CheckUseMoneyDungeon(Dungeon _dungeon) { var mapId = _dungeon.mapId; var mapConfig = MapConfig.Get(mapId); if ((MapType)mapConfig.MapFBType == MapType.MultipleFB) { var teamModel = ModelCenter.Instance.GetModel(); if (teamModel.myTeam.inTeam) { ConfirmCancel.ShowPopConfirm( Language.Get("Mail101"), Language.Get("PlayerExitTeamSolo"), (bool _ok) => { if (_ok) { teamModel.RequestExitTeam(); Clock.AlarmAt(DateTime.Now + new TimeSpan(1 * TimeSpan.TicksPerSecond), () => { OpenDungeonSuppliesLack(_dungeon); } ); } } ); return; } } OpenDungeonSuppliesLack(_dungeon); } void OpenDungeonSuppliesLack(Dungeon _dungeon) { switch (_dungeon.mapId) { case 31080: DungeonSuppliesLackWin.lackType = DungeonSuppliesLackWin.LackType.FairyLand; WindowCenter.Instance.Open(); break; case 31140: DungeonSuppliesLackWin.lackType = DungeonSuppliesLackWin.LackType.SingleIceCrystal; WindowCenter.Instance.Open(); break; } } private void AutoGroupChallenge() { var error = 0; if (model.TestChallange(model.currentDungeon, out error)) { teamModel.RequestAutoMatchTeam(new TeamMission(model.currentDungeon.mapId, model.currentDungeon.lineId)); WindowCenter.Instance.Open(false, 1); } else { ProcessEnterDungeonError(error); } } private void ChallengeDungeonGroup() { var error = 0; if (model.TestChallange(model.currentDungeon, out error)) { model.GroupChallenge(model.currentDungeon); } else { ProcessEnterDungeonError(error); } } private void ProcessEnterDungeonError(int _error) { var dungeonId = model.GetDungeonId(model.currentDungeon); var dungeonConfig = DungeonConfig.Get(dungeonId); switch (_error) { case 1: SysNotifyMgr.Instance.ShowTip("DungeoninCoolTime"); break; case 2: SysNotifyMgr.Instance.ShowTip("DemonJar_Text2"); break; case 4: SysNotifyMgr.Instance.ShowTip("GeRen_chenxin_268121", dungeonConfig.MapID); break; case 5: ModelCenter.Instance.GetModel().SetChinItemModel(dungeonConfig.TicketID); break; case 6: SysNotifyMgr.Instance.ShowTip("CrossMap10"); break; } } private bool TestSweepDungeon(out int _error) { var dungeonId = model.GetDungeonId(model.currentDungeon); var dungeonConfig = DungeonConfig.Get(dungeonId); var playerLevel = PlayerDatas.Instance.baseData.LV; var dungeonGrade = model.GetGrade(model.currentDungeon); var dataMapId = model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID); if (dataMapId == model.currentDungeon.mapId) { _error = 5; return false; } if (dungeonGrade <= 0 && playerLevel < dungeonConfig.SweepLVLimit) { _error = 1; return false; } if (dungeonGrade <= 0) { _error = 2; return false; } if (playerLevel < dungeonConfig.SweepLVLimit) { _error = 3; return false; } if (model.IsEnterCountDown(model.currentDungeon.mapId)) { _error = 4; return false; } _error = 0; return true; } private void ProcessSweepDungeonError(int _error) { var dungeonId = model.GetDungeonId(model.currentDungeon); var dungeonConfig = DungeonConfig.Get(dungeonId); switch (_error) { case 1: SysNotifyMgr.Instance.ShowTip("Unlock_BJMopUp2", dungeonConfig.SweepLVLimit); break; case 2: SysNotifyMgr.Instance.ShowTip("Unlock_BJMopUp1"); break; case 3: SysNotifyMgr.Instance.ShowTip("Unlock_BJMopUp3", dungeonConfig.SweepLVLimit); break; case 4: SysNotifyMgr.Instance.ShowTip("DungeoninCoolTime"); break; case 5: SysNotifyMgr.Instance.ShowTip("SweepFB_1"); break; } } private void OnPackageItemChange(PackType _type, int _index, int _itemId) { if (_type != PackType.Item) { return; } if (_itemId == m_SweepContainer.itemId) { var sweepCost = model.GetSweepCost(model.currentDungeon); var own = playerPack.GetItemCountByID(PackType.Item, sweepCost.id); m_SweepCostCount.text = StringUtility.Contact(own, "/", sweepCost.count); } if (_itemId == m_DungeonTicketItem.itemId) { m_DungeonTicketItem.SetItem(model.GetTicketCost(model.currentDungeon.mapId, model.currentDungeon.lineId)); } } private void PlayerDataRefreshInfoEvent(PlayerDataType refreshType) { if (refreshType == PlayerDataType.LV) { DisplayFairyLandTip(); DungeonEnterCoolDownUpdate(); } } private void OnWorldLevelRefresh() { DisplayFairyLandTip(); } private void OnFuncStateChangeEvent(int id) { if (id == (int)FuncOpenEnum.WorldLv) { DisplayFairyLandTip(); } } private void DisplayFairyLandTip() { var dungeonId = model.GetDungeonId(model.currentDungeon); var dungeonConfig = DungeonConfig.Get(dungeonId); bool inCoolDown = model.ContainsDungeonEnter(dungeonConfig.DataMapID) && model.IsEnterCountDown(dungeonConfig.DataMapID); var satisfy = (PlayerDatas.Instance.baseData.LV + GeneralDefine.fairyLandBuffCondition) <= PlayerDatas.Instance.worldLv && dungeonConfig.DataMapID == 31080 && !inCoolDown && FuncOpen.Instance.IsFuncOpen((int)FuncOpenEnum.WorldLv); m_FairyLandTipBehaviour.gameObject.SetActive(satisfy); var config = SkillConfig.Get(GeneralDefine.fairyLandBuffId); if (config != null) { m_FairyLandTip.text = UIHelper.ReplaceNewLine(Language.Get("XjmjAddHarm1", GeneralDefine.fairyLandBuffCondition, config.EffectValue11 / 10000 + 1)); } } private void RuletBtn()//规则按钮 { if (DungeonNuwaModel.DATAMAPID == model.currentDungeon.mapId) { WindowCenter.Instance.Open(); } } } }