Added download progress indicator

This commit is contained in:
2023-12-03 19:42:12 +01:00
parent 30adab4978
commit 3b4ec2ba92
11 changed files with 676 additions and 65 deletions

View File

@@ -31,10 +31,18 @@ public class FateAssetManager : MonoBehaviour
callback(outTex);
}
public static IEnumerator DownloadText(string url, System.Action<string> callback)
public static IEnumerator DownloadText(string url, System.Action<string> callback, System.Action<float> onProgress = null)
{
UnityWebRequest www = UnityWebRequest.Get(url);
yield return www.SendWebRequest();
var request = www.SendWebRequest();
while (!request.isDone)
{
onProgress?.Invoke(request.progress);
yield return 0;
}
if (www.result != UnityWebRequest.Result.Success)
{
Debug.Log(url);
@@ -48,22 +56,29 @@ public class FateAssetManager : MonoBehaviour
}
}
public static IEnumerator DownloadBundle(string url, System.Action<AssetBundle> callback)
public static IEnumerator DownloadBundle(string url, System.Action<AssetBundle> callback, System.Action<float> onProgress = null)
{
Error.Log(Color.green, $"Downloading bundle from {url}");
UnityWebRequest www = UnityWebRequestAssetBundle.GetAssetBundle(url);
yield return www.SendWebRequest();
AssetBundle bundlea = null;
UnityWebRequest www = UnityWebRequest.Get(url);
var request = www.SendWebRequest();
while (!request.isDone)
{
onProgress?.Invoke(request.progress);
yield return 0;
}
if (www.result != UnityWebRequest.Result.Success)
{
Error.Log(Color.red, www.error);
Debug.Log(url);
Debug.Log(www.error);
callback(null);
}
else
{
bundlea = DownloadHandlerAssetBundle.GetContent(www);
var bytes = www.downloadHandler.data;
callback(AssetBundle.LoadFromMemory(bytes));
}
callback(bundlea);
}
}

View File

@@ -53,10 +53,17 @@ public class FateModelBuilder : MonoBehaviour
AssetBundle assetBundle = null;
string url = $"{urlBase}/{idNum}";
yield return FateAssetManager.DownloadBundle(url, (cb) =>
{
assetBundle = cb;
});
yield return FateAssetManager.DownloadBundle(url,
(cb) =>
{
assetBundle = cb;
UIController.Instance.DownloadProgress.SetProgress($"", 1);
},
(progress) =>
{
UIController.Instance.DownloadProgress.SetProgress($"Servants/{idNum}", progress);
}
);
if (assetBundle == null)
{

View File

@@ -161,23 +161,30 @@ public class FateViewerMain : MonoBehaviour
{
url = $"{AAAPI}NA/basic_servant.json";
}
yield return FateAssetManager.DownloadText(url, (txt) =>
{
txt = $"{{\"Entries\": {txt} }}";
Servants = Newtonsoft.Json.JsonConvert.DeserializeObject<BasicServant>(txt);
foreach (var servant in Servants.Entries)
yield return FateAssetManager.DownloadText(url,
(txt) =>
{
servant.costumes = servant.costume.Select(c => c.Value).ToList();
if (servant.costumes.FirstOrDefault(c => c.battleCharaId == servant.id) == null)
servant.costumes.Insert(0, new BasicServant.Costume()
{
battleCharaId = servant.id,
id = 0,
shortName = servant.name,
});
txt = $"{{\"Entries\": {txt} }}";
Servants = Newtonsoft.Json.JsonConvert.DeserializeObject<BasicServant>(txt);
foreach (var servant in Servants.Entries)
{
servant.costumes = servant.costume.Select(c => c.Value).ToList();
if (servant.costumes.FirstOrDefault(c => c.battleCharaId == servant.id) == null)
servant.costumes.Insert(0, new BasicServant.Costume()
{
battleCharaId = servant.id,
id = 0,
shortName = servant.name,
});
}
Servants.Entries = Servants.Entries.OrderBy(e => e.collectionNo).ToList();
UIController.Instance.DownloadProgress.SetProgress("", 1);
},
(progress) =>
{
UIController.Instance.DownloadProgress.SetProgress("servant list", progress);
}
Servants.Entries = Servants.Entries.OrderBy(e => e.collectionNo).ToList();
});
);
if (Servants.Entries.Count > 0)
{
@@ -201,36 +208,43 @@ public class FateViewerMain : MonoBehaviour
{
string url = $"{AAAPI}JP/basic_svt_lang_en.json";
Dictionary<string, List<BasicServant.Costume>> entries = new Dictionary<string, List<BasicServant.Costume>>();
yield return FateAssetManager.DownloadText(url, (txt) =>
{
txt = $"{{\"Entries\": {txt} }}";
Enemies = Newtonsoft.Json.JsonConvert.DeserializeObject<BasicServant>(txt);
Enemies.Entries = Enemies.Entries.Where(e => e.type == "enemy").ToList();
Enemies.Entries = Enemies.Entries.OrderBy(e => e.name).ToList();
foreach (var enemy in Enemies.Entries)
yield return FateAssetManager.DownloadText(url,
(txt) =>
{
enemy.costumes = enemy.costume.Select(c => c.Value).ToList();
foreach (var costume in enemy.costumes)
txt = $"{{\"Entries\": {txt} }}";
Enemies = Newtonsoft.Json.JsonConvert.DeserializeObject<BasicServant>(txt);
Enemies.Entries = Enemies.Entries.Where(e => e.type == "enemy").ToList();
Enemies.Entries = Enemies.Entries.OrderBy(e => e.name).ToList();
foreach (var enemy in Enemies.Entries)
{
var cos = new BasicServant.Costume()
enemy.costumes = enemy.costume.Select(c => c.Value).ToList();
foreach (var costume in enemy.costumes)
{
name = costume.name,
shortName = costume.shortName,
id = costume.id,
battleCharaId = costume.battleCharaId
};
if (entries.ContainsKey(enemy.name))
{
if (!entries[enemy.name].Any(c => c.battleCharaId == costume.battleCharaId))
entries[enemy.name].Add(cos);
}
else
{
entries[enemy.name] = new List<BasicServant.Costume>() { cos };
var cos = new BasicServant.Costume()
{
name = costume.name,
shortName = costume.shortName,
id = costume.id,
battleCharaId = costume.battleCharaId
};
if (entries.ContainsKey(enemy.name))
{
if (!entries[enemy.name].Any(c => c.battleCharaId == costume.battleCharaId))
entries[enemy.name].Add(cos);
}
else
{
entries[enemy.name] = new List<BasicServant.Costume>() { cos };
}
}
}
UIController.Instance.DownloadProgress.SetProgress("", 1);
},
(progress) =>
{
UIController.Instance.DownloadProgress.SetProgress("enemy list", progress);
}
});
);
if (entries.Count() > 0)
{

View File

@@ -15,6 +15,7 @@ public class UIController : MonoBehaviour
public GameObject LoadedCharaButton;
public Dropdown BackgroundDropdown;
public Dropdown BodyAnimationDropdown;
public UIDownloadProgress DownloadProgress;
public Transform MeshesListContent;
public ScrollRect ServantList;
public ScrollRect EnemiesList;

View File

@@ -0,0 +1,22 @@
using UnityEngine;
using UnityEngine.UI;
public class UIDownloadProgress : MonoBehaviour
{
public TMPro.TMP_Text ProgressLabel;
public Slider ProgressSlider;
public void SetProgress(string itemName, float progress)
{
if(progress == 1)
{
gameObject.SetActive(false);
}
else
{
gameObject.SetActive(true);
ProgressLabel.text = "Downloading: " + itemName;
ProgressSlider.value = progress;
}
}
}

View File

@@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 69eb9a32154d0fb47a8cead9419d7a24
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: