Fix default avatar loading error

This commit is contained in:
Pascal Serrarens 2022-02-25 09:30:53 +01:00
parent 145bb2e8bf
commit 94690b38e1

View File

@ -52,6 +52,7 @@ namespace Passer {
public CachedPossessionBundle possessionBundle; public CachedPossessionBundle possessionBundle;
public string assetPath; public string assetPath;
public GameObject possession; public GameObject possession;
public bool preserved = false; // when the possession was a scenePossession which is preseved
public static void Update(CachedPossessionBundle cachedBundle, string possessablePath, GameObject prefab) { public static void Update(CachedPossessionBundle cachedBundle, string possessablePath, GameObject prefab) {
CachedPossession foundPossession = cache.Find(entry => CachedPossession foundPossession = cache.Find(entry =>
@ -184,8 +185,8 @@ namespace Passer {
if (possession == null) if (possession == null)
continue; continue;
Possession persistentPossession = Add(possession); Possession persistentPossession = Add(possession, true);
persistentPossession.scenePossession = PreservePossession(possession); //persistentPossession.scenePossession = PreservePossession(possession);
persistentPossession.persistent = possession.crossSite; persistentPossession.persistent = possession.crossSite;
persistentPossession.removable = removable; persistentPossession.removable = removable;
} }
@ -205,7 +206,7 @@ namespace Passer {
/// </summary> /// </summary>
/// <param name="possessable">The possessable object to add</param> /// <param name="possessable">The possessable object to add</param>
/// <returns>The persistent possession</returns> /// <returns>The persistent possession</returns>
public Possession Add(Possessable possessable) { public Possession Add(Possessable possessable, bool preserved = false) {
if (possessable == null) if (possessable == null)
return null; return null;
@ -223,6 +224,8 @@ namespace Passer {
assetPath = possessable.assetPath, assetPath = possessable.assetPath,
type = possessable.possessionType, type = possessable.possessionType,
}; };
if (preserved)
newPossession.scenePossession = PreservePossession(possessable);
possessions.Add(newPossession); possessions.Add(newPossession);
@ -231,18 +234,19 @@ namespace Passer {
CachedPossession cachedPossession = new CachedPossession() { CachedPossession cachedPossession = new CachedPossession() {
assetPath = possessable.assetPath, assetPath = possessable.assetPath,
possessionBundle = possessionBundle, possessionBundle = possessionBundle,
possession = possessable.gameObject, possession = preserved ? newPossession.scenePossession.gameObject : possessable.gameObject,
preserved = preserved,
}; };
cache.Add(cachedPossession); cache.Add(cachedPossession);
//Debug.Log("Possession cache: "); Debug.Log("Possession cache: ");
//foreach (CachedPossession poss in cache) foreach (CachedPossession poss in cache)
// Debug.Log(" * " + poss.assetPath + " || " + poss.possessionBundle + " || " + poss.possession); Debug.Log(" * " + poss.assetPath + " || " + poss.possessionBundle + " || " + poss.possession + " || " + poss.preserved);
//Debug.Log("cache: "); Debug.Log("cache: ");
//foreach (CachedPossessionBundle pos in bundleCache) { foreach (CachedPossessionBundle pos in bundleCache) {
// Debug.Log(" - " + pos.siteLocation + " || " + pos.assetBundle); Debug.Log(" - " + pos.siteLocation + " || " + pos.assetBundle);
//} }
return newPossession; return newPossession;
} }
@ -262,14 +266,14 @@ namespace Passer {
private static AssetBundle lastAssetBundle; private static AssetBundle lastAssetBundle;
public static IEnumerator RetrievePossessionAsync(Possession possession, System.Action<GameObject> callback) { public static IEnumerator RetrievePossessionAsync(Possession possession, System.Action<GameObject> callback) {
//Debug.Log("Possession cache: "); Debug.Log("Possession cache: ");
//foreach (CachedPossession poss in cache) foreach (CachedPossession poss in cache)
// Debug.Log(" * " + poss.assetPath + " || " + poss.possessionBundle + " || " + poss.possession); Debug.Log(" * " + poss.assetPath + " || " + poss.possessionBundle + " || " + poss.possession + " || " + poss.preserved);
//Debug.Log("cache: "); Debug.Log("cache: ");
//foreach (CachedPossessionBundle pos in bundleCache) { foreach (CachedPossessionBundle pos in bundleCache) {
// Debug.Log(" - " + pos.siteLocation + " || " + pos.assetBundle); Debug.Log(" - " + pos.siteLocation + " || " + pos.assetBundle);
//} }
if (possession.siteLocation == "") { if (possession.siteLocation == "") {
Debug.Log("Get scene possession"); Debug.Log("Get scene possession");
@ -293,7 +297,7 @@ namespace Passer {
callback(null); callback(null);
} }
else { else {
Debug.Log("Load from cache: " + possessablePath); //Debug.Log("Load from cache: " + possessablePath);
prefab = foundPossession.possession; prefab = foundPossession.possession;
if (prefab == null) { if (prefab == null) {
Debug.LogError("Could not load " + possessablePath); Debug.LogError("Could not load " + possessablePath);
@ -308,8 +312,15 @@ namespace Passer {
if (foundPossession != null && foundPossession.possession != null) { if (foundPossession != null && foundPossession.possession != null) {
//Debug.Log("Load from cache: " + foundPossession.possession); //Debug.Log("Load from cache: " + foundPossession.possession);
prefab = foundPossession.possession; prefab = foundPossession.possession;
callback(prefab); if (foundPossession.preserved) {
yield return null; //Debug.Log("preserved possession");
prefab.SetActive(true);
callback(prefab);
prefab.SetActive(false);
}
else
callback(prefab);
yield break;
} }
CachedPossessionBundle foundPossessionBundle = bundleCache.Find(entry => entry.siteLocation == possessableLocation); CachedPossessionBundle foundPossessionBundle = bundleCache.Find(entry => entry.siteLocation == possessableLocation);