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(); 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) { ActivityAfuGiftProxy.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; } ActivityAfuGiftProxy.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); } } } }