/** * <summary>Gets a component on a GameObject in the scene that also has a ConstantID component on it.</summary> * <param name = "constantID">The Constant ID number generated by the ConstantID component</param> * <param name = "sceneObject">An object that, if set, must also be in the same scene as the returned component</param> * <returns>The component on the GameObject with a Constant ID number that matches the request. If none is found, returns null.</returns> */ public static T returnComponent <T> (int constantID, GameObject sceneObject = null) where T : Component { if (constantID != 0) { T[] objects = UnityVersionHandler.GetOwnSceneComponents <T> (sceneObject); foreach (T _object in objects) { ConstantID[] idScripts = _object.GetComponents <ConstantID>(); if (idScripts != null) { foreach (ConstantID idScript in idScripts) { if (idScript.constantID == constantID) { // Found it return(_object); } } } } } return(null); }
/** * <summary>Gets all given components on GameObjects that have a given Constant ID.</summary> * <param name = "constantID">The Constant ID number generated by the ConstantID component</param> * <returns>All components on the GameObject with a Constant ID number that matches the request. If none is found, returns null.</returns> */ public static T[] returnComponents <T> (int constantID, GameObject gameObject = null) where T : Component { if (constantID != 0) { List <T> returnObs = new List <T>(); T[] objects = UnityVersionHandler.GetOwnSceneComponents <T> (gameObject); foreach (T _object in objects) { if (_object.GetComponent <ConstantID>()) { ConstantID[] idScripts = _object.GetComponents <ConstantID>(); foreach (ConstantID idScript in idScripts) { if (idScript.constantID == constantID) { // Found it if (!returnObs.Contains(_object)) { returnObs.Add(_object); } } } } } return(returnObs.ToArray()); } return(null); }
private List <ScriptData> PopulateScriptData(SubScene subScene) { List <ScriptData> allScriptData = new List <ScriptData>(); Remember[] scripts = UnityVersionHandler.GetOwnSceneComponents <Remember> ((subScene != null) ? subScene.gameObject : null); foreach (Remember _script in scripts) { Player associatedPlayer = _script.gameObject.GetComponentInParent <Player>(); if (associatedPlayer != null && !associatedPlayer.IsLocalPlayer()) { // Skip this, since this is saved in PlayerData continue; } if (_script.constantID != 0) { allScriptData.Add(new ScriptData(_script.constantID, _script.SaveData())); } else { ACDebug.LogWarning("GameObject " + _script.name + " was not saved because its ConstantID has not been set!", _script); } } return(allScriptData); }
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 = 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 List <ScriptData> PopulateScriptData(SubScene subScene) { List <ScriptData> allScriptData = new List <ScriptData>(); Remember[] scripts = UnityVersionHandler.GetOwnSceneComponents <Remember> ((subScene != null) ? subScene.gameObject : null); foreach (Remember _script in scripts) { if (_script.constantID != 0) { allScriptData.Add(new ScriptData(_script.constantID, _script.SaveData())); } else { ACDebug.LogWarning("GameObject " + _script.name + " was not saved because its ConstantID has not been set!"); } } return(allScriptData); }
private List <TransformData> PopulateTransformData(SubScene subScene) { List <TransformData> allTransformData = new List <TransformData>(); RememberTransform[] transforms = UnityVersionHandler.GetOwnSceneComponents <RememberTransform> ((subScene != null) ? subScene.gameObject : null); foreach (RememberTransform _transform in transforms) { if (_transform.constantID != 0) { allTransformData.Add(_transform.SaveTransformData()); } else { ACDebug.LogWarning("GameObject " + _transform.name + " was not saved because its ConstantID has not been set!", _transform); } } return(allTransformData); }
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(); }