Beispiel #1
0
    private void SerialiseObject(XmlTextWriter writer, SerialisableObject serialisableObject)
    {
        List <SavePair> pairs = new List <SavePair>();

        writer.WriteStartElement("entry");
        writer.WriteAttributeString("id", serialisableObject.GUID.ToString());

        // Dump the object-name into the save file if debugging
        if (OutputDebugInfo)
        {
            writer.WriteAttributeString("debug_name", serialisableObject.name);
        }

        serialisableObject.Serialise(pairs);

        for (int pairID = 0; pairID < pairs.Count; ++pairID)
        {
            writer.WriteStartElement("pair");

            writer.WriteAttributeString("id", pairs[pairID].id);
            writer.WriteAttributeString("value", pairs[pairID].value);

            writer.WriteEndElement();
        }

        writer.WriteEndElement();
    }
Beispiel #2
0
    public void Deserialise()
    {
        Dictionary <string, SerialisableObject> objects = new Dictionary <string, SerialisableObject>();

        SerialisableObject[] serialisableObjects = Resources.FindObjectsOfTypeAll(typeof(SerialisableObject)) as SerialisableObject[];

        // Create a dictionary of all the serialisable objects in the scene, to prevent iteration later.
        foreach (var currentObject in serialisableObjects)
        {
            if (objects.ContainsKey(currentObject.GUID))
            {
                Debug.LogError("Duplicate key found for item " + currentObject.gameObject.name + ".\n Object will not be deserialised");
            }
            else
            {
                objects.Add(currentObject.GUID, currentObject);
            }
        }

        XmlDocument saveFile = new XmlDocument();

        saveFile.Load("testSave.xml");

        XmlNodeList entries = saveFile.GetElementsByTagName("entry");

        for (int entryID = 0; entryID < entries.Count; ++entryID)
        {
            List <SavePair> pairs = new List <SavePair>();

            XmlNode entryNode = entries.Item(entryID);

            string guid = entryNode.Attributes.GetNamedItem("id").Value;

            for (int childID = 0; childID < entryNode.ChildNodes.Count; ++childID)
            {
                string id    = entryNode.ChildNodes[childID].Attributes.GetNamedItem("id").Value;
                string value = entryNode.ChildNodes[childID].Attributes.GetNamedItem("value").Value;
                pairs.Add(new SavePair(id, value));
            }

            SerialisableObject targetObject = null;
            objects.TryGetValue(guid, out targetObject);

            if (targetObject != null)
            {
                targetObject.Deserialise(pairs);
            }
            else if (OutputDebugInfo)
            {
                Debug.Log("Dead ID found: " + guid.ToString());
            }
        }
    }
Beispiel #3
0
            public async Task Successful_Serialisation_Will_Return_A_Stream_Of_The_Serialised_Object()
            {
                //Arrange
                var obj        = new SerialisableObject();
                var settings   = new DefaultSettingsProvider();
                var serialiser = new NSJsonSerializer(settings) as ISerialiser;

                //Act
                var result = await serialiser.Serialise(obj);

                //Assert
                Assert.That(result, Is.Not.Null);
            }
Beispiel #4
0
            public async Task DeserialisingToJsonObject()
            {
                //Arrange
                var obj        = new SerialisableObject();
                var settings   = new DefaultSettingsProvider();
                var serialiser = new NSJsonSerializer(settings);
                var serialised = await serialiser.SerialiseToJson(obj);

                //Act
                var result = await serialiser.DeserialiseFromJson(serialised);

                //Assert
                Assert.That(result, Is.Not.Null);
                Assert.That(result, Is.TypeOf <JObject>());
            }
Beispiel #5
0
            public async Task Successful_Deserialisation_Will_Return_An_Object_Of_Type_Specified()
            {
                //Arrange
                var obj        = new SerialisableObject();
                var settings   = new DefaultSettingsProvider();
                var serialiser = new NSJsonSerializer(settings);
                var serialised = await serialiser.SerialiseToJson(obj);

                //Act
                var result = await serialiser.DeserialiseFromJson <SerialisableObject>(serialised);

                //Assert
                Assert.That(result, Is.Not.Null);
                Assert.That(result, Is.TypeOf <SerialisableObject>());
            }
Beispiel #6
0
            public async Task Providing_A_Base_Class_Will_Cast_The_Return_The_Object_Cast_To_The_Base_Class()
            {
                //Arrange
                var obj        = new SerialisableObject();
                var settings   = new DefaultSettingsProvider();
                var serialiser = new NSJsonSerializer(settings) as ISerialiser;
                var stream     = await serialiser.Serialise(obj);

                stream.Position = 0;

                //Act
                var result = await serialiser.Deserialise <SerialisableObject>(stream);

                //Assert
                Assert.That(result, Is.Not.Null);
                Assert.That(result, Is.TypeOf <SerialisableObject>());
            }
Beispiel #7
0
    public static void SaveDeserialise(List <SavePair> pairs)
    {
        Debug.Log("Deserialising inventory...");

        // Flush the current dictionary
        Inventory.Contents.Clear();

        InventoryObject[] inventoryObjects = Resources.FindObjectsOfTypeAll(typeof(InventoryObject)) as InventoryObject[];

        // Create a dictionary of inventory objects with their guids as a key.
        // This should make a shift to O(m+n) instead of O(mn)
        Dictionary <string, InventoryObject> objectDictionary = new Dictionary <string, InventoryObject>();

        foreach (var current in inventoryObjects)
        {
            SerialisableObject serialisableObject = current.GetComponent <SerialisableObject>();

            if (serialisableObject != null)
            {
                objectDictionary.Add(serialisableObject.GUID, current);
            }
            else
            {
                Debug.LogWarning("Cannot deserialise inventory-item \"" + current.name + "\" as it does not have a SerialisableObject	attached");
            }
        }

        // Run through each guid and add the corresponding InventoryObject.
        // The objects themselves are deserialised in their own scripts.
        foreach (var pair in pairs)
        {
            string guid = pair.value;

            InventoryObject target = null;

            if (objectDictionary.TryGetValue(guid, out target))
            {
                Debug.Log("Deserialised: " + target.name);
                Inventory.AddToInventory(target);
            }
            else
            {
                Debug.LogWarning("Failed to deserialise inventory-object with guid: " + guid);
            }
        }
    }
Beispiel #8
0
            public async Task Successful_Deserialisation_Will_Return_An_Object()
            {
                //Arrange
                var obj        = new SerialisableObject();
                var settings   = new DefaultSettingsProvider();
                var serialiser = new NSJsonSerializer(settings) as ISerialiser;
                var stream     = await serialiser.Serialise(obj);

                stream.Position = 0;

                //Act
                var result = await serialiser.Deserialise <SerialisableObject>(stream);

                //Assert
                Assert.That(result.Number, Is.EqualTo(obj.Number));
                Assert.That(result.Words, Is.EqualTo(obj.Words));
                Assert.That(result, Is.TypeOf <SerialisableObject>());
            }
Beispiel #9
0
    public static void SaveSerialise(List <SavePair> pairs)
    {
        int index = 0;

        foreach (var item in Inventory.Contents)
        {
            SerialisableObject itemSave = item.gameObject.GetComponent <SerialisableObject>() as SerialisableObject;
            if (itemSave != null)
            {
                pairs.Add(new SavePair("inventory_item_" + index, itemSave.GUID.ToString()));
                index++;
            }
            else
            {
                Debug.LogWarning("Cannot save inventory-item \"" + item.name + "\" as it does not have a SerialisableObject	attached");
            }
        }
    }