Files
ft/Client/Assets/Scripts/UI/SandDig/EventSandDigPanelLogic.cs
2026-06-29 21:18:33 +08:00

257 lines
8.0 KiB
C#

using System;
using System.Collections.Generic;
using asap.core;
using cfg;
using game;
using GameCore;
using Script.RuntimeScript;
using Script.RuntimeScript.model.Data;
using UniRx;
using UnityEngine;
public partial class EventSandDigPanelLogic : BasePanel
{
private int ShowRewardCount = 5;
private List<RewardItemNew> _clampRewards = new List<RewardItemNew>();
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<GuideDataCenter>().InspectTriggerGuide("EventSandDigPanel");
ShowRewardCount = levels.Length;
_clampRewards.Add(_reward1);
_clampRewards.Add(_reward2);
_clampRewards.Add(_reward3);
_clampRewards.Add(_reward4);
_flyRewardEffect = _flyReward.GetComponent<RewardItemNew>();
_flyReward.gameObject.SetActive(false);
_close.onClick.AddListener(OnCloseBtn);
_confirm.onClick.AddListener(OnCloseBtn);
_questionmark.onClick.AddListener(OnHelpBtn);
_btn_add.onClick.AddListener(OnClickBtnPack);
_manager = GContext.container.Resolve<DiggingGameManager>();
_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<EventSandDigNewClamp>().Subscribe(OnPassClamp).AddTo(_disposable);
GContext.OnEvent<EventSandDigPropUpdate>().Subscribe(OnUpdateDigCount).AddTo(_disposable);
GContext.OnEvent<EventSandDigAddItem>().Subscribe(OnFlyReward).AddTo(_disposable);
GContext.OnEvent<EndTransition>().Subscribe(OnCloseAwardPanel).AddTo(_disposable);
}
private void OnCloseAwardPanel(EndTransition data)
{
UpdateReward();
}
public void ClearEvent()
{
_disposable.Dispose();
}
private void OnHelpBtn()
{
UIManager.Instance.ShowUI(UITypes.EventSandDigInfoPopupPanel);
}
private void OnCloseBtn()
{
DiggingGameManager diggingGameManager = GContext.container.Resolve<DiggingGameManager>();
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)
{
GContext.Publish(new ShowData());
UpdateView();
}
private void UpdateView()
{
UpdateDigCount();
DiggingGameManager diggingGameManager = GContext.container.Resolve<DiggingGameManager>();
int propId = diggingGameManager.GetActivityPropId();
if (propId > 0)
{
cfg.Item item = GContext.container.Resolve<Tables>().GetItemData(propId);
GContext.container.Resolve<IUIService>().SetImageSprite(_ticket, item.Icon, PanelName);
}
}
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 = $"<color=red>0</color>";
}
else
{
_num.text = ConvertTools.GetNumberString(_manager.DataModel.GetDigCount());
}
}
private void UpdateReward()
{
int clampCount = _manager.DataModel.MaxCount;
int curIndex = _serverData.Index % clampCount;
DiggingGameManager.LogError("总管卡数量:" + clampCount);
int startIndex;
int offseIndex = clampCount - ShowRewardCount;
if (curIndex <= 1)
{
startIndex = 0;
}
else if (curIndex > offseIndex)
{
startIndex = offseIndex;
}
else
{
startIndex = curIndex - 1;
}
DiggingStageReward clampConfig;
for (int i = 0; i < ShowRewardCount - 1; i++)
{
int index = startIndex + i;
if (index >= clampCount)
{ break; }
int state = 0;
if (index < curIndex)
{
state = 2;
}
else if (index == curIndex)
{
state = 1;
}
levels[i].SetState(state);
levels[i].SetTextNum($"{index + 1}");
}
levels[ShowRewardCount - 1].SetTextNum($"{clampCount}");
int clampId = _serverData.ClampId;
clampConfig = GContext.container.Resolve<Tables>().TbDiggingStageReward.Get(clampId);
if (clampConfig != null)
{
List<ItemData> itemData = GContext.container.Resolve<PlayerItemData>().GetItemDataByDropIdLureInflation(_manager.DataModel.InflationRate, clampConfig.DropID);
int itemCount = itemData.Count;
for (int i = 0; i < _clampRewards.Count; i++)
{
if (i < itemCount)
{
_clampRewards[i].SetData(itemData[i]);
}
else
{
_clampRewards[i].gameObject.SetActive(false);
}
}
}
else
{
DiggingGameManager.LogError("沙滩寻宝 管卡奖励配置错误");
}
_reward_final.InflationRate = _manager.DataModel.InflationRate;
_reward_final.SetDropIcon("", _manager.DataModel.digActivityConfig.Reward);
}
private void ShowTime()
{
//显示倒计时
if (_timer == null)
{
int activityId = _manager.GetActivityId();
if (activityId <= 0)
{
_time.text = string.Empty; return;
}
DateTime endTime = GContext.container.Resolve<FishingEventData>().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>();
diggingGameManager.GameState = SandDigGameState.Normal;
diggingGameManager.BroadLogic?.ClearEvent();
ClearEvent();
UIManager.Instance.DestroyUI(UITypes.EventSandDigPanel);
GContext.Publish(new UnloadActToNextAct());
}
#region NeoNormalPack
public void OnClickBtnPack()
{
GContext.container.Resolve<DiggingGameManager>().OnClickBtnPack();
}
#endregion
}