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

150 lines
4.2 KiB
C#

using asap.core;
using GameCore;
using System;
using System.Collections;
using UnityEngine;
using UniRx;
using TMPro;
using UnityEngine.UI;
using cfg;
using UnityEngine.AddressableAssets;
public class AquariumCloudPanel : MonoBehaviour
{
Animation ani;
IDisposable disposable;
Image image_map;
TMP_Text text_map;
TMP_Text text_level;
AquariumManagerData data;
int type = 0;
AudioClip doorvault_gear;
Sound sound_doorvault_gear;
private void Awake()
{
ani = GetComponent<Animation>();
disposable = GContext.OnEvent<EndTransition>().Subscribe(EndTransition);
image_map = transform.Find("RandomMapPanel/Item/img_map").GetComponent<Image>();
text_map = transform.Find("RandomMapPanel/result/text_map").GetComponent<TMP_Text>();
text_level = transform.Find("RandomMapPanel/result/fishcard/text_level").GetComponent<TMP_Text>();
type = FishingAquariumAct.CloudType;
StartCoroutine(OnStart());
Synchrodata();
}
void Synchrodata()
{
//从服务器拿数据
var dataSever = AquariumManager.GetAquariumManagerData();
if (dataSever != null)
{
data = dataSever;
if (data != null)
{
Tables _tables = GContext.container.Resolve<Tables>();
var mapData = _tables.TbMapData.DataMap[data.mapId];
GContext.container.Resolve<IUIService>().SetImageSprite(image_map, mapData.Bg);
text_map.text = LocalizationMgr.GetText(mapData.Name_l10n_key);
string levelLV = LocalizationMgr.GetText("UI_FishingMapPanel_101006");
int fishCardLevel = GContext.container.Resolve<PlayerFishData>().GetFishLevelByMap(data.mapId);
text_level.text = levelLV + fishCardLevel.ToString();
}
}
}
IEnumerator OnStart()
{
string cloud_in = "aquarium_cloud_in_2";
float time = 0.75f;
switch (type)
{
case 2:
cloud_in = "aquarium_cloud_in_3";
time = 1.25f;
break;
default:
break;
}
if (disposable != null)
{
ani.Play(cloud_in);
}
yield return new WaitForSeconds(time);//入场动画播完
PlayRodAudio("audio_ui_aquarium_doorvault_gear");
if (disposable != null)
{
ani.Play("aquarium_cloud_loop_2");
}
}
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;
}
}
async void PlayRodAudio(string audioName)
{
StopRodAudio();
doorvault_gear = await Addressables.LoadAssetAsync<AudioClip>(audioName).Task;
if (disposable == null)
{
if (doorvault_gear)
{
Addressables.Release(doorvault_gear);
doorvault_gear = null;
}
return;
}
sound_doorvault_gear = GContext.container.Resolve<ISoundService>().GetNewUISound(doorvault_gear);
sound_doorvault_gear.audioSource.Play();
sound_doorvault_gear.audioSource.loop = true;
}
public void EndTransition(EndTransition endTransition)
{
StartCoroutine(End());
StopRodAudio();
}
private void OnDisable()
{
Dispose();
}
IEnumerator End()
{
string cloud_out = "aquarium_cloud_out_2";
float time = 1.25f;
switch (type)
{
case 1:
case 5:
cloud_out = "aquarium_cloud_out_3";
time = 0.866f;
break;
default:
break;
}
image_map.gameObject.SetActive(false);
ani.Play(cloud_out);
Dispose();
yield return new WaitForSeconds(time);//退场动画播完
UIManager.Instance.DestroyUI(UITypes.AquariumCloudPanel);
}
void Dispose()
{
disposable?.Dispose();
disposable = null;
}
}