//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Wednesday, October 25, 2017
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
|
namespace vnxbqy.UI
|
{
|
public class MultipleDifficultyDungeonWin : Window ,SecondWindowInterface
|
{
|
[SerializeField] DungeonBreifInfo m_BreifInfo;
|
[SerializeField] CyclicScroll m_DifficultyScroll;
|
[SerializeField] ButtonEx m_Sweep;
|
[SerializeField] Text m_ChallengeButtonTitle;
|
[SerializeField] ImageEx m_ChallengeIcon;
|
[SerializeField] ButtonEx m_SingleStart;
|
|
List<Dungeon> dungeons = new List<Dungeon>();
|
|
DungeonModel model { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
|
DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }
|
|
public Button close { get; set; }
|
#region Built-in
|
|
protected override void BindController()
|
{
|
if (this is SecondWindowInterface)
|
{
|
var frame = this.GetComponentInChildren<SecondFrameLoader2>();
|
frame.Create();
|
close = frame.GetComponentInChildren<Button>();
|
}
|
}
|
|
protected override void AddListeners()
|
{
|
m_SingleStart.AddListener(ChallengeDungeon);
|
m_Sweep.AddListener(SweepDungeon);
|
close.AddListener(CloseClick);
|
}
|
|
protected override void OnPreOpen()
|
{
|
ParseDifficultys();
|
|
if (model.selectedKylinDungeon == default(Dungeon))
|
{
|
var playerLevel = PlayerDatas.Instance.baseData.LV;
|
for (int i = dungeons.Count - 1; i >= 0; i--)
|
{
|
var dungeonId = model.GetDungeonId(dungeons[i]);
|
var config = DungeonConfig.Get(dungeonId);
|
|
var challengable = false;
|
if (playerLevel >= config.LVLimitMin)
|
{
|
challengable = i == 0 || model.GetGrade(dungeons[i - 1]) > 0;
|
}
|
|
if (challengable)
|
{
|
model.selectedKylinDungeon = dungeons[i];
|
break;
|
}
|
}
|
}
|
|
DrawDungeonBaseInfo();
|
}
|
|
protected override void OnAfterOpen()
|
{
|
model.kylinDifficultySelectedEvent += OnSelectedDifficulty;
|
model.dungeonRecordChangeEvent += OnDungeonRecordChange;
|
model.updateDungeonBuyCnt += UpdateDungeonTimes;
|
}
|
|
protected override void OnPreClose()
|
{
|
model.kylinDifficultySelectedEvent -= OnSelectedDifficulty;
|
model.dungeonRecordChangeEvent -= OnDungeonRecordChange;
|
model.updateDungeonBuyCnt -= UpdateDungeonTimes;
|
}
|
|
protected override void OnAfterClose()
|
{
|
m_DifficultyScroll.Dispose();
|
|
}
|
|
protected override void OnActived()
|
{
|
base.OnActived();
|
OnDungeonRecordChange(31190);
|
ShowDifficultys();
|
|
CheckAchievementGuide();
|
}
|
|
#endregion
|
|
private void DrawDungeonBaseInfo()
|
{
|
var dungeonId = model.GetDungeonId(model.selectedKylinDungeon);
|
var dungeonConfig = DungeonConfig.Get(dungeonId);
|
|
m_BreifInfo.SetDungeonInfo(model.selectedKylinDungeon);
|
}
|
|
private void SweepDungeon()
|
{
|
var error = 0;
|
if (TestSweepDungeon(out error))
|
{
|
model.RequestSweep(model.selectedKylinDungeon);
|
}
|
else
|
{
|
var dungeonId = model.GetDungeonId(model.selectedKylinDungeon);
|
var dungeonConfig = DungeonConfig.Get(dungeonId);
|
switch (error)
|
{
|
case 1:
|
SysNotifyMgr.Instance.ShowTip("MoppingUpLV", dungeonConfig.SweepLVLimit);
|
break;
|
case 2:
|
SysNotifyMgr.Instance.ShowTip("MoppingUpPass", dungeonConfig.LVLimitMin);
|
break;
|
case 3:
|
model.currentDungeon = model.selectedKylinDungeon;
|
WindowCenter.Instance.Open<DungeonBuyTimesWin>();
|
break;
|
case 4:
|
SysNotifyMgr.Instance.ShowTip("Multiple_Finish");
|
break;
|
case 5:
|
SysNotifyMgr.Instance.ShowTip("SweepFB_1");
|
break;
|
}
|
}
|
|
}
|
|
private void ChallengeDungeon()
|
{
|
var error = 0;
|
if (TestChallengeDungeon(out error))
|
{
|
model.SingleChallenge(model.selectedKylinDungeon);
|
}
|
else
|
{
|
var dungeonId = model.GetDungeonId(model.selectedKylinDungeon);
|
var dungeonConfig = DungeonConfig.Get(dungeonId);
|
switch (error)
|
{
|
case 1:
|
SysNotifyMgr.Instance.ShowTip("Multiple_UpLV", dungeonConfig.LVLimitMin);
|
break;
|
case 2:
|
ServerTipDetails.DisplayNormalTip(Language.Get("InsufficientTL_Z"));
|
break;
|
case 3:
|
var requireLineId = model.selectedKylinDungeon.lineId - 1;
|
var requireGrade = model.GetGrade(new Dungeon(model.selectedKylinDungeon.mapId, requireLineId));
|
var requireDungeonId = model.GetDungeonId(new Dungeon(model.selectedKylinDungeon.mapId, requireLineId));
|
var requireDungeonConfig = DungeonConfig.Get(requireDungeonId);
|
SysNotifyMgr.Instance.ShowTip("NotChallengeMultiple", requireDungeonConfig.LVLimitMin);
|
break;
|
case 4:
|
WindowCenter.Instance.Open<DungeonBuyTimesWin>();
|
break;
|
}
|
}
|
}
|
|
private void ShowDifficultys()
|
{
|
m_DifficultyScroll.Init(dungeons);
|
|
model.currentDungeon = model.selectedKylinDungeon;
|
var index = dungeons.IndexOf(model.selectedKylinDungeon);
|
m_DifficultyScroll.MoveToCenter(index);
|
}
|
|
private void OnSelectedDifficulty(Dungeon _dungeon)
|
{
|
DrawDungeonBaseInfo();
|
}
|
|
private void UpdateDungeonTimes()
|
{
|
OnDungeonRecordChange(31190);
|
}
|
|
private void OnDungeonRecordChange(int _dataMapId)
|
{
|
var state = dailyQuestModel.GetQuestState((int)DailyQuestType.Kirin);
|
|
if (state == DailyQuestModel.DailyQuestState.CanBuyTimes)
|
{
|
m_ChallengeButtonTitle.text = Language.Get("Multiple_BuyCount");
|
}
|
else
|
{
|
m_ChallengeButtonTitle.text = Language.Get("Multiple_Challenge");
|
}
|
|
m_ChallengeIcon.gray = state == DailyQuestModel.DailyQuestState.Completed;
|
}
|
|
private bool TestSweepDungeon(out int _error)
|
{
|
var dungeonId = model.GetDungeonId(model.selectedKylinDungeon);
|
var dungeonConfig = DungeonConfig.Get(dungeonId);
|
var playerLevel = PlayerDatas.Instance.baseData.LV;
|
|
var dataMapId = model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
|
if (dataMapId == model.selectedKylinDungeon.mapId)
|
{
|
_error = 5;
|
return false;
|
}
|
|
if (playerLevel < dungeonConfig.SweepLVLimit)
|
{
|
_error = 1;
|
return false;
|
}
|
|
var dungeonGrade = model.GetGrade(model.selectedKylinDungeon);
|
if (dungeonGrade <= 0)
|
{
|
_error = 2;
|
return false;
|
}
|
|
var state = dailyQuestModel.GetQuestState((int)DailyQuestType.Kirin);
|
if (state == DailyQuestModel.DailyQuestState.CanBuyTimes)
|
{
|
_error = 3;
|
return false;
|
}
|
|
if (state == DailyQuestModel.DailyQuestState.Completed)
|
{
|
_error = 4;
|
return false;
|
}
|
|
_error = 0;
|
return true;
|
}
|
|
private bool TestChallengeDungeon(out int _error)
|
{
|
var dungeonId = model.GetDungeonId(model.selectedKylinDungeon);
|
var dungeonConfig = DungeonConfig.Get(dungeonId);
|
var playerLevel = PlayerDatas.Instance.baseData.LV;
|
|
if (playerLevel < dungeonConfig.LVLimitMin)
|
{
|
_error = 1;
|
return false;
|
}
|
|
if (model.selectedKylinDungeon.lineId > 0)
|
{
|
var requireLineId = model.selectedKylinDungeon.lineId - 1;
|
var requireGrade = model.GetGrade(new Dungeon(model.selectedKylinDungeon.mapId, requireLineId));
|
if (requireGrade <= 0)
|
{
|
_error = 3;
|
return false;
|
}
|
}
|
|
var enterTimes = model.GetEnterTimes(model.selectedKylinDungeon.mapId);
|
var totalTimes = model.GetTotalTimes(model.selectedKylinDungeon.mapId);
|
var surplusTimes = totalTimes - enterTimes;
|
if (surplusTimes <= 0)
|
{
|
_error = 4;
|
return false;
|
}
|
|
_error = 0;
|
return true;
|
}
|
|
private void ParseDifficultys()
|
{
|
dungeons.Clear();
|
var lineIds = model.GetDugeonLines(model.currentDungeon.mapId);
|
for (int i = 0; i < lineIds.Count; i++)
|
{
|
dungeons.Add(new Dungeon(model.currentDungeon.mapId, lineIds[i]));
|
}
|
|
dungeons.Sort(
|
(Dungeon a, Dungeon b) =>
|
{
|
var dungeonConfigA = DungeonConfig.Get(model.GetDungeonId(a));
|
var dungeonConfigB = DungeonConfig.Get(model.GetDungeonId(b));
|
return dungeonConfigA.LVLimitMin < dungeonConfigB.LVLimitMin ? -1 : 1;
|
}
|
);
|
}
|
|
private void CheckAchievementGuide()
|
{
|
if (AchievementGoto.guideAchievementId != 0)
|
{
|
var config = SuccessConfig.Get(AchievementGoto.guideAchievementId);
|
var condition = config.Type == 49 && config.Condition[0] == model.selectedKylinDungeon.lineId + 1;
|
|
if (condition)
|
{
|
var guideEffect = AchievementGuideEffectPool.Require(6);
|
guideEffect.transform.SetParentEx(m_SingleStart.transform, Vector3.zero, Vector3.zero, Vector3.one);
|
}
|
}
|
}
|
|
}
|
|
}
|
|
|
|
|