You've already forked FateViewer
Added download progress indicator
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
22
Assets/Scripts/UIDownloadProgress.cs
Normal file
22
Assets/Scripts/UIDownloadProgress.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
Assets/Scripts/UIDownloadProgress.cs.meta
Normal file
11
Assets/Scripts/UIDownloadProgress.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 69eb9a32154d0fb47a8cead9419d7a24
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user