using asap.core; using game; using GameCore; using Newtonsoft.Json; using System; using System.Collections.Generic; using TMPro; using UniRx; using UnityEngine; using UnityEngine.UI; public class BattlePassRecordPanel : MonoBehaviour { [Range(0f, 2f), SerializeField] private float waveWaitTimer = 1.2f; [SerializeField] BPRewardBar pfb_bar; [SerializeField] Button btn_buyLevel; //[SerializeField] //GameObject buyGO; [SerializeField] GameObject go_cashBox_mask, go_cashBox; [SerializeField] Transform tran_barParent, bottom, mask_content; [SerializeField] Button btn_GetAllReward; [SerializeField] PanelScroll sr_bars; [SerializeField] TMP_Text txt_bpRedeemCount, txt_cashBox, text_num_icon_money; List rewardBarDatas = new(); Dictionary dic_bars = new(); BattlePassDataProvider _dataProvider; PlayerItemData _playerItemData; CompositeDisposable disposables = new(); private int _curSpeicalIndex; public void Awake() { _dataProvider = GContext.container.Resolve(); _playerItemData = GContext.container.Resolve(); for (int j = 0; j < _dataProvider.BPMaxLevel; j++) { rewardBarDatas.Add(j + 1); } } public void Start() { btn_buyLevel?.onClick.AddListener(async () => await UIManager.Instance.ShowUI(UITypes.BattlePassBuyGradePopupPanel)); RefreshView(); GContext.OnEvent().Subscribe(OnGetBPReward).AddTo(disposables); GContext.OnEvent().Subscribe(_ => RefreshGetAllBtn()).AddTo(disposables); txt_bpRedeemCount.text = "100"; text_num_icon_money.text = (_playerItemData.GetExtraCoinMag(_dataProvider.curPassMain.ExpToCash)).ToString(); btn_GetAllReward.OnClickAsObservable().Subscribe(x => OnGetAllReward()).AddTo(disposables); } public async void BpVipUnlock() { await new WaitForSeconds(waveWaitTimer); if (this == null) return; var go = sr_bars.transform.Find("particle_jiesuo").gameObject; go.SetActive(true); await new WaitForSeconds(2f); if (this != null) go.SetActive(false); } public void Open() { gameObject.SetActive(true); } public void Close() { gameObject.SetActive(false); } public void RefreshView() { _dataProvider.CheckIfRefreshBattblePass(); pfb_bar.gameObject.SetActive(false); dic_bars.Clear(); for (int i = tran_barParent.childCount - 1; i >= 2; i--) { Destroy(tran_barParent.GetChild(i).gameObject); } var pos = _dataProvider.GetBarsDefaultPos() + 1; if (_dataProvider.GetBPCurLevel == _dataProvider.BPMaxLevel) { sr_bars.Init(pfb_bar.rectTransform.rect.height, pfb_bar.gameObject, null, rewardBarDatas, _currentIndex: _dataProvider.BPMaxLevel); sr_bars.verticalNormalizedPosition = 0f; // sr_bars.JumpToTarget(_dataProvider.BPMaxLevel,maxLevelOffsetY); } else { sr_bars.Init(pfb_bar.rectTransform.rect.height, pfb_bar.gameObject, null, rewardBarDatas, _currentIndex: _dataProvider.GetBarsDefaultPos() - 1); if (pos <= 3) { sr_bars.verticalNormalizedPosition = 1f; } else { sr_bars.JumpToTarget(pos); } } RefreshGetAllBtn(); sr_bars.onValueChanged.AddListener(OnValueChanged); bottom.GetComponent().sizeDelta = tran_barParent.GetComponent().sizeDelta; } private void RefreshGetAllBtn() { txt_cashBox.text = ConvertTools.GetNumberString(_playerItemData.GetExtraCoinMag(_dataProvider.GetCashBoxCount())); go_cashBox_mask.SetActive(_dataProvider.GetBPCurLevel < _dataProvider.BPMaxLevel); //btn_buyLevel.transform.parent.gameObject.SetActive(_dataProvider.GetBPCurLevel < _dataProvider.BPMaxLevel); //go_cashBox_mask.SetActive(_dataProvider.GetCashBoxCount() <= 0); btn_GetAllReward.transform.parent.gameObject.SetActive(_dataProvider.GetAllToGetRewardCount() >= 1); bottom.localPosition = new Vector3(0, -_dataProvider.GetBPCurLevel * pfb_bar.rectTransform.rect.height, 0); } void OnValueChanged(Vector2 pos) { mask_content.position = tran_barParent.position; } private void OnGetBPReward(GetBattlePassRewardEvent data) { List dropIDs = new List(); for (int i = 0; i < data.NormalLevels.Count; i++) { dropIDs.Add(_dataProvider.GetSlotDropID(data.NormalLevels[i], true)); _dataProvider.SetLevelRewardGet(data.NormalLevels[i], true); } for (int i = 0; i < data.VipLevels.Count; i++) { dropIDs.Add(_dataProvider.GetSlotDropID(data.VipLevels[i], false)); _dataProvider.SetLevelRewardGet(data.VipLevels[i], false); } var itemDatas = _playerItemData.AddItemByDropList(dropIDs); GContext.Publish(new ShowData()); _dataProvider.Data.SaveBattlePassRecord(); #if AGG using (var e = GEvent.GameEvent("bp_level_reward")) { e.AddContent("bp_level", _dataProvider.GetBPCurLevel) .AddContent("drop_id_list", JsonConvert.SerializeObject(dropIDs)); if (itemDatas != null && itemDatas.Count > 0) { for (int i = 0; i < itemDatas.Count; i++) { if (itemDatas[i].id == 1001) { e.AddContent("reward_hook", itemDatas[i].count); } else if (itemDatas[i].id == 1002) { e.AddContent("reward_cash", itemDatas[i].count); } } } } #endif RefreshGetAllBtn(); } private async void OnGetAllReward() { _dataProvider.GetAllBpRewards(); RefreshGetAllBtn(); GContext.Publish(new ShowData()); GContext.Publish(new GetAllBPRewards()); await new WaitForSeconds(0.2f); var rewardPanelTask = new RewardPopupData(); GContext.Publish(rewardPanelTask); if (rewardPanelTask.tcs != null) { await rewardPanelTask.tcs.Task; } sr_bars.JumpToTarget(_dataProvider.GetBarsDefaultPos() + 1, pfb_bar.rectTransform.rect.height / 3); // _dataProvider } private void OnDestroy() { disposables.Dispose(); } }