using ET;
using FairyGUI;
using System;
using System.Collections.Generic;
using UI.DailyWelfare;
using UnityEngine;
namespace GFGGame
{
public class LimitedRechargeDBGiftView : BaseWindow
{
private UI_LimitedRechargeDBGiftUI _ui;
private int _minProgressOffset = 6;
private int _maxProgressOffset = -8;
private ActivityInfo _activityInfo;
private ActivityRecharge2Cfg[] _rechargeCfgs;
public override void Dispose()
{
if (_ui != null)
{
_ui.Dispose();
_ui = null;
}
base.Dispose();
}
protected override void OnInit()
{
base.OnInit();
packageName = UI_LimitedRechargeDBGiftUI.PACKAGE_NAME;
_ui = UI_LimitedRechargeDBGiftUI.Create();
this.viewCom = _ui.target;
this.viewCom.Center();
this.modal = true;
viewAnimationType = EnumViewAnimationType.ZOOM_CENTER;
_ui.m_btnTest.onClick.Add(OnClickBtnTest);
_rechargeCfgs = ActivityRecharge2CfgArray.Instance.dataArray;
InitProgressValueList();
InitReward();
}
protected override void AddEventListener()
{
base.AddEventListener();
EventAgent.AddEventListener(ConstMessage.ACTIVITY_REWARD_ADD, UpdateView);
EventAgent.AddEventListener(ConstMessage.RED_CHANGE, UpdateView);
EventAgent.AddEventListener(ConstMessage.ACTIVITY_COUNT_VALUE_CHANGE, UpdateView);
}
protected override void RemoveEventListener()
{
base.RemoveEventListener();
EventAgent.RemoveEventListener(ConstMessage.ACTIVITY_REWARD_ADD, UpdateView);
EventAgent.RemoveEventListener(ConstMessage.RED_CHANGE, UpdateView);
EventAgent.RemoveEventListener(ConstMessage.ACTIVITY_COUNT_VALUE_CHANGE, UpdateView);
}
protected override void OnShown()
{
base.OnShown();
UpdateView();
UpdateProgress();
Timers.inst.Add(1, 0, UpdateTime);
}
protected override void OnHide()
{
base.OnHide();
Timers.inst.Remove(UpdateTime);
}
private void OnClickBtnTest(EventContext context)
{
UpdateProgress();
}
private int[] _progressValuePart;
private int _partNum = 4;
private void InitProgressValueList()
{
_progressValuePart = new int[_partNum];
_ui.m_progress.target.max = _rechargeCfgs[_rechargeCfgs.Length - 1].value;
int max = (int)_ui.m_progress.target.max;
int average = (int)Mathf.Ceil((float)(_ui.m_progress.target.max / (_partNum - 1)));
_progressValuePart[0] = 0;
_progressValuePart[_partNum - 1] = max;
for (int i = 1; i < _partNum - 1; i++)
{
_progressValuePart[i] = i * average;
}
}
///
/// 初始化奖励的UI
///
private void InitReward()
{
// 包子图
// 大奖icon
}
private void UpdateProgress()
{
int max = (int)_ui.m_progress.target.max;
long count = _activityInfo.CountValue;
// 确定count的区间
if (count == 0 || count == max)
{
_ui.m_progress.target.value = count;
}
else
{
int index = 1;
for (; index < _progressValuePart.Length; index++)
{
if (count < _progressValuePart[index])
{
--index;
break;
}
}
// 计算进度条最小取值和最大取值,避免因为图标遮挡造成视觉错误
int minProgressValue = _progressValuePart[index] + _minProgressOffset;
int maxProgressValue = _progressValuePart[index + 1] + _maxProgressOffset;
if (count == _progressValuePart[index] || count == _progressValuePart[index + 1])
{
_ui.m_progress.target.value = count;
}
else
{
_ui.m_progress.target.value = Mathf.Clamp(count, minProgressValue, maxProgressValue);
}
// 检测玩家是否领取奖励
UpdateRewardState(index);
}
}
private void UpdateTime(object param)
{
long curTime = TimeHelper.ServerNow();
long endTime = _activityInfo.EndTime;
_ui.m_txtTime.text = TimeUtil.FormattingTimeTo_DDHHmm(endTime - curTime);
}
private void UpdateView()
{
_activityInfo = ActivityGlobalDataManager.Instance.GetActivityInfoOneByType(ActivityType.DBGift);
UpdateProgress();
}
private struct GetState
{
public int index;
public bool canGet;
}
///
///
///
/// 玩家可领取的最大奖励index
private void UpdateRewardState(int index)
{
GComponent comProBonusGroup = _ui.m_progress.m_comProBonusGroup.asCom;
for(int i = 0; i < _partNum; i++)
{
bool arrive = (i <= index);
UI_ComProBonus2 bonus = UI_ComProBonus2.Proxy(comProBonusGroup.GetChildAt(i));
bonus.target.data = new GetState
{
index = i,
canGet = arrive
};
// 玩家已经达到的奖励
if (arrive)
{
// 已领
if (_activityInfo.GetRewards.IndexOf(_rechargeCfgs[i].id) > 0)
{
bonus.m_imgGot.visible = true;
bonus.target.touchable = false;
// 隐藏红点
RedDotController.Instance.SetComRedDot(bonus.target, false);
}
// 未领
else
{
bonus.m_imgGot.visible = false;
// 显示红点
RedDotController.Instance.SetComRedDot(bonus.target, true);
}
}
bonus.target.onClick.Set(OnClickGift);
UI_ComProBonus2.ProxyEnd();
}
}
private void OnClickGift(EventContext eventContext)
{
GObject gObject = (GObject)eventContext.data;
GetState getState = (GetState)gObject.data;
if (getState.canGet)
{
ActivityGlobalSProxy.ReqGetActivityBonus(_activityInfo.ActivityId, _rechargeCfgs[getState.index].id).Coroutine();
}
else
{
// 显示奖励详细列表
//ViewManager.Show
}
}
}
}