private void TestSerializePrefab(GameObject prefab, IEnumerable <GameObject> allPrefabs)
        {
            var        builder      = new AttributeBasedTypeModelBuilder();
            string     testName     = Guid.NewGuid().ToString();
            GameObject instantiated = Object.Instantiate(prefab);

            instantiated.name = testName;

            SaveGame saveGame = SaveGamePacker.PackSaveGame(new[] { instantiated }, builder.GetSavableMonobehaviours());

            SerializeAndUnserialize(saveGame, builder, allPrefabs);

            GameObject testObject = GameObject.Find(testName);

            Assert.NotNull(testObject);
            Assert.AreEqual(testName, testObject.name);
        }
Ejemplo n.º 2
0
        public void LoadGame(string name = "Quick")
        {
            GameObject oldRoot = GameController.Instance.gameObject;

            DestroyImmediate(oldRoot); // this is generally a bad idea, but it's necessary for our dependency injection to work

            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }

            var path = $"{Application.persistentDataPath}/Saved Games/{name}.sav";

            if (string.IsNullOrEmpty(LoadIntoScene))
            {
                ITypeModelBuilder builder = new AttributeBasedTypeModelBuilder();
                var serializer            = new GameSerializer(GetPrefabs(), builder);

                using (var stream = new FileStream(path, FileMode.Open)) {
                    serializer.Deserialize <SaveGame>(stream);
                }

                GameObject newRoot = GameController.Instance.gameObject;
                IEnumerable <GameObject> prefabChildObjectsNotRestored = newRoot
                                                                         .GetComponentsInChildren <Savable>()
                                                                         .Where(savable => !savable.WasRestored)
                                                                         .Select(savable => savable.gameObject);

                foreach (var gameObject in prefabChildObjectsNotRestored)
                {
                    Destroy(gameObject);
                }

                // It is necessary to call this here even though GameController attempts to do injection because
                // the whole scene graph may not have been fully instantiated yet when GameController does the injection
                GameController.Instance.InjectAllObjects();
            }
            else
            {
                GameObject go         = new GameObject();
                var        transition = go.AddComponent <GameSceneTransitioner>();
                transition.InitLoadGame(name);
                SceneManager.LoadScene(LoadIntoScene);
            }
        }
Ejemplo n.º 3
0
        public void SaveGame(string name = "Quick")
        {
            if (name == null)
            {
                throw new ArgumentNullException(nameof(name));
            }

            var path = $"{Application.persistentDataPath}/Saved Games/{name}.sav";

            try {
                ITypeModelBuilder builder = new AttributeBasedTypeModelBuilder();
                var      serializer       = new GameSerializer(GetPrefabs(), builder);
                SaveGame saveGame         = SaveGamePacker.PackSaveGame(GetSavables(), builder.GetSavableMonobehaviours());

                using (var stream = new FileStream(path, FileMode.Create)) {
                    serializer.Serialize(stream, saveGame);
                }
            }
            catch (Exception e) {
                Debug.Log(e);
            }
        }
        public void BasicSaveTestAttributeBased()
        {
            var builder = new AttributeBasedTypeModelBuilder();

            BasicTestWithModelBuilder(builder, new [] { m_testPrefab });
        }