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() { 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(); ProgressAutoLocate(); UpdateTime(null); Timers.inst.Add(1, 0, UpdateTime); UpdateButtonState(); } 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); // 使列表宽度等于子节点的总宽度 float itemWidth = _rewardListUI.GetChildAt(0).width; float columnGap = _rewardListUI.columnGap; _rewardListUI.width = CalculateListWidth(_rewardListUI.numItems, itemWidth, columnGap); Timers.inst.StartCoroutine(InitProgressWidth()); } private IEnumerator InitProgressWidth() { yield return new WaitForSeconds(0.5f); // 根据列表 初始化进度条长度 float marginLeft = 149; GProgressBar gProgressBar = _ui.m_panel.m_scrollPane.m_progress; gProgressBar.width = marginLeft + _rewardListUI.GetChildAt(_rewardListUI.numChildren - 1).position.x - _rewardListUI.GetChildAt(0).position.x; // 初始化进度条值 int indexDay = ActivityAfuGiftDataManager.Instance.GetIndexDay(); gProgressBar.value = CalculateProgressCount(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 float CalculateListWidth(int num, float itemWidth, float columnGap) { return num * itemWidth + (num - 1) * columnGap; } private double CalculateProgressCount(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) { long curTime = TimeHelper.ServerNow(); long endTime = ActivityAfuGiftDataManager.Instance.GetEndTime(); _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) { // Vip专属 if (isVip) { getState = ActivityAfuGiftDataManager.Instance.GetSuperRewardStateByDay(dayIndex - 1); } else { getState = ActivityAfuGiftDataManager.Instance.GetNormalRewardStateByDay(dayIndex - 1); } switch (getState) { case ConstBonusStatus.CAN_NOT_GET: break; case ConstBonusStatus.CAN_GET: canGet = true; comItem.m_grpGot.visible = false; // 显示红点 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; } } 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) { GetReward(getState, (int)obj.parent.data + 1); } else { GoodsItemTipsController.ShowItemTips(getState.rewardID); } } private async Task GetReward(GetState getState, int indexDay) { ActivityAfuGiftDataManager.Instance.ClearGetReward(); await ActivityAfuGiftProxy.ReqGetReward(getState.isVip, indexDay); // 奖励弹窗 BonusController.TryShowBonusList(ActivityAfuGiftDataManager.Instance.GetRewardList); } private async Task GetAllReward() { int passDay = ActivityAfuGiftDataManager.Instance.GetIndexDay(); ActivityAfuGiftDataManager.Instance.ClearGetReward(); for (int i = passDay - 1; i >= 0; i--) { if (ActivityAfuGiftDataManager.Instance.GetNormalRewardStateByDay(i) == ConstBonusStatus.CAN_GET) { await ActivityAfuGiftProxy.ReqGetReward(false, (i + 1)); } if (ActivityAfuGiftDataManager.Instance.GetSuperRewardStateByDay(i) == ConstBonusStatus.CAN_GET) { await ActivityAfuGiftProxy.ReqGetReward(true, (i + 1)); } } // 奖励弹窗 BonusController.TryShowBonusList(ActivityAfuGiftDataManager.Instance.GetRewardList); } /// /// 领取所有奖励按钮 /// private void OnClickBtnGet() { if (!ActivityAfuGiftDataManager.Instance.GetIsBuy()) { // 跳转充值画面 ReqShopBuy(990005).Coroutine(); return; } GetAllReward(); } /// /// 充值,领取东西后调用 /// private void UpdateState() { // 更新底部按钮文本 _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); } } } }