/// #pkgName FGUI包名
/// #panelName UIPanel名字
/// #UIName = $"{#pkgName}{#panelName}" UIKey名字
/// 该脚本由模板创建
/// created by cb 2024
using FairyGUI;
using FL.Data;
using System.Collections.Generic;
using System;
using XGame.Database;
using XGame.Framework.Time;
using XGame.Framework.UI;
using UnityEngine;
namespace FL.FGUI
{
///
/// UI逻辑处理类
///
///
public partial class TreasureChestUpgradePanelCtrl : UIController
{
private ITimer _upLvTimer; // 宝箱升级倒计时定时器
private const int GoldId = 1; // 升级消耗金币(道具id)
private const int AccelerationId = 1000; // 加速卡道具id
private treasureTable _curTreasure;
private treasureTable _nextTreasure;
protected override void OnEnable(object intent)
{
AddUIListenres();
AddEventLister();
InitUI();
ShowUI();
}
protected override void OnDisable()
{
RemoveUIListenres();
RemoveEventLister();
ClearStepTimer();
VM.GoldResItem.Disable();
VM.AccelerationResItem.Disable();
VM.CostAccelerationResItem.Disable();
}
#region UI事件
private void AddUIListenres()
{
VM.ProbabilityBtn.onClick.Add(OnClickProbabilityBtn);
VM.IncomeBtn.onClick.Add(OnClickIncomeBtn);
VM.UpgradeBtn.onClick.Add(OnClickUpgradeBtn);
VM.AssistBtn.onClick.Add(OnClickAssistBtn);
VM.ReduceTimeBtn.onClick.Add(OnClickReduceTimeBtn);
VM.AccelerationTimeBtn.onClick.Add(OnClickAccelerationTimeBtn);
}
private void RemoveUIListenres()
{
VM.ProbabilityBtn.onClick.Remove(OnClickProbabilityBtn);
VM.IncomeBtn.onClick.Remove(OnClickIncomeBtn);
VM.UpgradeBtn.onClick.Remove(OnClickUpgradeBtn);
VM.AssistBtn.onClick.Remove(OnClickAssistBtn);
VM.ReduceTimeBtn.onClick.Remove(OnClickReduceTimeBtn);
VM.AccelerationTimeBtn.onClick.Remove(OnClickAccelerationTimeBtn);
}
private void OnClickProbabilityBtn(EventContext context)
{
ShowPageUI(0);
}
private void OnClickIncomeBtn(EventContext context)
{
ShowPageUI(1);
}
///
/// 升级按钮
///
///
private void OnClickUpgradeBtn(EventContext context)
{
DragonEggService.Instance.SendToUpgrade();
}
//协助按钮
private void OnClickAssistBtn(EventContext context)
{
Context.ShowTips("发送援助到公会聊天频道");
}
///
/// 免费观看广告获取减少时间
///
///
private void OnClickReduceTimeBtn(EventContext context)
{
DragonEggService.Instance.SendToAcceleration(2, 0);
}
///
/// 加速按钮
///
///
private void OnClickAccelerationTimeBtn(EventContext context)
{
Context.UI.OpenAsync(UIKeys.TreasureChestReduceTimePanel,AccelerationId);
}
#endregion
private void AddEventLister()
{
Context.AddListener(EventDefine.RefreshUpgradeTime, RefreshUpgradeTime);
Context.AddListener(EventDefine.ShowEquipQualityProbability, ShowEquipQualityProbability);
Context.AddListener(EventDefine.RefreshWatchAd, RefreshWatchAd);
Context.AddListener(EventDefine.RefreshTreasureChestUI, RefreshTreasureChestUI);
}
private void RemoveEventLister()
{
Context.RemoveListener(EventDefine.RefreshUpgradeTime, RefreshUpgradeTime);
Context.RemoveListener(EventDefine.ShowEquipQualityProbability, ShowEquipQualityProbability);
Context.RemoveListener(EventDefine.RefreshWatchAd, RefreshWatchAd);
Context.RemoveListener(EventDefine.RefreshTreasureChestUI, RefreshTreasureChestUI);
}
private void ShowUI()
{
_curTreasure = treasureTableRepo.Get(DragonEggData.Instance.Level);
_nextTreasure = treasureTableRepo.Get(DragonEggData.Instance.Level + 1);
bool bMaxLv = _nextTreasure == null;
ShowBoxLv(DragonEggData.Instance.Level, bMaxLv);
ShowExpUI(_curTreasure, bMaxLv);
ShowPageUI(VM.PageCtrl.selectedIndex);
}
private void ShowPageUI(int index)
{
VM.PageCtrl.selectedIndex = index;
if (index == 0)
{
ShowEquipProbability(_curTreasure, _nextTreasure);
}
else
{
ShowIncome(_curTreasure, _nextTreasure);
}
}
private void ShowBoxLv(int curLv, bool bMaxLv)
{
VM.MaxLvCtrl.selectedIndex = bMaxLv ? 1 : 0;
if (!bMaxLv)
{
VM.NextLvLabel.text = (curLv + 1).ToString();
}
VM.CurLvLabel.text = curLv.ToString();
}
private void ShowExpUI(treasureTable curTreasure, bool bMaxLv)
{
if (!bMaxLv && curTreasure?.Expend != null)
{
if (DragonEggData.Instance.UpLvTime > Context.Time.GetNowTime())
{
ShowUpgradeTimeUI();
return;
}
VM.BoxLvExpBar.max = curTreasure.Expend;
VM.BoxLvExpBar.value = DragonEggData.Instance.Exp;
var needExp = curTreasure.Expend > DragonEggData.Instance.Exp ? curTreasure.Expend - DragonEggData.Instance.Exp : 0;
VM.NeedExpLabel.text = string.Format(StringDefine.upgradeDragonEggBoxExp, needExp);
VM.UpgradeBtn.enabled = DragonEggData.Instance.Exp >= curTreasure.Expend;
}
}
///
/// 升级倒计时状态中
///
private void ShowUpgradeTimeUI()
{
ShowUpgradeState(1);
ClearStepTimer();
if (_upLvTimer == null)
{
_upLvTimer = Context.Time.AddLooperTimer(500, (int dt) =>
{
ShowLeftStepTime();
});
}
ShowLeftStepTime();
}
///
/// 龙蛋升阶倒计时
///
private void ShowLeftStepTime()
{
long leftTime = DragonEggData.Instance.UpLvTime - Context.Time.GetNowTime();
if (leftTime > 0)
{
TimeSpan timeData = TimeSpan.FromMilliseconds(leftTime);
VM.EndTimeLabel.text = timeData.ToString(@"hh\:mm\:ss");
}
else
{
ClearStepTimer();
ShowUpgradeState(0);
}
}
private void ShowUpgradeState(int index)
{
VM.UpgradeCtrl.selectedIndex = index;
if (index == 1)
{
ShowWatchAdUI();
}
}
private void RefreshWatchAd(int eventId, object args)
{
if (VM.UpgradeCtrl.selectedIndex == 1)
{
ShowWatchAdUI();
}
}
private void ShowWatchAdUI()
{
// 处于观看广告按钮CD状态中
VM.CdTimeCtrl.selectedIndex = DragonEggData.Instance.WatchADCount < KeyValue.boxUpBillNum ? 0 : 1;
VM.AdNumLabel.text = string.Format(StringDefine.treasureChestWatchADCount, DragonEggData.Instance.WatchADCount, KeyValue.boxUpBillNum);
}
private void ClearStepTimer()
{
if (_upLvTimer != null)
{
_upLvTimer.Cancel();
_upLvTimer = null;
}
}
///
/// 刷新宝箱等级界面UI
///
///
///
private void RefreshTreasureChestUI(int eventId, object args)
{
ShowUI();
}
///
/// 刷新升级倒计时
///
///
///
private void RefreshUpgradeTime(int eventId, object args)
{
ShowUpgradeTimeUI();
}
///
/// 收益页签查看装备品质产出几率按钮事件监听
///
///
///
private void ShowEquipQualityProbability(int eventId, object args)
{
ShowPageUI(0);
}
private void InitUI()
{
VM.GoldResItem.Ctrl.ShowUI(GoldId, ItemData.Instance.GetItemNum(GoldId));
VM.AccelerationResItem.Ctrl.ShowUI(AccelerationId, ItemData.Instance.GetItemNum(AccelerationId));
VM.CostAccelerationResItem.Ctrl.ShowUI(AccelerationId, 1);
VM.CdTimeLabel.text = string.Format(StringDefine.treasureChestADTime, Mathf.FloorToInt(KeyValue.boxUpBillTime / 60));
}
///
/// 装备概率UI
///
private void ShowEquipProbability(treasureTable curTreasure, treasureTable nextTreasure)
{
var probabilityDataList = new List();
bool bMaxLv = nextTreasure == null;
for (int i = 0; i < curTreasure.EquipmentProbability.Length; i += 2)
{
probabilityDataList.Add(new ProbabilityParam()
{
quality = curTreasure.EquipmentProbability[i],
curValue = curTreasure.EquipmentProbability[i + 1],
nextValue = bMaxLv ? 0 : nextTreasure.EquipmentProbability[i + 1],
bMaxLv = bMaxLv,
});
}
VM.ProbabilityList.BindDatas(probabilityDataList);
}
///
/// 宝箱收益UI
///
private void ShowIncome(treasureTable curTreasure, treasureTable nextTreasure)
{
var dropDataList = new List()
{
new TreasureChestIncome(){dropId=curTreasure.WoodenChestDrop[0],nextLvDropId=nextTreasure == null ? 0 : nextTreasure.WoodenChestDrop[0] },
new TreasureChestIncome(){dropId=curTreasure.BlackIronChestDrop[0],nextLvDropId=nextTreasure == null ? 0 : nextTreasure.BlackIronChestDrop[0] },
new TreasureChestIncome(){dropId=curTreasure.PlatinumChestDrop[0],nextLvDropId=nextTreasure == null ? 0 : nextTreasure.PlatinumChestDrop[0] },
new TreasureChestIncome(){dropId=curTreasure.ChemistryChestDrop[0],nextLvDropId=nextTreasure == null ? 0 : nextTreasure.ChemistryChestDrop[0] },
new TreasureChestIncome(){dropId=curTreasure.PearlsChestDrop[0],nextLvDropId=nextTreasure == null ? 0 : nextTreasure.PearlsChestDrop[0] },
};
VM.IncomeList.BindDatas(dropDataList);
}
}
}