using System; using System.Collections.Generic; using asap.core; using cfg; using DG.Tweening; using game; using GameCore; using Script.RuntimeScript; using Script.RuntimeScript.model.Data; using UniRx; public partial class EventSandDigPanelLogic : BasePanel { private const int ShowRewardCount = 5; private List _clampRewards = new List(); private DiggingGameManager _manager; private SandDigServerData _serverData; private CompositeDisposable _disposable = new CompositeDisposable(); private Timer _timer; private RewardItemNew _flyRewardEffect; protected override void Start() { base.Start(); AddEvent(); GContext.container.Resolve().InspectTriggerGuide("EventSandDigPanel"); _clampRewards.Add(_reward1.GetComponent()); _clampRewards.Add(_reward2.GetComponent()); _clampRewards.Add(_reward3.GetComponent()); _clampRewards.Add(_reward4.GetComponent()); _clampRewards.Add(_reward5.GetComponent()); _flyRewardEffect = _flyReward.GetComponent(); _flyReward.gameObject.SetActive(false); _finished.gameObject.SetActive(false); _supply.gameObject.SetActive(false); _close.onClick.AddListener(OnCloseBtn); _confirm.onClick.AddListener(OnCloseBtn); _questionmark.onClick.AddListener(OnHelpBtn); _manager = GContext.container.Resolve(); _serverData = _manager.DataModel.GetServerData(); UpdateReward(); UpdateView(); ShowTime(); ShowInfo(); } async void ShowInfo() { bool isShowInfo = _manager.NewInfo(); if (isShowInfo) { await UIManager.Instance.ShowUI(UITypes.EventSandDigInfoPopupPanel); } } public void AddEvent() { GContext.OnEvent().Subscribe(OnPassClamp).AddTo(_disposable); GContext.OnEvent().Subscribe(OnUpdateDigCount).AddTo(_disposable); GContext.OnEvent().Subscribe(OnFlyReward).AddTo(_disposable); GContext.OnEvent().Subscribe(OnCloseAwardPanel).AddTo(_disposable); } private void OnCloseAwardPanel(RewardPanelClose data) { UpdateReward(); } public void ClearEvent() { _disposable.Dispose(); } private void OnHelpBtn() { UIManager.Instance.ShowUI(UITypes.EventSandDigInfoPopupPanel); } private void OnCloseBtn() { DiggingGameManager diggingGameManager = GContext.container.Resolve(); if (!diggingGameManager.IsCanClick) { return; } if (diggingGameManager.GameState != SandDigGameState.Going && diggingGameManager.GameState != SandDigGameState.Normal) { return; } diggingGameManager.GameState = SandDigGameState.Normal; diggingGameManager.BroadLogic?.ClearEvent(); ClearEvent(); UIManager.Instance.DestroyUI(UITypes.EventSandDigPanel); GContext.Publish(new UnloadActToNextAct()); } private void OnPassClamp(EventSandDigNewClamp obj) { UpdateRewardBar(); UpdateView(); } private void UpdateView() { UpdateDigCount(); int propId = GContext.container.Resolve().GetActivityPropId(); if (propId > 0) { cfg.Item item = GContext.container.Resolve().GetItemData(propId); GContext.container.Resolve().SetImageSprite(_ticket, item.Icon, PanelName); } bool isPassAllClamps = GContext.container.Resolve().IsPassAllClamps(); icon_ticket.SetActive(!isPassAllClamps); _finished.gameObject.SetActive(isPassAllClamps); int index = GContext.container.Resolve().GetCurClampIndex(); index++; int all = GContext.container.Resolve().GetAllClampCount(); string clampName = LocalizationMgr.GetFormatTextValue("UI_EventSandDigPanel_1", index, all); _titleName.text = clampName; } private void OnUpdateDigCount(EventSandDigPropUpdate data) { UpdateDigCount(); } private async void OnFlyReward(EventSandDigAddItem item) { ItemData itemDataNew = new ItemData(); itemDataNew.id = item.Id; itemDataNew.count = item.Count; _flyReward.transform.position = item.Pos; _flyReward.gameObject.SetActive(true); _flyRewardEffect.SetRewardPopupData(itemDataNew, false); await _flyRewardEffect.PlayClose(); await _flyRewardEffect.ParticleAttractor(); _flyReward.gameObject.SetActive(false); } private void UpdateDigCount() { int digCount = _manager.DataModel.GetDigCount(); if (digCount <= 0) { _num.text = $"0"; } else { _num.text = ConvertTools.GetNumberString(_manager.DataModel.GetDigCount()); } } void UpdateRewardBar() { float fillAmount = _bar.fillAmount + 1f / ShowRewardCount; _bar.DOFillAmount(fillAmount, 0.5f).OnComplete(() => GContext.Publish(new ShowData())); } private void UpdateReward() { int curClampId = _serverData.ClampId; int curIndex; if (curClampId < 0) { curIndex = _manager.DataModel.AllClamps.Count; } else { curIndex = _manager.DataModel.AllClamps.IndexOf(curClampId); } //int[] clampIds = new[] { ShowRewardCount }; //int firstClampId = _manager.DataModel.AllClamps[0]; int clampCount = _manager.DataModel.AllClamps.Count; DiggingGameManager.LogError("总管卡数量:" + clampCount); //int endClampId = _manager.DataModel.AllClamps[clampCount - 1]; int maxIndex = clampCount - 1; int startIndex; if (curIndex <= 2) { startIndex = 0; } else if (curIndex > maxIndex - ShowRewardCount + 1) { startIndex = maxIndex - ShowRewardCount + 1; } else { startIndex = curIndex - 2; if (startIndex > clampCount - ShowRewardCount) { startIndex = clampCount - ShowRewardCount > 0 ? clampCount - ShowRewardCount : 0; } } float perCount = 0; DiggingStageReward clampConfig; ItemData itemData; for (int i = 0; i < ShowRewardCount; i++) { int index = startIndex + i; if (index > maxIndex) { break; } int clampId = _manager.DataModel.AllClamps[index]; clampConfig = GContext.container.Resolve().TbDiggingStageReward.Get(clampId); if (clampConfig != null) { if (string.IsNullOrEmpty(clampConfig.Icon)) { itemData = GContext.container.Resolve().GetItemDataOne(clampConfig.DropID, 0); _clampRewards[i].SetRewardPopupData(itemData); } else { _clampRewards[i].SetDropIcon(clampConfig.Icon, clampConfig.DropID); } _clampRewards[i].SetReceived(index < curIndex); if (index < curIndex) { perCount++; } } else { DiggingGameManager.LogError("沙滩寻宝 管卡奖励配置错误"); } } _bar.fillAmount = perCount / ShowRewardCount; } private void ShowTime() { //显示倒计时 if (_timer == null) { int activityId = _manager.GetActivityId(); if (activityId <= 0) { _time.text = string.Empty; return; } DateTime endTime = GContext.container.Resolve().GetEventEndTime(activityId); TimeSpan now = endTime - ZZTimeHelper.UtcNow().UtcNowOffset(); double seconds = now.TotalSeconds; _timer = this.AttachTimer((float)seconds, OnTimeEnd, (elapsed) => { now = endTime - ZZTimeHelper.UtcNow().UtcNowOffset(); _time.text = LocalizationMgr.GetFormatTextValue("UI_COMMON_end", ConvertTools.ConvertTime2(now.Days, now.Hours, now.Minutes, now.Seconds)); }, useRealTime: true); } } void OnTimeEnd() { DiggingGameManager diggingGameManager = GContext.container.Resolve(); diggingGameManager.GameState = SandDigGameState.Normal; diggingGameManager.BroadLogic?.ClearEvent(); ClearEvent(); UIManager.Instance.DestroyUI(UITypes.EventSandDigPanel); GContext.Publish(new UnloadActToNextAct()); } }