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);