Beispiel #1
0
 void LoadQuestData()
 {
     if (File.Exists(QuestDataPath))
     {
         var bytes = File.ReadAllBytes(QuestDataPath);
         QuestData = SerializationUtility.DeserializeValue <QuestData>(bytes, DataFormat);
         if (QuestData == null)
         {
             ResetQuestData();
         }
         else
         {
             CurrentQuestChapterIndex = 0;
             while (IsValidQuestChapterIndex(CurrentQuestChapterIndex) &&
                    QuestBook.QuestChapters[CurrentQuestChapterIndex].Quests.All((quest) => QuestData.IsCompleted(quest.ID)))
             {
                 CurrentQuestChapterIndex++;
             }
         }
     }
     else
     {
         ResetQuestData();
     }
 }
Beispiel #2
0
        public static void Load(string fileName, string password = null)
        {
            Dictionary <string, object> entry;

            string filePath = GetFilePath(fileName);

            if (File.Exists(filePath))
            {
                List <Object> objectReferences = new List <Object>();
                {
                    byte[] bytes = File.ReadAllBytes(filePath);
                    if (!string.IsNullOrWhiteSpace(password))
                    {
                        bytes = Decrypt(bytes, password);
                    }

                    entry = SerializationUtility.DeserializeValue <Dictionary <string, object> >(
                        bytes,
                        DataFormat.JSON,
                        objectReferences);
                }
            }
            else
            {
                entry = new Dictionary <string, object>();
            }

            data.Set(fileName, entry);
        }
Beispiel #3
0
        void LoadHighScoresFromFile()
        {
            var bytes = File.ReadAllBytes(_highScoreFilePath);

            _highScoreEntries = SerializationUtility
                                .DeserializeValue <List <HighScoreEntry> >(bytes, DataFormat.JSON);
        }
Beispiel #4
0
 void ReadDataFromFile()
 {
     //get data from json
     byte[] bytes = File.ReadAllBytes(dataPath);
     userContainer = SerializationUtility.DeserializeValue <UserContainer>(bytes, DataFormat.Binary);
     Debug.Log("Reading data from file");
 }
 public void LoadData(string path)
 {
     byte[] bytes = Resources.Load <TextAsset>(path).bytes;
     newData = SerializationUtility.DeserializeValue <Data>(bytes, DataFormat.JSON);
     Debug.Log("dd");
     // newData = SerializationUtility.DeserializeValue<Data>(bytes, DataFormat.Binary);
 }
Beispiel #6
0
    private void PopulateSavePreview(IEnumerable <FileInfo> files)
    {
        foreach (FileInfo file in files)
        {
            DataFormat format = DataFormat.Binary;
            var        bytes  = File.ReadAllBytes(file.FullName);
            if (bytes == null)
            {
                Debug.LogWarning($"Failed reading file: {file.Name}.");
                continue;
            }

            SaveData saveFile = SerializationUtility.DeserializeValue <SaveData>(bytes, format);
            if (saveFile == null)
            {
                Debug.LogWarning($"Failed serializing file: {file.Name}.");
                continue;
            }

            LoadDataPreview save = Instantiate(saveGO).GetComponent <LoadDataPreview>();
            save.name = file.Name.Replace(Save.fileExtension, "");

            save.Initialize(save.name, saveFile);
            save.SetBackAction(() => loadMenu.SetActive(false));

            loadPreview.PushLayoutElement(save.GetComponent <LayoutElement>());
        }

        loadPreview.SnapToIndex(0);
    }
        public void OnAfterDeserialize()
        {
            SerializedData val = SerializationUtility.DeserializeValue <SerializedData>(bytes, DataFormat.Binary, _unityReferences);

            _delegate        = val.Delegate;
            _parameterValues = val.ParameterValues;
        }
        private void LoadCache()
        {
            var      filePath = Path.Combine(SirenixAssetPaths.OdinTempPath, tempCacheFilename).Replace("\\", "/");
            FileInfo file     = new FileInfo(filePath);

#if SIRENIX_INTERNAL
            // This detects if a crash happened during deserialization of the persistent cache; if so it's likely due to the unsafe bug.
            // Delete the cache file so that the user has a chance to rebuild the project.
            string deserializedCacheFinishedKey = SirenixAssetPaths.OdinTempPath.Replace('/', '.') + ".CacheDeserializationFinished";
            if (EditorPrefs.GetBool(deserializedCacheFinishedKey, true) == false)
            {
                Debug.LogError("Detected failed deserialization of PersistentContextCache. Deleting cache file. Try forcing a rebuild.");

                if (file.Exists)
                {
                    file.Delete();
                }
            }

            EditorPrefs.SetBool(deserializedCacheFinishedKey, false);
#endif

            try
            {
                this.approximateSizePerEntry = defaultApproximateSizePerEntry;

                if (file.Exists)
                {
                    using (FileStream stream = file.OpenRead())
                    {
                        DeserializationContext context = new DeserializationContext();
                        context.Config.DebugContext.LoggingPolicy       = LoggingPolicy.Silent;          // Shut up...
                        context.Config.DebugContext.ErrorHandlingPolicy = ErrorHandlingPolicy.Resilient; // ...  and do your job!

                        this.cache = SerializationUtility.DeserializeValue <IndexedDictionary <IContextKey, GlobalPersistentContext> >(stream, DataFormat.Binary, new List <UnityEngine.Object>(), context);
                    }

                    if (this.EntryCount > 0)
                    {
                        this.approximateSizePerEntry = (int)(file.Length / this.EntryCount);
                    }
                }
                else
                {
                    this.cache.Clear();
                }
            }
            catch (Exception ex)
            {
                this.cache = new IndexedDictionary <IContextKey, GlobalPersistentContext>();
                Debug.LogError("Exception happened when loading Persistent Context from file.");
                Debug.LogException(ex);
            }
#if SIRENIX_INTERNAL
            finally
            {
                EditorPrefs.SetBool(deserializedCacheFinishedKey, true);
            }
#endif
        }
    public void LoadRobotDataJsonFromPlayerPrefs(string key)
    {
        string jsonString = PlayerPrefs.GetString(key);
        var    bytes      = System.Text.Encoding.UTF8.GetBytes(jsonString);

        this.robotDataEntries = SerializationUtility.DeserializeValue <List <RobotDataEntry> >(bytes, DataFormat.JSON);
    }
        internal object DropObject(DropEvents dropEvent)
        {
            this.dropEvent      = dropEvent;
            this.WillDrop       = true;
            this.IsBeingClaimed = dropEvent != DropEvents.None && dropEvent != DropEvents.Canceled;

            if (this.lastSeenEvent == EventType.Repaint)
            {
                this.FinalizeDropObject();
            }

            if (dropEvent == DropEvents.Copied)
            {
                if (this.Object.GetType().InheritsFrom(typeof(UnityEngine.Object)))
                {
                    return(this.Object);
                }

                using (var stream = new MemoryStream())
                {
                    List <UnityEngine.Object> unityReferences;
                    SerializationUtility.SerializeValue(this.Object, stream, DataFormat.Binary, out unityReferences);
                    stream.Position = 0;
                    return(SerializationUtility.DeserializeValue <object>(stream, DataFormat.Binary, unityReferences));
                }
            }

            return(this.Object);
        }
Beispiel #11
0
        public static void SerializeDataDemo()
        {
            string path = Application.dataPath + "/Editor/EditorLearn/Odin/MyData.json";

            var originalData = new MyData();

            originalData.reference           = new MyData();
            originalData.reference.reference = originalData;

            // Unity should be allowed to handle serialization and deserialization of its own weird objects.
            // So if your data-graph contains UnityEngine.Object types, you will need to provide Odin with
            // a list of UnityEngine.Object which it will then use as an external reference resolver.
            List <UnityEngine.Object> unityObjectReferences = new List <UnityEngine.Object>();

            // 序列化
            {
                var bytes = SerializationUtility.SerializeValue(originalData, DataFormat.JSON, out unityObjectReferences);
                File.WriteAllBytes(path, bytes);
                // If you want the json string, use UTF8 encoding
                // var jsonString = System.Text.Encoding.UTF8.GetString(bytes);
            }

            // 反序列化
            {
                var bytes = File.ReadAllBytes(path);
                // If you have a string to deserialize, get the bytes using UTF8 encoding
                // var bytes = System.Text.Encoding.UTF8.GetBytes(jsonString);
                var data = SerializationUtility.DeserializeValue <MyData>(bytes, DataFormat.JSON, unityObjectReferences);
                Debug.Log(data.reference.reference == data);
                Debug.Log(originalData.reference.reference == originalData);
            }
        }
Beispiel #12
0
        public static NodeGraph Copy(this NodeGraph graph)
        {
            byte[]    copyData = SerializationUtility.SerializeValue(graph, DataFormat.Binary);
            NodeGraph gcopy    = (NodeGraph)SerializationUtility.DeserializeValue <NodeGraph>(copyData, DataFormat.Binary);

            return(gcopy);
        }
        public static List <NodeGroupGraph> GetAll()
        {
            List <NodeGroupGraph> groupedNodes   = new List <NodeGroupGraph>();
            DirectoryInfo         customNodesDir = new DirectoryInfo(NodeGroupGraph.exportPath);

            if (!customNodesDir.Exists)
            {
                return(null);
            }

            FileInfo[] files = customNodesDir.GetFiles("*.nt");

            foreach (var file in files)
            {
                string assID = file.Name.Replace(".nt", "");

                if (loadedGraphs.ContainsKey(assID))
                {
                    groupedNodes.Add(loadedGraphs[assID]);
                }
                else
                {
                    byte[]         nodeGroupData = File.ReadAllBytes(file.FullName);
                    NodeGroupGraph po            = SerializationUtility.DeserializeValue <NodeGroupGraph>(nodeGroupData, dataFormat);
                    groupedNodes.Add(po);
                    loadedGraphs.Add(po.assetID, po);
                }
            }
            return(groupedNodes);
        }
Beispiel #14
0
        private static void LoadMechaConfig(DataFormat dataFormat)
        {
            MechaConfigDict.Clear();

            DirectoryInfo di = new DirectoryInfo(MechaConfigFolder_Build);

            if (di.Exists)
            {
                foreach (FileInfo fi in di.GetFiles("*.config", SearchOption.AllDirectories))
                {
                    byte[]      bytes  = File.ReadAllBytes(fi.FullName);
                    MechaConfig config = SerializationUtility.DeserializeValue <MechaConfig>(bytes, dataFormat);
                    if (MechaConfigDict.ContainsKey(config.MechaConfigName))
                    {
                        Debug.LogError($"机甲配置重名:{config.MechaConfigName}");
                    }
                    else
                    {
                        MechaConfigDict.Add(config.MechaConfigName, config);
                    }
                }
            }
            else
            {
                Debug.LogError("机甲配置表不存在");
            }
        }
    public void OnAfterDeserialize()
    {
        var val = SerializationUtility.DeserializeValue <OdinSerializedData>(this.bytes, DataFormat.Binary, this.unityReferences);

        this.Delegate        = val.Delegate;
        this.ParameterValues = val.ParameterValues;
    }
Beispiel #16
0
        private static void LoadAbilityGroupConfig(DataFormat dataFormat)
        {
            AbilityGroupConfigDict.Clear();
            DirectoryInfo di = new DirectoryInfo(AbilityGroupConfigFolder_Build);

            if (di.Exists)
            {
                foreach (FileInfo fi in di.GetFiles("*.config", SearchOption.AllDirectories))
                {
                    byte[]       bytes  = File.ReadAllBytes(fi.FullName);
                    AbilityGroup config = SerializationUtility.DeserializeValue <AbilityGroup>(bytes, dataFormat);
                    if (AbilityConfigDict.ContainsKey(config.AbilityGroupName))
                    {
                        Debug.LogError($"技能组重名:{config.AbilityGroupName}");
                    }
                    else
                    {
                        foreach (string ac_name in config.AbilityNames)
                        {
                            if (AbilityConfigDict.TryGetValue(ac_name, out Ability ability))
                            {
                                config.Abilities.Add(ability);
                            }
                        }

                        AbilityGroupConfigDict.Add(config.AbilityGroupName, config);
                    }
                }
            }
            else
            {
                Debug.LogError("技能组配置表不存在");
            }
        }
Beispiel #17
0
        private static void LoadMechaComponentConfig(DataFormat dataFormat)
        {
            MechaComponentConfigDict.Clear();

            FileInfo fi = new FileInfo(AllMechaComponentConfigPath_Build);

            if (fi.Exists)
            {
                byte[] bytes = File.ReadAllBytes(fi.FullName);
                List <MechaComponentConfig> configs = SerializationUtility.DeserializeValue <List <MechaComponentConfig> >(bytes, dataFormat);
                foreach (MechaComponentConfig config in configs)
                {
                    if (MechaComponentConfigDict.ContainsKey(config.MechaComponentKey))
                    {
                        Debug.LogError($"机甲组件配置重名:{config.MechaComponentKey}");
                    }
                    else
                    {
                        MechaComponentConfigDict.Add(config.MechaComponentKey, config);
                    }
                }
            }
            else
            {
                Debug.LogError("机甲组件配置表不存在");
            }
        }
Beispiel #18
0
        /// <summary>
        /// Copies or gets the current object in the clipboard.
        /// </summary>
        public static object Paste()
        {
            if (IsEmpty())
            {
                throw new Exception("No object in clipboard. Check CanPaste() before calling Paste().");
            }

            if (string.IsNullOrEmpty(GUIUtility.systemCopyBuffer) == false)
            {
                return(GUIUtility.systemCopyBuffer);
            }
            else if (Clipboard.copyMode == CopyModes.CopyReference)
            {
                return(Clipboard.obj);
            }
            else if (Clipboard.copyMode == CopyModes.DeepCopy)
            {
                using (var stream = new MemoryStream())
                {
                    List <UnityEngine.Object> unityReferences;
                    SerializationUtility.SerializeValue(obj, stream, DataFormat.Binary, out unityReferences);
                    stream.Position = 0;
                    return(SerializationUtility.DeserializeValue <object>(stream, DataFormat.Binary, unityReferences));
                }
            }
            else if (Clipboard.copyMode == CopyModes.ShallowCopy)
            {
                return(Clipboard.obj.GetType().GetMethod("MemberwiseClone", Flags.AllMembers).Invoke(Clipboard.obj, null));
            }

            return(null);
        }
    public void LoadRobotListFromPlayerPrefs()
    {
        string jsonString = PlayerPrefs.GetString("RobotList");
        var    bytes      = System.Text.Encoding.UTF8.GetBytes(jsonString);

        this.robotList = SerializationUtility.DeserializeValue <List <string> >(bytes, DataFormat.JSON);
    }
        private static bool DeserializeInternal <T>(out T deserializedObject, string filePath)
        {
            try
            {
                if (File.Exists(filePath) == false)
                {
                    throw new FileNotFoundException();
                }

                using (TextReader stream = new StreamReader(filePath, Encoding.UTF8))
                {
                    string json  = stream.ReadToEnd();
                    byte[] bytes = Encoding.UTF8.GetBytes(json);
                    deserializedObject = SerializationUtility.DeserializeValue <T>(bytes, DataFormat.JSON);
                }

                return(true);
            }
            catch (Exception e)
            {
                Logger.Error($"JsonDeserialization Failed: {e.ToString()}");
                deserializedObject = default;
                return(false);
            }
        }
Beispiel #21
0
    public void LoadState(string filePath) // this'll be called from per scene
    {
        if (!File.Exists(filePath))
        {
            return;                         // No state to load
        }
        byte[] bytes = File.ReadAllBytes(filePath);
        gameState = SerializationUtility.DeserializeValue <PersistentData>(bytes, DataFormat.Binary);
        if (m_manager == null)
        {
            m_manager = GameManager.Instance;
            Debug.Log("manager is null");
        }
        if (gameState == null)
        {
            Debug.Log("state is null");
        }

        m_manager.offerPoints                   = gameState.favors;
        m_manager.currentGod                    = gameState.patronGod;
        m_manager.playerStats.health            = gameState.health;
        m_manager.Amanager.specialAbilityObject = m_manager.abilityDatabase.getAbilityObject(gameState.specialAbility);
        //Debug.Log(m_manager.Amanager.specialAbilityObject.AbilityName);
        //m_manager.Amanager.AddAbility();
        //m_manager.Amanager.UpdateSpecialAbility();
        m_manager.UpdateGods();
        LoadInventory();
    }
        /// <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);
        }
    public void LoadScene(string path)
    {
        byte[] ojson = File.ReadAllBytes(path);

        var newRoot = SerializationUtility.DeserializeValue <Dictionary <string, SceneGameObject> >(ojson, DataFormat.JSON);

        mapLoader.LoadMap(newRoot);
    }
 public override T Deserialize <T>(object input)
 {
     using (var ctx = Cache <DeserializationContext> .Claim())
     {
         ctx.Value.Config.SerializationPolicy = SerializationPolicies.Everything;
         return(SerializationUtility.DeserializeValue <T>((byte[])input, DataFormat.Binary, ctx.Value));
     }
 }
        private static T Deserialize <T>(byte[] bytes)
        {
            var data = SerializationUtility.DeserializeValue <T>(bytes, DATA_FORMAT, _deserializationContext);

            _deserializationContext.Reset();
            _deserializationContext.StringReferenceResolver = _container;

            return(data);
        }
Beispiel #26
0
        public static object Deserialize(byte[] bytes)
        {
            var context = new DeserializationContext()
            {
                StringReferenceResolver = new ScriptableObjectStringReferenceResolver(),
            };

            return(SerializationUtility.DeserializeValue <object>(bytes, DataFormat.Nodes, context));
        }
Beispiel #27
0
 public static T FromBytes <T>(byte[] bytes)
 {
                 #if DONT_USE_ODIN_SERIALIZER
     var jsonString = Encoding.UTF8.GetString(bytes);
     return(JsonUtility.FromJson <T>(jsonString));
                 #else
     return(SerializationUtility.DeserializeValue <T>(bytes, DataFormat.Binary));
                 #endif
 }
Beispiel #28
0
        public static T Deserialize <T>(byte[] json, List <UnityEngine.Object> objectReferences)
        {
            if (json == null || json.Length == 0)
            {
                return(default(T));
            }

            return(SerializationUtility.DeserializeValue <T>(json, DataFormat.JSON, objectReferences));
        }
 private static SettingsData LoadSettings()
 {
     using (var stream = new StreamReader(SETTINGS_FILE_LOCATION, Encoding.UTF8))
     {
         var json  = stream.ReadToEnd();
         var bytes = Encoding.UTF8.GetBytes(json);
         return(SerializationUtility.DeserializeValue <SettingsData>(bytes, DataFormat.JSON));
     }
 }
        public void LoadState(string path, DataFormat dataFormat, List <UnityEngine.Object> unityObjectReferences)
        {
            var bytes = File.ReadAllBytes(path);

            // If you have a string to deserialize, get the bytes using UTF8 encoding
            // var bytes = System.Text.Encoding.UTF8.GetBytes(jsonString);

            var data = SerializationUtility.DeserializeValue <ActorBehavior>(bytes, dataFormat, unityObjectReferences);
        }