using System; using FairyGUI; using DG.Tweening; using UnityEngine; using BingoBrain.Core; using BingoBrain.HotFix; using System.Collections.Generic; using FGUI.JRewardPop; using Newtonsoft.Json; namespace BingoBrain { public class ExtraItemUI : BaseUI { private ExtraItemUICtrl ctrl; private ExtraItemModel model; private FGUI.JRewardPop.com_extraItem ui; private RewardedVal data; public int curRatio; public List ratioList = new(); public List chanceList = new(); public Action onfinish; private int type; private bool isRead; private float duration = 3; private float backDuration = 0.3f; private int round = 7; private float sizeX = 150; private bool isDouble; public ExtraItemUI(ExtraItemUICtrl ctrl) : base(ctrl) { uiName = UIConst.ExtraItemUI; this.ctrl = ctrl; } protected override void SetUIInfo(UIInfo uiInfo) { uiInfo.packageName = "JRewardPop"; uiInfo.assetName = "com_extraItem"; uiInfo.layerType = UILayerType.Popup; uiInfo.isNeedOpenAnim = true; uiInfo.isNeedCloseAnim = true; uiInfo.isNeedUIMask = true; } #region 生命周期 protected override void OnInit() { } protected override void OnClose() { ui?.FadeOut(); onfinish?.Invoke(isRead); if (type != ui._Extra_extraCoin) { if (type != ui._Extra_extraCard) { data.Release(); } } } protected override void OnBind() { ui = baseUI as com_extraItem; } protected override void OnOpenBefore(object args) { Audio.Instance.PlayDynamicEffect("pop_open"); } protected override void OnOpen(object args) { ui?.FadeIn(); data = args as RewardedVal; if (data.Id == 102) ui.curr_type.selectedIndex = 1; if (data != null) { curRatio = 1; onfinish = data.onfinish; type = data.cont_index; var adRewardVo = GameHelper.GetChanceByIdAndNum(data.Id, (int)data.Sum); Debug.Log(JsonConvert.SerializeObject(adRewardVo)); if (adRewardVo != null) { foreach (var chance in adRewardVo.probability) { chanceList.Add(chance); } foreach (var ratio in adRewardVo.ratio) { ratioList.Add(ratio); } } if (ui != null) { ui.cont_extra.selectedIndex = data.cont_index; ui.com_roll.list_roll.numItems = ratioList.Count; ui.com_roll.list_roll.SetVirtualAndLoop(); ui.com_roll.list_roll.itemRenderer = OnItemRender; ui.btn_more.SetClick(OnBtnMoreClick); ui.btn_claim.SetClick(OnBtnClaimClick); ui.closeButton.SetClick(OnBtnClaimClick); ui.com_roll.list_roll.touchable = false; ui.com_roll.list_roll.numItems = ratioList.Count; var posX = GetPosByIndex(0); ui.com_roll.list_roll.scrollPane.SetPosX(posX, false); if (data.cont_index == ui._Extra_extraCoin) { ui.text_num.text = $"+{GameHelper.GetNoDecimalUnitStr(data.Sum)}"; } else if (data.cont_index == ui._Extra_extraCard) { ui.text_cardnum.text = $"+{data.Sum}"; } if (type != ui._Extra_extraball) { GameHelper.DelayedShowGObject(this, ui.closeButton, ui.btn_claim); } } } } private void OpenCloseClick(bool val) { ui.btn_more.touchable = val; ui.btn_claim.touchable = val; ui.closeButton.touchable = val; } private void OnBtnClaimClick() { GameHelper.ShowInterstitial("interstitial_skipAd"); OpenCloseClick(false); if (data.cont_index == ui._Extra_extraball) { data.onResult?.Invoke(false); isRead = false; } else { isRead = true; GetReward(); } CtrlCloseUI(); } private void OnBtnMoreClick() { isRead = true; var val = string.Empty; if (data.cont_index == ui._Extra_extraCoin) { val = "reward_extraCoin"; } else if (data.cont_index == ui._Extra_extraCard) { val = "reward_extraCard"; } else if (data.cont_index == ui._Extra_extraball) { val = "reward_extraBall"; } else if (data.cont_index == ui._Extra_extracash3) { val = "reward_extraCashProp3"; } else if (data.cont_index == ui._Extra_extracash5) { val = "reward_extraCashProp5"; } GameHelper.GetVideo(val, isSuccess => { if (isSuccess) { OpenCloseClick(false); isDouble = true; var index = GlobalHarmony.GetChanceList(chanceList); curRatio = ratioList[index]; Debug.Log("x" + curRatio); Audio.Instance.PlayDynamicEffect("extra_ad"); MoveToListPosByIndex(ui.com_roll.list_roll, index, GetReward); } }); } void MoveToListPosByIndex(GList list, int index, Action onfinish) { var posX = GetPosByIndex(index); var originX = GetPosByIndex(0); var targetX = posX + sizeX * ratioList.Count * round; var targetOffset = targetX + sizeX / 2; DOVirtual.Float(originX, targetOffset, duration, (prg) => { while (prg > sizeX * ratioList.Count) { prg -= sizeX * ratioList.Count; } list.scrollPane.SetPosX(prg, false); }).SetEase(Ease.OutSine); DOVirtual.DelayedCall(duration + Time.deltaTime, delegate { DOVirtual.Float(targetOffset, targetX, backDuration, (prg) => { while (prg > sizeX * ratioList.Count) { prg -= sizeX * ratioList.Count; } list.scrollPane.SetPosX(prg, false); }).SetEase(Ease.OutSine).OnComplete(() => { DOVirtual.DelayedCall(1.5f, () => { onfinish?.Invoke(); }); }); }); } float GetPosByIndex(int index) { return GetPosByIndex(index, ratioList.Count, sizeX, ui.com_roll.list_roll.width / 2); } public static float GetPosByIndex(int index, int count, float size, float viewCenter) { return size * (count - 3 + index) + (viewCenter); } private void GetReward() { data.onResult?.Invoke(true); if (data.cont_index == ui._Extra_extraCoin) { // 显示金币变化 ui.text_num.text = "+" + GameHelper.GetNoDecimalUnitStr(data.Sum * curRatio); data.Sum *= curRatio; GameHelper.GetRewardOnly(data.Id, (decimal)data.Sum, RewardOrigin.Play); } else if (data.cont_index == ui._Extra_extraCard) { data.Sum *= curRatio; GameHelper.GetRewardOnly(data.Id, (decimal)data.Sum, RewardOrigin.Play); } else if (data.cont_index == ui._Extra_extracash3) { // 3个钞票格子 var count = data.cont_index * data.cont_index; GameDispatcher.Instance.Dispatch(BingoInfo.AddMoneyCell, count); } else if (data.cont_index == ui._Extra_extracash5) { // 5个钞票格子 var count = (int)data.Sum * curRatio; GameDispatcher.Instance.Dispatch(BingoInfo.AddMoneyCell, count); } else if (data.cont_index == ui._Extra_extraball) { // 加剩余球 var val = curRatio * (int)data.Sum; val = Mathf.Clamp(val, 0, 5); gameDispatcher.Dispatch(BingoInfo.AddBallSum, val); BingoCell.AddCallSum++; } CtrlCloseUI(); } private void OnItemRender(int index, GObject item) { if (item is com_multi tmpItem) { tmpItem.text_multi.text = "X" + ratioList[index]; } } #endregion } }