using System.Collections.Generic; using UnityEngine; using FairyGUI; using FGUI.P14_PassView; using DG.Tweening; using System; using Unity.VisualScripting; using Spine.Unity; namespace FlowerPower { public class PassViewUI : BaseUI { private PassViewUICtrl ctrl; private PassViewModel model; private FGUI.P14_PassView.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 = "P14_PassView"; 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.P14_PassView.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; } var fx_coin = FXManager.Instance.SetFx(ui.gold.GetChild("ani_node") as GGraph, Fx_Type.fx_coin, ref closeCallback); fx_coin.state.SetAnimation(0, "animation", true); var fx_tujian = FXManager.Instance.SetFx(ui.ani_node, Fx_Type.fx_tujian, ref closeCallback); fx_tujian.state.SetAnimation(0, "animation", true); if (GameHelper.GetGameday() != DateTime.Now.Day) { PlayerPrefs.SetInt("_time", 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.apple_pay_success, pay_success); } protected override void RemoveListener() { GameDispatcher.Instance.RemoveListener(GameMsg.apple_pay_success, pay_success); } #endregion private void pay_success(object a) { string type = (string)a; if (type == PurchasingManager.battle_pass) { 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 successful"); if(gold > 0) { GetReward(gold); } 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.gold.GetChild("text_gold").text = $"{PreferencesMgr.Instance.Currency101:N0}"; passing_list = ConfigSystem.GetConfig().dataList; Durationtasks_list = ConfigSystem.GetConfig().dataList; Passportrewards_list = ConfigSystem.GetConfig().dataList; setPassCom(); gotoItem(); ui.btn_tips.SetClick(() => { ui.t0.Play(); tips_time = 0; }); } private int tips_time = 0; 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://P14_PassView/bp_jinbi_free"; else if (urltype == 4) loader.url = "ui://P14_PassView/bp_jinbi_premium"; else if (urltype == 1) loader.url = "ui://P01_Common/shop_gift_remove_icon"; else if (urltype == 2) loader.url = "ui://P01_Common/shop_gift_undo_icon"; else if (urltype == 3) loader.url = "ui://P01_Common/shop_gift_refresh_icon"; } 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.GetChild("ani_node")); var rewardSingleData = new RewardSingleData(101, awardNum, RewardOrigin.Passview, index) { startPosition = start_pos, endPosition = new Vector2(end.x - 150, end.y - 136) }; 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 = PreferencesMgr.Instance.Currency101 - awardNum; DOVirtual.Float((float)startNum, (float)GameHelper.GetGoldNumber(), 1f, value => { ui.gold.GetChild("text_gold").text = GameHelper.Get101Str((decimal)value); }); } }); GameDispatcher.Instance.Dispatch(GameMsg.GetReward, rewardData); } private int getRewardIndex = -1; void gotoItem(){ if (getRewardIndex > 0){ ui.pass_list.ScrollToView(getRewardIndex-1); } } private bool hasAni = false; 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; SkeletonAnimation fx_pass = null; SkeletonAnimation fx_pass2 = null; if (!hasAni) { // fx_pass = FXManager.Instance.GetFx(Fx_Type.fx_pass); // fx_pass2 = FXManager.Instance.GetFx(Fx_Type.fx_pass); // } else { fx_pass = FXManager.Instance.SetFx(item.free_item.ani_node, Fx_Type.fx_pass, ref closeCallback); fx_pass2 = FXManager.Instance.SetFx(item.pay_item.ani_node, Fx_Type.fx_pass, ref closeCallback); fx_pass.state.SetAnimation(0, "daiji", true); fx_pass2.state.SetAnimation(0, "daiji", true); if (index == Passportrewards_list.Count) { hasAni = true; } } 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(() => { // fx_pass.state.SetAnimation(0, "lingqu", false); // fx_pass.state.Complete += (a) => { // item.free_item.ani_node.visible = false; // }; freelist.Add(index); SaveData.saveDataFunc(); GameHelper.ShowTips("Successfully claimed"); 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(() => { // fx_pass2.state.SetAnimation(0, "lingqu", false); // fx_pass2.state.Complete += (a) => { // // fx_pass.state.SetAnimation(0, "lingqudaiji", true); // item.pay_item.ani_node.visible = false; // }; paylist.Add(index); SaveData.saveDataFunc(); seItemClick(item.pay_item, Passportrewards_list[index - 1].Paid_rewards_num, Passportrewards_list[index - 1].Paid_rewards_type, -1); GameHelper.ShowTips("Successfully claimed"); }); } 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("Receiving level not reached"); }); item.pay_item.SetClick(() => { if (SaveData.GetSaveobject().is_get_battlepass) { GameHelper.ShowTips("Receiving level not reached"); } 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 = 226; 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 = 173; } 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 * 173; } } else { item.progress_0_top.height = (float)GameHelper.GetGameExp() / Passportrewards_list[0].Eliminating_quantity * 226; 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 * 226; if (height > 226) height = 226; 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 = 229; } 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 * 229; if (height > 229) height = 229; 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 * 168; if (height > 168) height = 168; item.progress_1_down.height = height; } else { item.progress_1_down.height = 168; } } else { if (pass_level > index) item.progress_1_down.height = 168; else item.progress_1_down.height = 0; } } } } }