public void GameObjectReferencesAreSerialized()
        {
            string     id1     = "object1";
            string     id2     = "object2";
            GameObject object1 = Object.Instantiate(m_testPrefab);

            object1.name = id1;
            GameObject object2 = Object.Instantiate(m_testPrefab);

            object2.name = id2;
            TestSavableBehaviour behaviour1 = object1.GetComponent <TestSavableBehaviour>();
            TestSavableBehaviour behaviour2 = object2.GetComponent <TestSavableBehaviour>();

            behaviour1.gameObjectReferece = object2;
            behaviour2.referenceContainer = new TestReferenceContainer {
                gameObjectReferece = object1
            };

            var      builder  = new MockModelBuilder();
            SaveGame saveGame = SaveGamePacker.PackSaveGame(new[] { object1, object2 }, builder.GetSavableMonobehaviours());

            SerializeAndUnserialize(saveGame, builder, AllSaveablePrefabs);

            GameObject newObject1 = GameObject.Find(id1);
            GameObject newObject2 = GameObject.Find(id2);

            Assert.AreEqual(newObject2, newObject1.GetComponent <TestSavableBehaviour>().gameObjectReferece);
            Assert.AreEqual(newObject1, newObject2.GetComponent <TestSavableBehaviour>().referenceContainer.gameObjectReferece);
        }
        public void MonoBehaviourReferencesAreSerialized()
        {
            string     id1     = Guid.NewGuid().ToString();
            string     id2     = Guid.NewGuid().ToString();
            GameObject object1 = Object.Instantiate(m_testPrefab);

            object1.name = id1;
            GameObject object2 = Object.Instantiate(m_testPrefab);

            object2.name = id2;
            TestSavableBehaviour behaviour1 = object1.GetComponent <TestSavableBehaviour>();
            TestSavableBehaviour behaviour2 = object2.GetComponent <TestSavableBehaviour>();

            behaviour1.monobehaviourReference = behaviour2;

            var      builder  = new MockModelBuilder();
            SaveGame saveGame = SaveGamePacker.PackSaveGame(new[] { object1, object2 }, builder.GetSavableMonobehaviours());

            SerializeAndUnserialize(saveGame, builder, AllSaveablePrefabs);

            GameObject newObject1 = GameObject.Find(id1);
            GameObject newObject2 = GameObject.Find(id2);

            Assert.AreEqual(newObject2.GetComponent <TestSavableBehaviour>(),
                            newObject1.GetComponent <TestSavableBehaviour>().monobehaviourReference);
        }
        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);
        }
Example #4
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);
            }
        }
        private void BasicTestWithModelBuilder(ITypeModelBuilder builder, IEnumerable <GameObject> prefabs)
        {
            GameObject instantiated = Object.Instantiate(m_testPrefab);
            string     testName     = Guid.NewGuid().ToString();
            string     testValue    = Guid.NewGuid().ToString();
            Vector3    testPosition = new Vector3(10, 20, 30);

            instantiated.name = testName;
            instantiated.GetComponent <TestSavableBehaviour>().savableValue = testValue;
            instantiated.transform.position = testPosition;

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

            SerializeAndUnserialize(saveGame, builder, prefabs);

            GameObject testObject = GameObject.Find(testName);

            Assert.NotNull(testObject);
            Assert.AreEqual(testName, testObject.name);
            Assert.NotNull(testObject.GetComponent <TestSavableBehaviour>());
            Assert.AreEqual(testValue, testObject.GetComponent <TestSavableBehaviour>().savableValue);
            Assert.AreEqual(testPosition, testObject.transform.position);
        }