using System.Collections;
using UnityEngine;
using UI.ActivityAFuGift;
using ET;
using FairyGUI;
using System;
using UI.CommonGame;
using static GFGGame.ShopSProxy;
using System.Threading.Tasks;
namespace GFGGame
{
public class ActivityAfuGiftView : BaseWindow
{
private UI_ActivityAFuGiftUI _ui;
private GList _rewardListUI;
private struct GetState
{
public int rewardID;
public bool canGet;
public bool isVip;
}
public override void Dispose()
{
if (_ui != null)
{
_ui.Dispose();
_ui = null;
}
base.Dispose();
}
protected override void OnInit()
{
base.OnInit();
packageName = UI_ActivityAFuGiftUI.PACKAGE_NAME;
_ui = UI_ActivityAFuGiftUI.Create();
viewCom = _ui.target;
viewCom.Center();
modal = true;
viewAnimationType = EnumViewAnimationType.ZOOM_CENTER;
_ui.m_btnClose.onClick.Add(Hide);
_ui.m_btnGet.onClick.Add(OnClickBtnGet);
// Data
ActivityAfuGiftDataManager.Instance.InitActivityInfo();
// UI
_rewardListUI = _ui.m_panel.m_scrollPane.m_list;
_rewardListUI.itemRenderer = RenderListReward;
_rewardListUI.numItems = ActivityAfuGiftDataManager.Instance.RewardCfgs.Count;
InitUI();
}
protected override void OnShown()
{
base.OnShown();
if (ActivityAfuGiftDataManager.Instance.NeedRefresh)
{
InitUI();
ActivityAfuGiftDataManager.Instance.NeedRefresh = false;
}
UpdateState();
ProgressAutoLocate();
UpdateTime(null);
Timers.inst.Add(1, 0, UpdateTime);
}
protected override void OnHide()
{
base.OnHide();
Timers.inst.Remove(UpdateTime);
}
protected override void AddEventListener()
{
base.AddEventListener();
EventAgent.AddEventListener(ConstMessage.RED_CHANGE, UpdateState);
}
protected override void RemoveEventListener()
{
base.RemoveEventListener();
EventAgent.RemoveEventListener(ConstMessage.RED_CHANGE, UpdateState);
}
private void InitUI()
{
_ui.m_c1.SetSelectedIndex(ActivityAfuGiftDataManager.Instance.GetIsBuy() ? 1 : 0);
_rewardListUI.ResizeToFit();
InitProgressWidth();
}
private void InitProgressWidth()
{
GProgressBar gProgressBar = _ui.m_panel.m_scrollPane.m_progress;
// 根据列表 初始化进度条长度
float marginLeft = 149;
gProgressBar.width = marginLeft + _rewardListUI.GetChildAt(_rewardListUI.numChildren - 1).position.x - _rewardListUI.GetChildAt(0).position.x;
// 初始化进度条值
int indexDay = ActivityAfuGiftDataManager.Instance.GetIndexDay();
gProgressBar.value = CalculateProgressValue(indexDay, _rewardListUI.numChildren);
}
///
/// 滚动到最新日期
///
private void ProgressAutoLocate()
{
_ui.m_panel.m_scrollPane.target.scrollPane.posX
= (ActivityAfuGiftDataManager.Instance.GetIndexDay() - 1) * (_rewardListUI.GetChildAt(0).width + _rewardListUI.columnGap);
}
private double CalculateProgressValue(int indexDay, int sumDay)
{
int defaultLen = 18;
if (indexDay == sumDay)
{
return 100;
}
if (indexDay == 1)
{
return defaultLen;
}
return defaultLen + (100 - defaultLen) / (sumDay - 1) * (indexDay - 1);
}
private void UpdateTime(object param)
{
if (!ActivityAfuGiftDataManager.Instance.IsOpen)
{
return;
}
long curTime = TimeHelper.ServerNow();
var activityInfo = ActivityGlobalDataManager.Instance.GetActivityInfoOneByType(ActivityType.AFZL);
if (activityInfo != null)
{
long endTime = activityInfo.EndTime;
_ui.m_txtTime.text = TimeUtil.FormattingTimeTo_DDHHmm(endTime - curTime);
}
}
private void RenderListReward(int index, GObject item)
{
item.data = index;
UI_reward.ProxyEnd();
UI_reward rewardUI = UI_reward.Proxy(item);
rewardUI.m_day.m_day.SetVar("day", (index + 1).ToString()).FlushVars();
// 已经到达的日期
int passDay = ActivityAfuGiftDataManager.Instance.GetIndexDay();
int arrive = (index + 1) <= passDay ? 0 : 1;
rewardUI.m_day.m_light.SetSelectedIndex(arrive);
// 当日高亮
rewardUI.m_c1.SetSelectedIndex((index + 1) == passDay ? 1 : 0);
int itemNormalId = ActivityAfuGiftDataManager.Instance.RewardCfgs[index].bonusFreeArr[0][0];
int itemVipId1 = ActivityAfuGiftDataManager.Instance.RewardCfgs[index].bonusPayArr[0][0];
int itemVipId2 = ActivityAfuGiftDataManager.Instance.RewardCfgs[index].bonusPayArr[1][0];
LoadItem(itemNormalId, rewardUI.m_reward_normal, ActivityAfuGiftDataManager.Instance.RewardCfgs[index].bonusFreeArr[0][1]);
LoadItem(itemVipId1, rewardUI.m_reward_vip1, ActivityAfuGiftDataManager.Instance.RewardCfgs[index].bonusPayArr[0][1], true);
LoadItem(itemVipId2, rewardUI.m_reward_vip2, ActivityAfuGiftDataManager.Instance.RewardCfgs[index].bonusPayArr[1][1], true, true);
}
private void LoadItem(int itemID, GObject obj, int num, bool isVip = false, bool release = false)
{
ItemCfg itemNormal = ItemCfgArray.Instance.GetCfg(itemID);
UI_ComItem comItem = UI_ComItem.Proxy(obj);
comItem.m_loaIcon.url = ResPathUtil.GetIconPath(itemNormal);
comItem.m_txtCount.text = num.ToString();
comItem.m_QualityType.selectedIndex = itemNormal.rarity - 1;
comItem.target.onClick.Add(OnItemClick);
int dayIndex = (int)obj.parent.data + 1;
// 已经到达的日期
int passDay = ActivityAfuGiftDataManager.Instance.GetIndexDay();
bool arrive = dayIndex <= passDay;
// 显示锁/遮罩
if (isVip)
{
if (ActivityAfuGiftDataManager.Instance.GetIsBuy())
{
comItem.m_Lock.SetSelectedIndex(arrive ? 0 : 2);
}
else
{
comItem.m_Lock.SetSelectedIndex(1);
}
}
else
{
comItem.m_Lock.SetSelectedIndex(arrive ? 0 : 2);
}
bool canGet = false;
int getState;
if (arrive)
{
if (isVip)
{
getState = ActivityAfuGiftDataManager.Instance.GetSuperRewardStateByDay(dayIndex - 1);
}
else
{
getState = ActivityAfuGiftDataManager.Instance.GetNormalRewardStateByDay(dayIndex - 1);
}
switch (getState)
{
case ConstBonusStatus.CAN_NOT_GET:
comItem.m_grpGot.visible = false;
obj.touchable = true;
// 隐藏红点
RedDotController.Instance.SetComRedDot(obj.asCom, false);
break;
case ConstBonusStatus.CAN_GET:
canGet = true;
comItem.m_grpGot.visible = false;
obj.touchable = true;
// 显示红点
RedDotController.Instance.SetComRedDot(obj.asCom, true, "", -33, 27);
break;
case ConstBonusStatus.GOT:
comItem.m_grpGot.visible = true;
obj.touchable = false;
// 隐藏红点
RedDotController.Instance.SetComRedDot(obj.asCom, false);
break;
}
}
else
{
canGet = false;
comItem.m_grpGot.visible = false;
obj.touchable = true;
// 隐藏红点
RedDotController.Instance.SetComRedDot(obj.asCom, false);
}
obj.data = new GetState
{
rewardID = itemID,
isVip = isVip,
canGet = canGet
};
UI_ComItem.ProxyEnd();
}
private void OnItemClick(EventContext eventContext)
{
GObject obj = (GObject)eventContext.sender;
GetState getState = (GetState)(obj.data);
if (getState.canGet)
{
ActivityAfuGiftSProxy.ReqGetReward(getState.isVip, (int)obj.parent.data + 1).Coroutine();
}
else
{
GoodsItemTipsController.ShowItemTips(getState.rewardID);
}
}
///
/// 领取所有奖励按钮
///
private void OnClickBtnGet()
{
if (!ActivityAfuGiftDataManager.Instance.IsOpen)
{
PromptController.Instance.ShowFloatTextPrompt("活动已结束");
return;
}
if (!ActivityAfuGiftDataManager.Instance.GetIsBuy())
{
var activityInfo = ActivityGlobalDataManager.Instance.GetActivityInfoOneByType(ActivityType.AFZL);
if (activityInfo != null)
{
var cfg = ActivityOpenCfgArray.Instance.GetCfg(activityInfo.ActivityId);
if (cfg.paramsArr != null && cfg.paramsArr.Length > 0)
{
int id = cfg.paramsArr[0];
// 跳转充值画面
ReqShopBuy(id).Coroutine();
}
}
return;
}
ActivityAfuGiftSProxy.ReqGetAllReward().Coroutine();
}
///
/// 充值,领取东西后调用
///
private void UpdateState()
{
if (!ActivityAfuGiftDataManager.Instance.IsOpen)
{
//Hide();
return;
}
InitUI();
// 更新底部按钮文本
_ui.m_c1.SetSelectedIndex(ActivityAfuGiftDataManager.Instance.GetIsBuy() ? 1 : 0);
// 更新锁 红点状态
_rewardListUI.numItems = ActivityAfuGiftDataManager.Instance.RewardCfgs.Count;
UpdateButtonState();
}
///
/// 更新一键领取按钮状态
///
public void UpdateButtonState()
{
if (ActivityAfuGiftDataManager.Instance.GetIsBuy())
{
// 0-普通 1-变灰
_ui.m_btnGetState.SetSelectedIndex(ActivityAfuGiftDataManager.Instance.HaveCanGetReward() ? 0 : 1);
}
// 没有充值,保持常亮
else
{
_ui.m_btnGetState.SetSelectedIndex(0);
}
}
}
}