using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace vnxbqy.UI
|
{
|
public class CommonDungeonSelectCell : CellView
|
{
|
[SerializeField] Image headIcon;
|
[SerializeField] Text npcLVText;
|
[SerializeField] List<ItemCell> items;
|
[SerializeField] Text todayCntText;
|
[SerializeField] Button challengeBtn;
|
[SerializeField] Text challengeText;//挑战/扫荡/xx仙玉扫荡
|
|
[SerializeField] Transform challengeObj;
|
[SerializeField] Transform lockObj;
|
[SerializeField] Text lockText;
|
|
|
DungeonModel model { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
|
DailyQuestModel dailyQuestModel { get { return ModelCenter.Instance.GetModel<DailyQuestModel>(); } }
|
|
CommonDungeonSelectModel commonDungeonSelectModel { get { return ModelCenter.Instance.GetModel<CommonDungeonSelectModel>(); } }
|
|
int moneyType = 1;
|
int money;
|
|
public void Display(int lineID)
|
{
|
var dungeonInfo = FBGeneralTrainConfig.GetDungeonInfo(model.currentDungeon.mapId, lineID);
|
if (dungeonInfo == null)
|
{
|
return;
|
}
|
var npcInfo = NPCConfig.Get(dungeonInfo.BossNPCID);
|
headIcon.SetSprite(npcInfo.HeadPortrait);
|
npcLVText.text = Language.Get("PlayerDetail_Level", npcInfo.NPCLV);
|
|
for (int i = 0; i < items.Count; i++)
|
{
|
if (i < dungeonInfo.PassAwardItemList.Length)
|
{
|
items[i].SetActive(true);
|
int itemID = dungeonInfo.PassAwardItemList[i][0];
|
items[i].Init(new ItemCellModel(itemID, false, (ulong)dungeonInfo.PassAwardItemList[i][1]));
|
items[i].button.AddListener(() => {
|
ItemTipUtility.Show(itemID);
|
});
|
}
|
else
|
{
|
items[i].SetActive(false);
|
}
|
}
|
|
DungeonRecord dungeonRecord;
|
if (!model.TryGetRecord(model.currentDungeon.mapId, out dungeonRecord))
|
{
|
return;
|
}
|
|
DungeonOpenTimeConfig dungeonOpenTimeModel = DungeonOpenTimeConfig.Get(model.currentDungeon.mapId);
|
var completedTimes = dailyQuestModel.GetDailyQuestCompletedTimes(commonDungeonSelectModel.selectDailyQuestType);
|
var totalTimes = dailyQuestModel.GetDailyQuestTotalTimes(commonDungeonSelectModel.selectDailyQuestType);
|
|
|
//1. 已通关 小于通关关卡的不显示按钮
|
//2. 通关的当前关卡 (相等)
|
// a.当前显示扫荡(是否消费货币)
|
//3. 未通关的当前关卡
|
// a.等级够且为下一层显示挑战按钮
|
// b.等级不够显示锁定
|
if (lineID < dungeonRecord.passLineID)
|
{
|
lockObj.SetActive(false);
|
challengeObj.SetActive(false);
|
}
|
else if (lineID == dungeonRecord.passLineID)
|
{
|
ShowChallenge(1, dungeonRecord, lineID);
|
}
|
else
|
{
|
|
if (PlayerDatas.Instance.baseData.LV < dungeonInfo.LVLimit)
|
{
|
lockObj.SetActive(true);
|
challengeObj.SetActive(false);
|
lockText.text = Language.Get("StoreWin107", dungeonInfo.LVLimit);
|
}
|
else if (lineID == dungeonRecord.passLineID + 1)
|
{
|
ShowChallenge(2, dungeonRecord, lineID);
|
}
|
else
|
{
|
lockObj.SetActive(false);
|
challengeObj.SetActive(true);
|
challengeBtn.interactable = false;
|
challengeBtn.SetColorful(null, false);
|
challengeText.text = Language.Get("Multiple_Challenge");
|
todayCntText.text = UIHelper.AppendColor(TextColType.Red, Language.Get("TrialDungeonPreFloorLimit"));
|
}
|
}
|
}
|
|
void ShowChallenge(int type, DungeonRecord dungeonRecord, int lineID)
|
{
|
string key = type == 1 ? "RuneTower22" : "Multiple_Challenge";
|
DungeonOpenTimeConfig dungeonOpenTimeModel = DungeonOpenTimeConfig.Get(model.currentDungeon.mapId);
|
var completedTimes = dailyQuestModel.GetDailyQuestCompletedTimes(commonDungeonSelectModel.selectDailyQuestType);
|
var totalTimes = dailyQuestModel.GetDailyQuestTotalTimes(commonDungeonSelectModel.selectDailyQuestType, true);
|
var totalTimesBuyYet = dailyQuestModel.GetDailyQuestTotalTimes(commonDungeonSelectModel.selectDailyQuestType, false);
|
|
|
lockObj.SetActive(false);
|
challengeObj.SetActive(true);
|
challengeText.text = Language.Get(key);
|
challengeBtn.interactable = true;
|
challengeBtn.SetColorful(null, true);
|
todayCntText.text = UIHelper.AppendColor(completedTimes >= totalTimes ?
|
TextColType.Red : TextColType.Green, Language.Get("XBLimitCnt", (totalTimes - completedTimes).ToString(), totalTimes), true);
|
|
Dungeon dungeon = model.currentDungeon;
|
dungeon.lineId = lineID;
|
challengeBtn.SetListener(() => {
|
GotoDungeon(type, dungeon);
|
});
|
|
|
//完成次数比较
|
if (completedTimes < dungeonOpenTimeModel.DayTimes)
|
{
|
challengeText.text = Language.Get(key);
|
}
|
else if (completedTimes < totalTimes)
|
{
|
string costFormula = string.Empty;
|
if (completedTimes < totalTimesBuyYet)
|
{
|
challengeText.text = Language.Get(key);
|
}
|
else if (model.TryGetBuyCountCost(model.currentDungeon.mapId, out costFormula))
|
{
|
if (ILGeneralDefine.fbBuyTimes.ContainsKey(model.currentDungeon.mapId))
|
{
|
moneyType = ILGeneralDefine.fbBuyTimes[model.currentDungeon.mapId];
|
}
|
Equation.Instance.Clear();
|
Equation.Instance.AddKeyValue("hasBuyCnt", dungeonRecord.buyTimes);
|
money = Equation.Instance.Eval<int>(costFormula);
|
challengeText.text = StringUtility.Contact(money.ToString(), " ",
|
Language.Get("MoneyType_" + moneyType), " ", Language.Get(key));
|
}
|
|
}
|
else
|
{
|
challengeText.text = Language.Get(key);
|
challengeBtn.interactable = false;
|
challengeBtn.SetColorful(null, false);
|
}
|
}
|
|
void GotoDungeon(int type, Dungeon dungeon)
|
{
|
//不够次数的先发购买包,再发挑战/扫荡
|
var completedTimes = dailyQuestModel.GetDailyQuestCompletedTimes(commonDungeonSelectModel.selectDailyQuestType);
|
var totalTimes = dailyQuestModel.GetDailyQuestTotalTimes(commonDungeonSelectModel.selectDailyQuestType, true);
|
var totalTimesBuyYet = dailyQuestModel.GetDailyQuestTotalTimes(commonDungeonSelectModel.selectDailyQuestType, false);
|
|
if (completedTimes < totalTimesBuyYet)
|
{
|
if (type == 1)
|
{
|
model.RequestSweep(dungeon);
|
}
|
else
|
{
|
model.currentDungeon = dungeon;
|
ClientDungeonStageUtility.GotoNormalClientDungeon(dungeon.mapId, dungeon.mapId, dungeon.lineId);
|
}
|
}
|
else
|
{
|
|
if (UIHelper.GetMoneyCnt(moneyType) >= (ulong)money)
|
{
|
if (!commonDungeonSelectModel.IsCheckBuy)
|
{
|
ConfirmCancel.ToggleConfirmCancel(Language.Get("Mail101"), Language.Get(type == 1 ? "CommonDungeon2" : "CommonDungeon3",
|
StringUtility.Contact(money, " ", Language.Get("MoneyType_" + moneyType))), Language.Get("ConfirmCancel102"),
|
(bool isOk, bool isToggle) =>
|
{
|
if (isOk)
|
{
|
model.RequestBuyEnterCount(model.currentDungeon.mapId);
|
if (type == 1)
|
{
|
model.RequestSweep(dungeon);
|
}
|
else
|
{
|
model.currentDungeon = dungeon;
|
ClientDungeonStageUtility.GotoNormalClientDungeon(dungeon.mapId, dungeon.mapId, dungeon.lineId);
|
}
|
}
|
if (isToggle)
|
{
|
commonDungeonSelectModel.IsCheckBuy = true;
|
}
|
});
|
}
|
else
|
{
|
model.RequestBuyEnterCount(model.currentDungeon.mapId);
|
if (type == 1)
|
{
|
model.RequestSweep(dungeon);
|
}
|
else
|
{
|
model.currentDungeon = dungeon;
|
ClientDungeonStageUtility.GotoNormalClientDungeon(dungeon.mapId, dungeon.mapId, dungeon.lineId);
|
}
|
}
|
}
|
else
|
{
|
SysNotifyMgr.Instance.ShowTip("LackMoney", moneyType);
|
}
|
}
|
}
|
}
|
}
|