private void UnloadTransformData(List <TransformData> _transforms) { // Delete any objects (if told to) RememberTransform[] currentTransforms = FindObjectsOfType(typeof(RememberTransform)) as RememberTransform[]; foreach (RememberTransform transformOb in currentTransforms) { if (transformOb.saveScenePresence) { // Was object not saved? bool found = false; foreach (TransformData _transform in _transforms) { if (_transform.objectID == transformOb.constantID) { found = true; } } if (!found) { // Can't find: delete KickStarter.sceneSettings.ScheduleForDeletion(transformOb.gameObject); } } } foreach (TransformData _transform in _transforms) { RememberTransform saveObject = Serializer.returnComponent <RememberTransform> (_transform.objectID); // Restore any deleted objects (if told to) if (saveObject == null && _transform.bringBack) { Object[] assets = Resources.LoadAll("", typeof(GameObject)); foreach (Object asset in assets) { if (asset is GameObject) { GameObject assetObject = (GameObject)asset; if (assetObject.GetComponent <RememberTransform>() && assetObject.GetComponent <RememberTransform>().constantID == _transform.objectID) { GameObject newObject = (GameObject)Instantiate(assetObject.gameObject); newObject.name = assetObject.name; saveObject = newObject.GetComponent <RememberTransform>(); } } } Resources.UnloadUnusedAssets(); } if (saveObject != null) { saveObject.LoadTransformData(_transform); } } KickStarter.stateHandler.GatherObjects(); }
private void UnloadTransformData(List <TransformData> _transforms, SubScene subScene) { // Delete any objects (if told to) RememberTransform[] currentTransforms = UnityVersionHandler.GetOwnSceneComponents <RememberTransform> ((subScene != null) ? subScene.gameObject : null); foreach (RememberTransform transformOb in currentTransforms) { if (transformOb.saveScenePresence) { // Was object not saved? bool found = false; foreach (TransformData _transform in _transforms) { if (_transform.objectID == transformOb.constantID) { found = !_transform.savePrevented; } } if (!found) { // Can't find: delete KickStarter.sceneChanger.ScheduleForDeletion(transformOb.gameObject); } } } Object[] prefabAssets = Resources.LoadAll("SaveableData/Prefabs", typeof(GameObject)); if (prefabAssets == null || prefabAssets.Length == 0) { prefabAssets = Resources.LoadAll("", typeof(GameObject)); } foreach (TransformData _transform in _transforms) { RememberTransform saveObject = Serializer.returnComponent <RememberTransform> (_transform.objectID, (subScene != null) ? subScene.gameObject : null); if (saveObject == null) { // Restore any deleted objects (if told to) if (_transform.bringBack && !_transform.savePrevented) { bool foundObject = false; foreach (Object prefabAsset in prefabAssets) { if (prefabAsset is GameObject) { GameObject prefabGameObject = (GameObject)prefabAsset; if (prefabGameObject.GetComponent <RememberTransform>()) { int prefabID = prefabGameObject.GetComponent <ConstantID>().constantID; if ((_transform.linkedPrefabID != 0 && prefabID == _transform.linkedPrefabID) || (_transform.linkedPrefabID == 0 && prefabID == _transform.objectID)) { GameObject newObject = (GameObject)Instantiate(prefabGameObject); newObject.name = prefabGameObject.name; saveObject = newObject.GetComponent <RememberTransform>(); foundObject = true; if (_transform.linkedPrefabID != 0 && prefabID == _transform.linkedPrefabID) { // Spawned object has wrong ID, re-assign it ConstantID[] idScripts = saveObject.GetComponents <ConstantID>(); foreach (ConstantID idScript in idScripts) { idScript.constantID = _transform.objectID; } } break; } } } } if (!foundObject) { ACDebug.LogWarning("Could not find Resources prefab with ID " + _transform.objectID + " - is it placed in a Resources folder?"); } } } if (saveObject != null) { saveObject.LoadTransformData(_transform); } } Resources.UnloadUnusedAssets(); KickStarter.stateHandler.IgnoreNavMeshCollisions(); }