Files
MinFt/Client/Assets/Scripts/Aquarium/UI/AquariumDetectPanel.cs
2026-04-27 12:07:32 +08:00

277 lines
10 KiB
C#

using asap.core;
using cfg;
using game;
using Game;
using GameCore;
using System;
using System.Collections;
using TMPro;
using UniRx;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.UI;
public class AquariumDetectPanel : BasePanel
{
AquariumManager AM;
Animation anim;
Button btn_close;
Button btn_enter;
Button btn_enter_gray;
TMP_Text text_info;
TMP_Text text_time;
Button btn_event;
GameObject event_redpoint;
Button btn_slot;
TMP_Text text_num_slot;
GameObject slot_redpoint;
GameObject slot_tips;
TMP_Text text_title_tips;
TMP_Text text_title_info;
Button btn_questionmark;
AquariumRandomMapPanel randomMapPanel;
int maxSlot = 6;
DateTime refreshTime;
bool isCutTo = false;
AudioClip doorvault_gear;
Sound sound_doorvault_gear;
AudioClip searchingroll_single;
Sound sound_searchingroll_single;
string audioName;
int refreshTimeInt;
private void Awake()
{
AM = GContext.container.Resolve<AquariumManager>();
anim = GetComponent<Animation>();
btn_close = transform.Find("btn_close").GetComponent<Button>();
btn_enter = transform.Find("root_main/btn_enter/btn_green").GetComponent<Button>();
btn_enter_gray = transform.Find("root_main/btn_enter_gray/btn_green").GetComponent<Button>();
text_info = transform.Find("root_main/btn_enter_gray/text_info").GetComponent<TMP_Text>();
text_time = transform.Find("root_main/text_time").GetComponent<TMP_Text>();
btn_event = transform.Find("root_main/btn_event").GetComponent<Button>();
event_redpoint = transform.Find("root_main/btn_event/redpoint").gameObject;
btn_slot = transform.Find("root_main/btn_slot").GetComponent<Button>();
text_num_slot = transform.Find("root_main/btn_slot/text_num").GetComponent<TMP_Text>();
slot_redpoint = transform.Find("root_main/btn_slot/redpoint").gameObject;
slot_tips = transform.Find("root_main/slot_tips").gameObject;
text_title_tips = transform.Find("root_main/slot_tips/text_title").GetComponent<TMP_Text>();
text_title_info = transform.Find("root_main/slot_tips/text_info").GetComponent<TMP_Text>();
btn_questionmark = transform.Find("root_main/title/btn_questionmark").GetComponent<Button>();
randomMapPanel = transform.Find("RandomMapPanel").GetComponent<AquariumRandomMapPanel>();
event_redpoint.SetActive(false);
}
protected override void Start()
{
GContext.container.Resolve<GuideDataCenter>().InspectTriggerGuide("AquariumDetectPanel");
//randomMapPanel.gameObject.SetActive(false);
base.Start();
btn_event.onClick.AddListener(OnClickEvent);
btn_enter.onClick.AddListener(OnClickMaching);
btn_close.onClick.AddListener(OnClickClose);
btn_questionmark.onClick.AddListener(async () =>
await UIManager.Instance.ShowUI(UITypes.AquariumInfoPopupPanel));
btn_slot.onClick.AddListener(() => slot_tips.SetActive(!slot_tips.activeSelf));
int Slot = GContext.container.Resolve<PlayerData>().benefitsAquariumLimit;
text_num_slot.text = $"{Slot}/{maxSlot}";
text_title_tips.text = LocalizationMgr.GetFormatTextValue("UI_AquariumPanel_2", $"{Slot}/{maxSlot}");
if (Slot == maxSlot)
{
text_title_info.text = LocalizationMgr.GetText("UI_AquariumPanel_4");
}
else
{
int level = GContext.container.Resolve<PlayerData>().benefitsLevel[6];
var Benefits = GContext.container.Resolve<Tables>().TbBenefits.GetOrDefault(7);
if (Benefits == null || level + 1 >= Benefits.AccountLevel.Count)
{
Debug.LogError("No account data AquariumLimit up");
}
else
{
text_title_info.text = LocalizationMgr.GetFormatTextValue("UI_AquariumPanel_3", Benefits.AccountLevel[level + 1]);
}
}
var nowTime = ZZTimeHelper.UtcNow().UtcNowOffset();
refreshTime = nowTime.Date.AddDays(1);
if (nowTime.Date.DayOfYear != AM.data.refreshDay)
{
AM.data.refreshCount = 0;
AM.data.adCount = 0;
AM.data.refreshDay = nowTime.Date.DayOfYear;
}
refreshTimeInt = GContext.container.Resolve<Tables>().TbAquariumConfig.RefreshTime;
bool isRefresh = AM.data.refreshCount < refreshTimeInt;
if (!isRefresh)
{
ShowInfo();
}
btn_enter.transform.parent.gameObject.SetActive(isRefresh);
btn_enter_gray.transform.parent.gameObject.SetActive(!isRefresh);
text_time.text = LocalizationMgr.GetFormatTextValue("UI_AquariumPanel_44", refreshTimeInt - AM.data.refreshCount, refreshTimeInt);
}
void ShowInfo()
{
//剩余时间
TimeSpan duration = refreshTime - ZZTimeHelper.UtcNow().UtcNowOffset();
string textValue = LocalizationMgr.GetText("UI_AquariumPanel_7");
text_info.text = string.Format(textValue, ConvertTools.ConvertTime2(duration));
var timer = Observable.Interval(TimeSpan.FromSeconds(1))
.TakeWhile(seconds => seconds <= duration.TotalSeconds)
.Subscribe(seconds => text_info.text =
string.Format(textValue, ConvertTools.ConvertTime2(duration.Subtract(TimeSpan.FromSeconds(seconds))))
, Refresh)
.AddTo(disposables);
}
void Refresh()
{
AM.data.adCount = 0;
AM.data.refreshCount = 0;
AM.data.refreshDay = ZZTimeHelper.UtcNow().UtcNowOffset().Date.DayOfYear;
text_time.text = LocalizationMgr.GetFormatTextValue("UI_AquariumPanel_44", refreshTimeInt, refreshTimeInt);
btn_enter.transform.parent.gameObject.SetActive(true);
btn_enter_gray.transform.parent.gameObject.SetActive(false);
}
void OnClickEvent()
{
_ = UIManager.Instance.ShowUI(UITypes.EventReportPopupPanel);
}
async void GetSearchingrollSingle()
{
searchingroll_single = await Addressables.LoadAssetAsync<AudioClip>("audio_ui_aquarium_doorvault_searchingroll_single").Task;
if (searchingroll_single != null && this != null)
{
sound_searchingroll_single = GContext.container.Resolve<ISoundService>().GetNewUISound(searchingroll_single);
}
}
IDisposable enterMap;
void OnClickMaching()
{
StartCoroutine(StartClickMaching());
}
IEnumerator StartClickMaching()
{
//randomMapPanel.gameObject.SetActive(true);
anim.Play("match_map_start");
yield return new WaitForSeconds(1);
PlayRodAudio("audio_ui_fishingduel_matchingloop");
randomMapPanel.SetMap();
enterMap = FishingAquariumAct.eventAggregator.GetEvent<EnterMaped>().Subscribe(EnterMaped);
randomMapPanel.InitEgg();
FishingAquariumAct.eventAggregator.Publish(new AquariumEnterMapScene());
yield return new WaitForSeconds(2);
yield return randomMapPanel.PlayMap().AsIEnumerator();
StopRodAudio();
GContext.Publish(new VibrationData(HapticTypes.HeavyImpact));
anim.Play("match_egg_start");
GetSearchingrollSingle();
yield return new WaitForSeconds(1);
PlayRodAudio("audio_ui_aquarium_doorvault_searchingroll_loop");
randomMapPanel.PlayEgg();
yield return new WaitForSeconds(1.5f);
StopRodAudio();
for (int i = 1; i < AM.Slot; i++)
{
yield return new WaitForSeconds(0.16f);
if (sound_searchingroll_single != null)
{
sound_searchingroll_single.audioSource.Play();
}
}
anim.Play("aquarium_cloud_in");
yield return new WaitForSeconds(3.5f);
PlayRodAudio("audio_ui_aquarium_doorvault_gear");
anim.Play("aquarium_cloud_loop");
randomMapPanel.HideMap();
yield return new WaitForSeconds(1f);
OnClose();
}
void StopRodAudio()
{
if (doorvault_gear)
{
Addressables.Release(doorvault_gear);
doorvault_gear = null;
}
if (sound_doorvault_gear)
{
sound_doorvault_gear.audioSource.Stop();
sound_doorvault_gear.ReturnPool();
sound_doorvault_gear = null;
}
}
private void OnDisable()
{
this.audioName = "";
StopRodAudio();
if (searchingroll_single)
{
Addressables.Release(searchingroll_single);
searchingroll_single = null;
}
if (sound_searchingroll_single)
{
sound_searchingroll_single.audioSource.Stop();
sound_searchingroll_single.ReturnPool();
sound_searchingroll_single = null;
}
}
async void PlayRodAudio(string audioName)
{
this.audioName = audioName;
StopRodAudio();
var local_doorvault_gear = await Addressables.LoadAssetAsync<AudioClip>(audioName).Task;
if (local_doorvault_gear == null)
{
return;
}
if (this.audioName != audioName)
{
Addressables.Release(local_doorvault_gear);
return;
}
doorvault_gear = local_doorvault_gear;
sound_doorvault_gear = GContext.container.Resolve<ISoundService>().GetNewUISound(doorvault_gear);
sound_doorvault_gear.audioSource.Play();
sound_doorvault_gear.audioSource.loop = true;
}
void EnterMaped(EnterMaped enterMaped)
{
enterMap?.Dispose();
enterMap = null;
OnClose();
}
async void OnClose()
{
if (isCutTo)
{
StopRodAudio();
anim.Play("aquarium_cloud_out");
FishingAquariumAct.eventAggregator.Publish(new AquariumEnterMapScene() { isShowUI = true });
await Awaiters.Seconds(2.0f);
UIManager.Instance.DestroyUI(UITypes.AquariumDetectPanel);
}
else
{
isCutTo = true;
}
}
void OnClickClose()
{
FishingAquariumAct.CloudType = 2;
GContext.Publish(new UnloadActToNextAct(transitionPanel: UITypes.AquariumCloudPanel, time: 1.25f));
}
}