You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

94 lines
3.5 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TMPro;
using System.Threading.Tasks;
using IPA.Updating.BeatMods;
using UnityEngine;
namespace BSIPA_ModList.UI
{
// originally ripped verbatim from Andruzz's BeatSaverDownloader
internal class DownloadProgressCell : LevelListTableCell
{
private DownloadObject mod;
public void Init(DownloadObject mod)
{
Destroy(GetComponent<LevelListTableCell>());
reuseIdentifier = "DownloadCell";
this.mod = mod;
_authorText = GetComponentsInChildren<TextMeshProUGUI>().First(x => x.name == "Author");
_authorText.enableWordWrapping = false;
_authorText.overflowMode = TextOverflowModes.Overflow;
_songNameText = GetComponentsInChildren<TextMeshProUGUI>().First(x => x.name == "SongName");
_songNameText.enableWordWrapping = false;
_songNameText.overflowMode = TextOverflowModes.Overflow;
_coverRawImage = GetComponentsInChildren<UnityEngine.UI.RawImage>().First(x => x.name == "CoverImage");
_bgImage = GetComponentsInChildren<UnityEngine.UI.Image>().First(x => x.name == "BG");
_highlightImage = GetComponentsInChildren<UnityEngine.UI.Image>().First(x => x.name == "Highlight");
_beatmapCharacteristicAlphas = new float[0];
_beatmapCharacteristicImages = new UnityEngine.UI.Image[0];
_bought = true;
foreach (var icon in GetComponentsInChildren<UnityEngine.UI.Image>().Where(x => x.name.StartsWith("LevelTypeIcon")))
Destroy(icon.gameObject);
_songNameText.text = $"{mod.Mod.Name} <size=60%>v{mod.Mod.ResolvedVersion}</size>";
_authorText.text = "";
_coverRawImage.texture = mod.Icon.texture;
_bgImage.enabled = true;
_bgImage.sprite = Sprite.Create(new Texture2D(1, 1), new Rect(0, 0, 1, 1), Vector2.one / 2f);
_bgImage.type = UnityEngine.UI.Image.Type.Filled;
_bgImage.fillMethod = UnityEngine.UI.Image.FillMethod.Horizontal;
Update();
}
public void Update()
{
if (mod == null) return;
_bgImage.enabled = true;
switch (mod.State)
{
case DownloadObject.States.ToDownload:
{
_bgImage.color = new Color(1f, 1f, 1f, 0.35f);
_bgImage.fillAmount = 0;
}
break;
case DownloadObject.States.Downloading:
{
_bgImage.color = new Color(1f, 1f, 1f, 0.35f);
_bgImage.fillAmount = (float)mod.Progress;
}
break;
case DownloadObject.States.Installing:
{
_bgImage.color = new Color(0f, 1f, 1f, 0.35f);
_bgImage.fillAmount = 1f;
}
break;
case DownloadObject.States.Completed:
{
_bgImage.color = new Color(0f, 1f, 0f, 0.35f);
_bgImage.fillAmount = 1f;
}
break;
case DownloadObject.States.Failed:
{
_bgImage.color = new Color(1f, 0f, 0f, 0.35f);
_bgImage.fillAmount = 1f;
}
break;
}
}
}
}