From 94690b38e1df14cb3b2775e8aa566a928af3aa30 Mon Sep 17 00:00:00 2001 From: Pascal Serrarens Date: Fri, 25 Feb 2022 09:30:53 +0100 Subject: [PATCH] Fix default avatar loading error --- .../Visitors/Scripts/VisitorPossessions.cs | 53 +++++++++++-------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/Runtime/Visitors/Scripts/VisitorPossessions.cs b/Runtime/Visitors/Scripts/VisitorPossessions.cs index c9d3af6..250b552 100644 --- a/Runtime/Visitors/Scripts/VisitorPossessions.cs +++ b/Runtime/Visitors/Scripts/VisitorPossessions.cs @@ -52,6 +52,7 @@ namespace Passer { public CachedPossessionBundle possessionBundle; public string assetPath; 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) { CachedPossession foundPossession = cache.Find(entry => @@ -184,8 +185,8 @@ namespace Passer { if (possession == null) continue; - Possession persistentPossession = Add(possession); - persistentPossession.scenePossession = PreservePossession(possession); + Possession persistentPossession = Add(possession, true); + //persistentPossession.scenePossession = PreservePossession(possession); persistentPossession.persistent = possession.crossSite; persistentPossession.removable = removable; } @@ -205,7 +206,7 @@ namespace Passer { /// /// The possessable object to add /// The persistent possession - public Possession Add(Possessable possessable) { + public Possession Add(Possessable possessable, bool preserved = false) { if (possessable == null) return null; @@ -223,6 +224,8 @@ namespace Passer { assetPath = possessable.assetPath, type = possessable.possessionType, }; + if (preserved) + newPossession.scenePossession = PreservePossession(possessable); possessions.Add(newPossession); @@ -231,18 +234,19 @@ namespace Passer { CachedPossession cachedPossession = new CachedPossession() { assetPath = possessable.assetPath, possessionBundle = possessionBundle, - possession = possessable.gameObject, + possession = preserved ? newPossession.scenePossession.gameObject : possessable.gameObject, + preserved = preserved, }; cache.Add(cachedPossession); - //Debug.Log("Possession cache: "); - //foreach (CachedPossession poss in cache) - // Debug.Log(" * " + poss.assetPath + " || " + poss.possessionBundle + " || " + poss.possession); + Debug.Log("Possession cache: "); + foreach (CachedPossession poss in cache) + Debug.Log(" * " + poss.assetPath + " || " + poss.possessionBundle + " || " + poss.possession + " || " + poss.preserved); - //Debug.Log("cache: "); - //foreach (CachedPossessionBundle pos in bundleCache) { - // Debug.Log(" - " + pos.siteLocation + " || " + pos.assetBundle); - //} + Debug.Log("cache: "); + foreach (CachedPossessionBundle pos in bundleCache) { + Debug.Log(" - " + pos.siteLocation + " || " + pos.assetBundle); + } return newPossession; } @@ -262,14 +266,14 @@ namespace Passer { private static AssetBundle lastAssetBundle; public static IEnumerator RetrievePossessionAsync(Possession possession, System.Action callback) { - //Debug.Log("Possession cache: "); - //foreach (CachedPossession poss in cache) - // Debug.Log(" * " + poss.assetPath + " || " + poss.possessionBundle + " || " + poss.possession); + Debug.Log("Possession cache: "); + foreach (CachedPossession poss in cache) + Debug.Log(" * " + poss.assetPath + " || " + poss.possessionBundle + " || " + poss.possession + " || " + poss.preserved); - //Debug.Log("cache: "); - //foreach (CachedPossessionBundle pos in bundleCache) { - // Debug.Log(" - " + pos.siteLocation + " || " + pos.assetBundle); - //} + Debug.Log("cache: "); + foreach (CachedPossessionBundle pos in bundleCache) { + Debug.Log(" - " + pos.siteLocation + " || " + pos.assetBundle); + } if (possession.siteLocation == "") { Debug.Log("Get scene possession"); @@ -293,7 +297,7 @@ namespace Passer { callback(null); } else { - Debug.Log("Load from cache: " + possessablePath); + //Debug.Log("Load from cache: " + possessablePath); prefab = foundPossession.possession; if (prefab == null) { Debug.LogError("Could not load " + possessablePath); @@ -308,8 +312,15 @@ namespace Passer { if (foundPossession != null && foundPossession.possession != null) { //Debug.Log("Load from cache: " + foundPossession.possession); prefab = foundPossession.possession; - callback(prefab); - yield return null; + if (foundPossession.preserved) { + //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);