Singularity/Assets/Scripts/ModListPrefab.cs
2024-05-06 11:45:45 -07:00

118 lines
2.9 KiB
C#

using System;
using System.Collections;
using System.IO;
using TMPro;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class ModListPrefab : MonoBehaviour
{
[SerializeField] private RawImage Screenie;
[SerializeField] private TextMeshProUGUI Title;
[SerializeField] private TextMeshProUGUI Version;
[SerializeField] public TextMeshProUGUI Website;
[SerializeField] public TextMeshProUGUI Downloaded;
[SerializeField] public TextMeshProUGUI DownloadPercent;
[SerializeField] public Slider Progress;
[SerializeField] public GameObject Grad;
[SerializeField] private SpinVert Spinner;
[SerializeField] public GameObject FailedImage;
private DownloadMod DM;
public string ID;
public SchakenMods Mod;
private string ModInfoDir;
private string URL;
// Start is called before the first frame update
void Start() {
ModInfoDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)+@"\Schaken-Mods®\Mod Downloader\Mods\";
}
// Update is called once per frame
void Update()
{
}
public RawImage FillMe(string website, SchakenMods A, DownloadMod dm) {
Title.text = A.Mod.Title;
Version.text = $"Version: {A.Mod.Version}";
Website.text = $"Hosted at: {website}";
Downloaded.text = $"Downloaded: {A.Mod.Downloaded.ToLocalTime()}";
ID = A.Mod.Id.ToString();
DM = dm;
Mod = A;
URL = A.Mod.Url;
if (A.Mod.Downloaded < A.Mod.Updated) {
OutOfDate(false);
}
return Screenie;
}
public void OutOfDate(bool TF) {
if (!TF) {
Grad.GetComponent<Image>().color = new Color(255f / 255f, 165f / 255f, 164f / 255f);
} else {
Grad.GetComponent<Image>().color = new Color(125f / 255f, 165f / 255f, 164f / 255f);
}
}
public void SelectMod() {
DM.gameObject.SetActive(true);
if (Mod != null) {
DM.FillMe(Mod);
} else {
Debug.LogError("Mod is null");
}
}
public void UpdateProgress(float A) {
Progress.gameObject.SetActive(A < 1f);
// Grad.SetActive(!(A < 1f));
Progress.value = A;
DownloadPercent.text = string.Format("{0:P1}", A);
}
public void Help() {
if (URL.Contains("nexusmods.com")) {
Application.OpenURL($"{URL}?tab=posts");
} else {
Application.OpenURL($"{URL}?tab=comments");
}
}
public void DeleteMe() {
File.Delete(ModInfoDir);
DM.RemoveMe(ID);
}
public void RefreshImage() {
StartCoroutine(DownloadImage(Mod.Mod.PrimaryScreenshotThumb.Url, Screenie));
}
public void CheckForModUpdates() {
Spin();
DM.CheckForModUpdates(Mod, this);
}
public bool Spin() {
bool TF = Spinner.ToggleSpin();
return TF;
}
IEnumerator DownloadImage(string imageUrl, RawImage A) {
using (UnityWebRequest www = UnityWebRequestTexture.GetTexture(imageUrl)) {
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.ConnectionError) {
A.texture = DownloadHandlerTexture.GetContent(www);
A.SetNativeSize();
A.SizeToParent();
} else {
Debug.LogError("Error downloading image: " + www.error, A.gameObject);
}
}
}
}