92 lines
2.5 KiB
C#
92 lines
2.5 KiB
C#
using AxibugEmuOnline.Client.ClientCore;
|
|
using AxibugEmuOnline.Client.UI;
|
|
using AxibugProtobuf;
|
|
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace AxibugEmuOnline.Client
|
|
{
|
|
public class RoomItem : MenuItem, IVirtualItem
|
|
{
|
|
[SerializeField]
|
|
Image m_roomPreview;
|
|
[SerializeField]
|
|
Slider m_downloadProgress;
|
|
[SerializeField]
|
|
GameObject m_downloadingFlag;
|
|
[SerializeField]
|
|
GameObject m_romReadyFlag;
|
|
|
|
private RomFile m_romFile;
|
|
|
|
public int Index { get; set; }
|
|
|
|
|
|
public void SetData(object data)
|
|
{
|
|
if (data is Protobuf_Room_MiniInfo roomInfo)
|
|
{
|
|
var hostNick = roomInfo.GetHostNickName();
|
|
roomInfo.GetRoomPlayers(out var cur, out var max);
|
|
SetBaseInfo(string.Empty, $"<b>{hostNick}</b>ľÄˇżźä - {cur}/{max}");
|
|
SetIcon(null);
|
|
|
|
roomInfo.FetchRomFileInRoomInfo(EnumPlatform.NES, (romFile) =>
|
|
{
|
|
m_romFile = romFile;
|
|
|
|
if (romFile.ID == roomInfo.GameRomID)
|
|
Txt.text = romFile.Alias;
|
|
|
|
UpdateRomInfoView();
|
|
App.CacheMgr.GetSpriteCache(romFile.ImageURL, OnGetRomImage);
|
|
});
|
|
}
|
|
}
|
|
|
|
private void Update()
|
|
{
|
|
UpdateRomInfoView();
|
|
}
|
|
|
|
private void UpdateRomInfoView()
|
|
{
|
|
float? downloadingProgress = null;
|
|
bool romReady = false;
|
|
|
|
if (m_romFile != null)
|
|
{
|
|
if (m_romFile.IsDownloading)
|
|
downloadingProgress = m_romFile.Progress;
|
|
if (m_romFile.RomReady)
|
|
romReady = true;
|
|
}
|
|
|
|
m_downloadingFlag.SetActiveEx(downloadingProgress.HasValue);
|
|
if (downloadingProgress.HasValue)
|
|
m_downloadProgress.value = downloadingProgress.Value;
|
|
|
|
m_romReadyFlag.SetActiveEx(romReady);
|
|
}
|
|
|
|
private void OnGetRomImage(Sprite sprite, string url)
|
|
{
|
|
if (m_romFile == null) return;
|
|
if (m_romFile.ImageURL != url) return;
|
|
|
|
SetIcon(sprite);
|
|
}
|
|
|
|
public void SetDependencyProperty(object data)
|
|
{
|
|
SetSelectState(data is ThirdMenuRoot tr && tr.SelectIndex == Index);
|
|
}
|
|
|
|
public void Release()
|
|
{
|
|
Reset();
|
|
}
|
|
}
|
|
}
|