//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, September 12, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TableConfig; 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; DungeonModel model { get { return ModelCenter.Instance.GetModel(); } } TeamModel teamModel { get { return ModelCenter.Instance.GetModel(); } } PlayerPackModel playerPack { 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); } protected override void OnPreOpen() { DrawDungeonBaseInfo(); DrawSweepInfo(); DrawDungeonTicketInfo(); m_BreifInfo.SetDungeonInfo(model.currentDungeon); } protected override void OnAfterOpen() { playerPack.RefreshItemCountAct += OnPackageItemChange; model.updateDungeonEnterCD += UpdateDungeonEnterCD; m_EnterCdContainer.OnCdComplete += UpdateDungeonEnterCD; } protected override void OnPreClose() { playerPack.RefreshItemCountAct -= OnPackageItemChange; model.updateDungeonEnterCD -= UpdateDungeonEnterCD; m_EnterCdContainer.OnCdComplete -= UpdateDungeonEnterCD; } 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 UpdateDungeonEnterCD() { var dungeonId = model.GetDungeonId(model.currentDungeon); var dungeonConfig = Config.Instance.Get(dungeonId); bool _cd = model.HasEnterCD(dungeonConfig.DataMapID) && model.IsEnterCountDowning(dungeonConfig.DataMapID); m_EnterCdContainer.gameObject.SetActive(_cd); m_ContainerBtns.gameObject.SetActive(!_cd); } private void DrawDungeonBaseInfo() { var dungeonId = model.GetDungeonId(model.currentDungeon); var dungeonConfig = Config.Instance.Get(dungeonId); var dungeonOpenTimeConfig = Config.Instance.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; UpdateDungeonEnterCD(); 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 = Config.Instance.Get(dungeonId); var playerLevel = PlayerDatas.Instance.baseData.LV; var sweepLevelLimit = dungeonConfig.SweepLVLimit; if (model.GetSweepCost(model.currentDungeon).Equals(default(Item))) { m_Sweep.gameObject.SetActive(false); m_SweepContainer.gameObject.SetActive(false); m_SweepLevelNeed.gameObject.SetActive(true); m_SweepLevelNeed.text = Language.Get("");//补充扫荡需要等级的提示语 } else { m_SweepLevelNeed.gameObject.SetActive(false); m_SweepContainer.gameObject.SetActive(true); m_Sweep.gameObject.SetActive(true); var sweepCost = model.GetSweepCost(model.currentDungeon); var itemConfig = Config.Instance.Get(sweepCost.id); m_SweepContainer.SetItem(sweepCost); //暂时隐藏扫荡券,LC要求 m_SweepContainer.gameObject.SetActive(false); var own = playerPack.GetItemCountByID(PackType.rptItem, sweepCost.id); m_SweepCostCount.text = StringUtility.Contact(own, "/", sweepCost.count); } } private void DrawDungeonTicketInfo() { var config = Config.Instance.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)) { WindowCenter.Instance.Open(); } else { ProcessSweepDungeonError(sweepError); } } private void ChallengeDungeon() { var error = 0; if (model.TestChallange(model.currentDungeon, out error)) { if (GeneralConfig.Instance.dungeonCanUseMoneyIds.Contains(model.currentDungeon.mapId)) { CheckUseMoneyDungeon(model.currentDungeon); } else { model.SingleChallenge(model.currentDungeon); } } else { if (GeneralConfig.Instance.dungeonCanUseMoneyIds.Contains(model.currentDungeon.mapId) && error == 5) { CheckUseMoneyDungeon(model.currentDungeon); } else { ProcessEnterDungeonError(error); } } } private void CheckUseMoneyDungeon(Dungeon _dungeon) { var mapId = _dungeon.mapId; var mapConfig = Config.Instance.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.Create(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 = Config.Instance.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; } } private bool TestSweepDungeon(out int _error) { var dungeonId = model.GetDungeonId(model.currentDungeon); var dungeonConfig = Config.Instance.Get(dungeonId); var playerLevel = PlayerDatas.Instance.baseData.LV; var dungeonGrade = model.GetGrade(model.currentDungeon); 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.IsEnterCountDowning(model.currentDungeon.mapId)) { _error = 4; return false; } _error = 0; return true; } private void ProcessSweepDungeonError(int _error) { var dungeonId = model.GetDungeonId(model.currentDungeon); var dungeonConfig = Config.Instance.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; } } private void OnPackageItemChange(PackType _type, int _index, int _itemId) { if (_type != PackType.rptItem) { return; } if (_itemId == m_SweepContainer.itemId) { var sweepCost = model.GetSweepCost(model.currentDungeon); var own = playerPack.GetItemCountByID(PackType.rptItem, 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)); } } } }