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()); reuseIdentifier = "DownloadCell"; this.mod = mod; _authorText = GetComponentsInChildren().First(x => x.name == "Author"); _authorText.enableWordWrapping = false; _authorText.overflowMode = TextOverflowModes.Overflow; _songNameText = GetComponentsInChildren().First(x => x.name == "SongName"); _songNameText.enableWordWrapping = false; _songNameText.overflowMode = TextOverflowModes.Overflow; _coverRawImage = GetComponentsInChildren().First(x => x.name == "CoverImage"); _bgImage = GetComponentsInChildren().First(x => x.name == "BG"); _highlightImage = GetComponentsInChildren().First(x => x.name == "Highlight"); _beatmapCharacteristicAlphas = new float[0]; _beatmapCharacteristicImages = new UnityEngine.UI.Image[0]; _bought = true; foreach (var icon in GetComponentsInChildren().Where(x => x.name.StartsWith("LevelTypeIcon"))) Destroy(icon.gameObject); _songNameText.text = $"{mod.Mod.Name} v{mod.Mod.ResolvedVersion}"; _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; } } } }