先修复一下,错误的场景 删除不必要的钓场资产 修复into场景 update:更新meta文件,修复报错 update:修复资源 修复第一章节建造 修复建造第三章 update:删除多余内容 update:更新README.md update:还原图标 update:更新README update:更新配置
277 lines
10 KiB
C#
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));
|
|
}
|
|
}
|