Exemplo n.º 1
0
 public void Load()
 {
     using (var stream = new FileStream(this.Path, FileMode.Open))
     {
         var context = new DeserializationContext();
         // var policy = SerializationPolicies.Unity;
         // context.Config.SerializationPolicy = policy;
         var reader     = SerializationUtility.CreateReader(stream, context, DataFormat.JSON);
         var serializer = Serializer.Get <Transform>();
         serializer.ReadValue(reader);
     }
 }
Exemplo n.º 2
0
        /// <summary>
        /// Load a binary save from a given path.
        /// </summary>
        /// <param name="path"></param>
        public static BinarySave Load(string path)
        {
            if (File.Exists(path))
            {
                using (var fileStream = new FileStream(path, FileMode.Open))
                {
                    return(SerializationUtility.DeserializeValue <BinarySave>(SerializationUtility.CreateReader(fileStream, new DeserializationContext(), DataFormat.Binary)));
                }
            }

            return(null);
        }
Exemplo n.º 3
0
    void Load(Stream stream, DataFormat format = DataFormat.Binary)
    {
        var context = new DeserializationContext();

        if (RequireSaveGameAttributeEverywhere)
        {
            context.Config.SerializationPolicy = _serializationPolicy;
        }
        var resolver = new ReferenceResolver();

        context.IndexReferenceResolver  = resolver;
        context.StringReferenceResolver = resolver;
        IDataReader reader = SerializationUtility.CreateReader(stream, context, format);

        // destroy old prefab instances
        foreach (SaveGameObject obj in GameObject.FindObjectsOfType <SaveGameObject>())
        {
            GameObject.DestroyImmediate(obj.gameObject);
        }

        // set up resolver root objects
        GameObject[] rootObjects = gameObject.scene.GetRootGameObjects();
        resolver.RootObjects = new Dictionary <string, Transform>(rootObjects.Length);
        foreach (GameObject go in rootObjects)
        {
            resolver.RootObjects[go.name] = go.transform;
        }

        Type type;

        if (reader.EnterNode(out type) && reader.CurrentNodeName == "prefabs")
        {
            // instantiate saved prefab instances
            var serializer    = Serializer.Get <Transform>();
            var prefabsByName = PrefabsByName();
            while (reader.EnterNode(out type))
            {
                string prefabName;
                if (reader.ReadString(out prefabName))
                {
                    Transform      transform = serializer.ReadValue(reader);
                    Transform      instance  = null;
                    SaveGameObject prefabObj;
                    if (prefabsByName.TryGetValue(prefabName, out prefabObj))
                    {
                        instance = GameObject.Instantiate(prefabObj, transform).transform;
                    }
                    else
                    {
                        Debug.LogWarningFormat("Missing prefab {0} in SaveablePrefabs list", prefabName);
                    }
                    resolver.Register(instance);
                    reader.ExitNode();
                }
            }
            reader.ExitNode();
        }

        if (reader.EnterNode(out type) && reader.CurrentNodeName == "saveables")
        {
            var serializer = Serializer.Get <MonoBehaviour>();
            while (reader.EnterNode(out type))
            {
                var saveable = serializer.ReadValueWeak(reader) as ISaveable;
                resolver.Register(saveable);
                if (saveable != null)
                {
                    IFormatter formatter = FormatterLocator.GetFormatter(saveable.GetType(), _serializationPolicy);
                    formatter.Deserialize(saveable, reader);
                    saveable.Loaded = true;
                    saveable.OnAfterLoad();
                }
                reader.ExitNode();
            }
            reader.ExitNode();
        }
    }
        /// <summary>
        /// Load a binary save from a given path.
        /// </summary>
        /// <param name="path"></param>
        internal static UniversalSave Load(string path, DataFormat dataFormat)
        {
            if (File.Exists(path))
            {
                Dictionary <string, object> dictionary = null;
                UniversalSave universalSave            = null;

                using (var fileStream = new FileStream(path, FileMode.Open))
                {
                    dictionary = SerializationUtility.DeserializeValue <Dictionary <string, object> >(SerializationUtility.CreateReader(fileStream, new DeserializationContext(), dataFormat));
                }

                if (dictionary != null)
                {
                    return(new UniversalSave()
                    {
                        variables = dictionary
                    });
                }

                using (var fileStream = new FileStream(path, FileMode.Open))
                {
                    universalSave = SerializationUtility.DeserializeValue <UniversalSave>(SerializationUtility.CreateReader(fileStream, new DeserializationContext(), dataFormat));
                }

                if (universalSave != null)
                {
                    return(universalSave);
                }
            }

            return(null);
        }