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