using System.Collections.Generic; using UnityEngine; using FairyGUI; using DG.Tweening; using System; using Spine.Unity; using FGUI.ZM_Pass_14; using FGUI.ZM_Common_01; namespace BallKingdomCrush { public class PassViewUI : BaseUI { private PassViewUICtrl ctrl; private PassViewModel model; private FGUI.ZM_Pass_14.com_pass_view ui; List passing_list = new List(); List Durationtasks_list = new List(); List Passportrewards_list = new List(); private Vector2 start_pos; private Action closeCallback; public PassViewUI(PassViewUICtrl ctrl) : base(ctrl) { uiName = UIConst.PassViewUI; this.ctrl = ctrl; } protected override void SetUIInfo(UIInfo uiInfo) { uiInfo.packageName = "ZM_Pass_14"; uiInfo.assetName = "com_pass_view"; uiInfo.layerType = UILayerType.Popup; uiInfo.isNeedOpenAnim = false; uiInfo.isNeedCloseAnim = false; uiInfo.isNeedUIMask = true; } #region 生命周期 protected override void OnInit() { model = ModuleManager.Instance.GetModel(ModelConst.PassViewModel) as PassViewModel; } protected override void OnClose() { GameHelper.showGameUI = true; HallManager.Instance.UpdateSecondEvent -= upData; } protected override void OnBind() { ui = baseUI as FGUI.ZM_Pass_14.com_pass_view; } protected override void OnOpenBefore(object args) { if (Screen.safeArea.y != 0) { ui.gold.y += Screen.safeArea.y; ui.close.y += Screen.safeArea.y; } if (GameHelper.GetGameday() != DateTime.Now.Day) { DataMgr.GameTime.Value = 0; SaveData.GetSaveObject().time_task_record = new List(); GameHelper.SetGameday(); } HallManager.Instance.UpdateSecondEvent += upData; InitView(); } protected override void OnOpen(object args) { } protected override void OnHide() { } protected override void OnDisplay(object args) { } #endregion #region 消息 protected override void AddListener() { GameDispatcher.Instance.AddListener(GameMsg.IAP_PAY_SUCCESS, pay_success); GameDispatcher.Instance.AddListener(GameMsg.Update101, OnUpdate101); } protected override void RemoveListener() { GameDispatcher.Instance.RemoveListener(GameMsg.IAP_PAY_SUCCESS, pay_success); GameDispatcher.Instance.AddListener(GameMsg.Update101, OnUpdate101); } #endregion public void OnUpdate101(object a = null) { com_gold btn_gold = ui.gold as com_gold; btn_gold.text_gold.text = $"{DataMgr.Coin.Value:N0}"; } private void pay_success(object a) { string type = (string)a; if (type == IAPPayManager.PRODUCT_PASS_BONUS) { DOVirtual.DelayedCall(0.5f, () => { SaveData.GetSaveObject().is_get_battlepass = true; int gold = 0; int _out = 0; int _back = 0; int _refresh = 0; List paylist = SaveData.GetSaveObject().battle_pass_paylist; for (int i = 0; i < Passportrewards_list.Count; i++) { if (GameHelper.GetBattleLv() > i) { if (Passportrewards_list[i].Paid_rewards_type == 0) gold += Passportrewards_list[i].Paid_rewards_num; else if (Passportrewards_list[i].Paid_rewards_type == 1) _out += Passportrewards_list[i].Paid_rewards_num; else if (Passportrewards_list[i].Paid_rewards_type == 2) _back += Passportrewards_list[i].Paid_rewards_num; else if (Passportrewards_list[i].Paid_rewards_type == 3) _refresh += Passportrewards_list[i].Paid_rewards_num; SaveData.GetSaveObject().battle_pass_paylist.Add(i + 1); } else break; } GameDispatcher.Instance.Dispatch(GameMsg.Gold_refresh); // GameHelper.AddItemNumber(0, _out); // GameHelper.AddItemNumber(1, _back); // GameHelper.AddItemNumber(2, _refresh); // GameDispatcher.Instance.Dispatch(GameMsg.Sheep_item_refresh); SaveData.SaveDataFunc(); GameHelper.ShowTips("purchase_succ", true); if (gold > 0) { GetReward(gold, -1); } ui.pass_list.numItems = Passportrewards_list.Count; ui.btn_recive.visible = false; }); } } //初始化页面逻辑 private void InitView() { ui.close.SetClick(() => { UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.PassViewUI_Close); }); ui.btn_recive.ad_icon.visible = false; ui.gold.GetChild("text_gold").text = $"{DataMgr.Coin.Value:N0}"; passing_list = ConfigSystem.GetConfig(); Durationtasks_list = ConfigSystem.GetConfig(); Passportrewards_list = ConfigSystem.GetConfig(); setPassCom(); gotoItem(); ui.btn_tips.SetClick(() => { ui.t0.Play(); tips_time = 0; }); } private int tips_time = 20; void upData() { ui.remain_time.text = CommonHelper.TimeFormat( SaveData.GetSaveObject().battle_pass_time + Passportrewards_list[0].Passportrewards_CD * 24 * 3600 - Convert.ToInt32(GameHelper.GetNowTime()), CountDownType.Day); if ((SaveData.GetSaveObject().battle_pass_time + Passportrewards_list[0].Passportrewards_CD * 24 * 3600) < GameHelper.GetNowTime()) { SaveData.GetSaveObject().battle_pass_time = (int)GameHelper.GetNowTime(); SaveData.GetSaveObject().battle_pass_freelist.Clear(); SaveData.GetSaveObject().battle_pass_paylist.Clear(); SaveData.GetSaveObject().is_get_battlepass = false; GameHelper.ResetGameExp(); SaveData.SaveDataFunc(); setPassCom(); } tips_time++; if (tips_time > 20) { ui.t0.Play(); tips_time = 0; } } void setPassCom() { if ((SaveData.GetSaveObject().battle_pass_time + Passportrewards_list[0].Passportrewards_CD * 24 * 3600) < GameHelper.GetNowTime()) { SaveData.GetSaveObject().battle_pass_time = (int)GameHelper.GetNowTime(); GameHelper.ResetGameExp(); SaveData.GetSaveObject().battle_pass_freelist.Clear(); SaveData.GetSaveObject().battle_pass_paylist.Clear(); SaveData.GetSaveObject().is_get_battlepass = false; SaveData.SaveDataFunc(); } upData(); ui.pass_list.itemRenderer = battle_itemRender; ui.pass_list.numItems = Passportrewards_list.Count; ui.text_level.text = GameHelper.GetBattleLv().ToString(); ui.progress_pass.value = GameHelper.GetGameExp(); if (GameHelper.GetBattleLv() >= Passportrewards_list.Count) { ui.progress_pass.max = Passportrewards_list[GameHelper.GetBattleLv() - 1].Eliminating_quantity; ui.progress_pass.text_num.text = GameHelper.GetGameExp().ToString(); } else { ui.progress_pass.max = Passportrewards_list[GameHelper.GetBattleLv()].Eliminating_quantity; ui.progress_pass.text_num.text = GameHelper.GetGameExp() + "/" + Passportrewards_list[GameHelper.GetBattleLv()].Eliminating_quantity; } ui.btn_recive.visible = !SaveData.GetSaveObject().is_get_battlepass; ui.btn_recive.SetClick(() => { // if (!GameHelper.IsGiftSwitch())UnlockPass(); UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.PassunlockUI_Open); }); } void setItemUrl(GLoader loader, int urltype) { if (urltype == 0) loader.url = "ui://ZM_Pass_14/master_pass_box_01_gold"; else if (urltype == 4) loader.url = "ui://ZM_Pass_14/master_pass_box_02_gold"; else if (urltype == 1) loader.url = "ui://ZM_Common_01/main_prize_iocn_dj_03"; else if (urltype == 2) loader.url = "ui://ZM_Common_01/main_prize_iocn_dj_02"; else if (urltype == 3) loader.url = "ui://ZM_Common_01/main_prize_iocn_dj_01"; } void seItemClick(com_item_award item, int number, int type, int index = 0) { if (type == 0) { GetReward(number, index); getRewardIndex = -1; } else { GameHelper.AddItemNumber(type - 1, number); GameDispatcher.Instance.Dispatch(GameMsg.Sheep_item_refresh); } ui.pass_list.numItems = Passportrewards_list.Count; GameDispatcher.Instance.Dispatch(GameMsg.RefreshRedDot); } private void UnlockPass() { GameHelper.ShowVideoAd("pass_unlock", isSuccess => { if (isSuccess) { SaveData.GetSaveObject().is_get_battlepass = true; int gold = 0; int out_ = 0; int back_ = 0; int refresh_ = 0; for (int i = 0; i < Passportrewards_list.Count; i++) { if (GameHelper.GetBattleLv() > i) { if (Passportrewards_list[i].Paid_rewards_type == 0) gold += Passportrewards_list[i].Paid_rewards_num; else if (Passportrewards_list[i].Paid_rewards_type == 1) out_ += Passportrewards_list[i].Paid_rewards_num; else if (Passportrewards_list[i].Paid_rewards_type == 2) back_ += Passportrewards_list[i].Paid_rewards_num; else if (Passportrewards_list[i].Paid_rewards_type == 3) refresh_ += Passportrewards_list[i].Paid_rewards_num; SaveData.GetSaveObject().battle_pass_paylist.Add(i + 1); } else break; } if (gold > 0) { GetReward(gold); // var start = GameHelper.GetUICenterPosition(ui.btn_recive); // var end = GameHelper.GetUICenterPosition(ui.gold.GetChild("ani_node")); // var rewardData = new RewardData(); // var rewardSingleData = new RewardSingleData(101, gold, RewardOrigin.AdTask); // rewardData.AddReward(rewardSingleData); // rewardData.displayType = RewardDisplayType.RewardFly | RewardDisplayType.ValueChange; // rewardData.AddCompleted((isScu) => // { // DOVirtual.DelayedCall(0.5f, () => // { // var startNum = PreferencesMgr.Instance.Currency101 - gold; // DOVirtual.Float((float)startNum, (float)GameHelper.GetGoldNumber(), 1f, // value => { ui.gold.GetChild("text_gold").text = ((int)value).ToString(); }); // }); // }); // GameDispatcher.Instance.Dispatch(GameMsg.GetReward, rewardData); } GameHelper.AddItemNumber(0, out_); GameHelper.AddItemNumber(1, back_); GameHelper.AddItemNumber(2, refresh_); GameDispatcher.Instance.Dispatch(GameMsg.Sheep_item_refresh); ui.pass_list.numItems = Passportrewards_list.Count; ui.btn_recive.visible = false; SaveData.SaveDataFunc(); } }); } private void GetReward(int awardNum, int index = 0) { var rewardData = new RewardData(); var end = GameHelper.GetUICenterPosition((ui.gold as com_gold).img); var rewardSingleData = new RewardSingleData(101, awardNum, RewardOrigin.Passview, index) { startPosition = start_pos, endPosition = new Vector2(end.x, end.y) }; rewardData.AddReward(rewardSingleData); if (index >= 0) { rewardData.displayType = RewardDisplayType.RewardFly | RewardDisplayType.Dialog | RewardDisplayType.ValueChange; } else rewardData.displayType = RewardDisplayType.RewardFly | RewardDisplayType.ValueChange; rewardData.AddCompleted(success => { if (success) { var startNum = DataMgr.Coin.Value - awardNum; DOVirtual.Float((float)startNum, (float)GameHelper.GetGoldNumber(), 1f, value => { ui.gold.GetChild("text_gold").text = GameHelper.Get101Str((decimal)value); }).OnComplete(() => { // 动画完成时确保最终值被正确设置 ui.gold.GetChild("text_gold").text = GameHelper.Get101Str((decimal)GameHelper.GetGoldNumber()); }); } }); GameDispatcher.Instance.Dispatch(GameMsg.GetReward, rewardData); } private int getRewardIndex = -1; void gotoItem() { if (getRewardIndex > 0) { ui.pass_list.ScrollToView(getRewardIndex - 1); } } void battle_itemRender(int index, GObject obj) { index++; com_pass_item item = (com_pass_item)obj; int pass_level = GameHelper.GetBattleLv(); item.index_text.text = index.ToString(); item.free_item.type.selectedIndex = 0; item.pay_item.type.selectedIndex = 1; List freelist = SaveData.GetSaveObject().battle_pass_freelist; List paylist = SaveData.GetSaveObject().battle_pass_paylist; if (index > 0) { item.free_item.number_text.text = "x" + GameHelper.Get101Str(Passportrewards_list[index - 1].Free_rewards_num); item.pay_item.number_text.text = "x" + GameHelper.Get101Str(Passportrewards_list[index - 1].Paid_rewards_num); if (Passportrewards_list[index - 1].Free_rewards_type == 0) { setItemUrl(item.free_item.item_loader, 0); } else { setItemUrl(item.free_item.item_loader, Passportrewards_list[index - 1].Paid_rewards_type); } if (Passportrewards_list[index - 1].Paid_rewards_type == 0) { setItemUrl(item.pay_item.item_loader, 4); } else { setItemUrl(item.pay_item.item_loader, Passportrewards_list[index - 1].Paid_rewards_type); // if (Passportrewards_list[index - 1].Paid_rewards_type >= 1 && Passportrewards_list[index - 1].Paid_rewards_type <= 3) // { // item.pay_item.item_loader.SetScale(0.55f, 0.55f); // } } if (index <= pass_level)//等级超过了 { if (freelist.Contains(index))//领取过 { item.free_item.state.selectedIndex = 2; item.free_item.ani_node.visible = false; item.free_item.SetClick(() => { }); } else { if (getRewardIndex < 0) getRewardIndex = index; item.free_item.state.selectedIndex = 1; item.free_item.SetClick(() => { freelist.Add(index); SaveData.SaveDataFunc(); seItemClick(item.free_item, Passportrewards_list[index - 1].Free_rewards_num, Passportrewards_list[index - 1].Free_rewards_type, index - 1); }); } if (paylist.Contains(index))//领取过 { item.pay_item.state.selectedIndex = 2; item.pay_item.SetClick(() => { }); } else { if (SaveData.GetSaveObject().is_get_battlepass) { if (getRewardIndex < 0) getRewardIndex = index; item.pay_item.state.selectedIndex = 1; item.pay_item.SetClick(() => { paylist.Add(index); SaveData.SaveDataFunc(); seItemClick(item.pay_item, Passportrewards_list[index - 1].Paid_rewards_num, Passportrewards_list[index - 1].Paid_rewards_type, -1); }); } else { item.pay_item.state.selectedIndex = 4; item.pay_item.SetClick(() => { // if (!GameHelper.IsGiftSwitch()) UnlockPass(); UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.PassunlockUI_Open); }); } } } else { item.free_item.state.selectedIndex = 0;//不可领取 item.free_item.SetClick(() => { GameHelper.ShowTips("no_enough_lv_ps", true); }); item.pay_item.SetClick(() => { if (SaveData.GetSaveObject().is_get_battlepass) { GameHelper.ShowTips("no_enough_lv_ps", true); } else { // if (!GameHelper.IsGiftSwitch()) UnlockPass(); UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.PassunlockUI_Open); } }); if (SaveData.GetSaveObject().is_get_battlepass) { item.pay_item.state.selectedIndex = 0; } else { item.pay_item.state.selectedIndex = 3; } } } if (index < pass_level)//进度条 { item.is_full.selectedIndex = com_pass_item.Is_full_full; } else if (index >= pass_level) { item.is_full.selectedIndex = com_pass_item.Is_full_full; } else { item.is_full.selectedIndex = com_pass_item.Is_full_full; } if (index == 0) { // item.state.selectedIndex = 3; // index++; } if (index == 1) { item.state.selectedIndex = 0; if (pass_level > 0) { item.progress_0_top.height = 154; if (((float)(GameHelper.GetGameExp() - Passportrewards_list[0].Eliminating_quantity) / (Passportrewards_list[1].Eliminating_quantity - Passportrewards_list[0].Eliminating_quantity)) > 0.5) { item.progress_0_down.height = 175; } else { item.progress_0_down.height = (float)(GameHelper.GetGameExp() - Passportrewards_list[0].Eliminating_quantity) / (Passportrewards_list[1].Eliminating_quantity - Passportrewards_list[0].Eliminating_quantity) * 2 * 175; } } else { item.progress_0_top.height = (float)GameHelper.GetGameExp() / Passportrewards_list[0].Eliminating_quantity * 154; item.progress_0_down.height = 0; } } else if (index == Passportrewards_list.Count) { item.state.selectedIndex = 2; if (((float)(GameHelper.GetGameExp() - Passportrewards_list[index - 2].Eliminating_quantity) / (Passportrewards_list[index - 1].Eliminating_quantity - Passportrewards_list[index - 2].Eliminating_quantity)) > 0.5) { float height = (((float)(GameHelper.GetGameExp() - Passportrewards_list[index - 2].Eliminating_quantity) / (Passportrewards_list[index - 1].Eliminating_quantity - Passportrewards_list[index - 2].Eliminating_quantity)) - 0.5f) * 2 * 188; if (height > 188) height = 188; item.progress_2_top.height = height; } else item.progress_2_top.height = 0; } else { item.state.selectedIndex = 1; if (pass_level >= index) { item.progress_1_top.height = 192; } else { if (pass_level == (index - 1)) { if (((float)(GameHelper.GetGameExp() - Passportrewards_list[index - 2].Eliminating_quantity) / (Passportrewards_list[index - 1].Eliminating_quantity - Passportrewards_list[index - 2].Eliminating_quantity)) > 0.5) { float height = (((float)(GameHelper.GetGameExp() - Passportrewards_list[index - 2].Eliminating_quantity) / (Passportrewards_list[index - 1].Eliminating_quantity - Passportrewards_list[index - 2].Eliminating_quantity)) - 0.5f) * 2 * 192; if (height > 192) height = 192; item.progress_1_top.height = height; } else item.progress_1_top.height = 0; } else { item.progress_1_top.height = 0; } } if (pass_level == index) { if (((float)(GameHelper.GetGameExp() - Passportrewards_list[index - 1].Eliminating_quantity) / (Passportrewards_list[index].Eliminating_quantity - Passportrewards_list[index - 1].Eliminating_quantity)) <= 0.5) { float height = (float)(GameHelper.GetGameExp() - Passportrewards_list[index - 1].Eliminating_quantity) / (Passportrewards_list[index].Eliminating_quantity - Passportrewards_list[index - 1].Eliminating_quantity) * 2 * 188; if (height > 188) height = 188; item.progress_1_down.height = height; } else { item.progress_1_down.height = 188; } } else { if (pass_level > index) item.progress_1_down.height = 188; else item.progress_1_down.height = 0; } } } } }