Пример #1
0
        /**
         * <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);
        }
Пример #2
0
        /**
         * <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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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();
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #7
0
        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();
        }