Exemplo n.º 1
0
        /// <summary>
        /// 从备份文件还原数据
        /// </summary>
        public bool Restore()
        {
            string filePath = string.Format("{0}/OverlordBackup/overlord_{1}_back.dbak", Path.GetDirectoryName(AssetDatabase.GetAssetPath(internalData)), internalData.name);

            if (!File.Exists(filePath))
            {
                filePath = EditorUtility.OpenFilePanel("Restore data", Application.dataPath, "");
            }
            try
            {
                bool              hasDataChanged = false;
                OverlordBackData  backData       = JsonConvert.DeserializeObject <OverlordBackData>(File.ReadAllText(filePath));
                GKToyExternalData internData     = AssetDatabase.LoadAssetAtPath <GKToyExternalData>(backData.internalData.resourcePath);
                internData.data = JsonConvert.DeserializeObject <GKToyData>(File.ReadAllText(backData.internalData.backupPath).Replace("\t\n", "\\n"));
                if (internData.data.RestoreData(this) && !hasDataChanged)
                {
                    hasDataChanged = true;
                }
                List <GKToyExternalData> externDatas = new List <GKToyExternalData>();
                foreach (var external in backData.externalDatas)
                {
                    GKToyExternalData externData = AssetDatabase.LoadAssetAtPath <GKToyExternalData>(external.Value.resourcePath);
                    externData.data = JsonConvert.DeserializeObject <GKToyData>(File.ReadAllText(external.Value.backupPath).Replace("\t\n", "\\n"));
                    if (externData.data.RestoreData(this) && !hasDataChanged)
                    {
                        hasDataChanged = true;
                    }
                    externDatas.Add(externData);
                }
                isPlaying     = backData.isPlaying;
                internalData  = internData;
                externalDatas = externDatas;
                if (hasDataChanged)
                {
                    Debug.Log("Unmatched backup data upgraded, please re-edit changed properties");
                }
                return(true);
            }
            catch
            {
                return(false);
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 备份数据到文件
        /// 备份目录:内部数据源所在目录/OverlordBackup/
        /// </summary>
        public void Backup()
        {
            string dataPath = string.Format("{0}/OverlordBackup/", Path.GetDirectoryName(AssetDatabase.GetAssetPath(internalData)));

            if (!Directory.Exists(dataPath))
            {
                Directory.CreateDirectory(dataPath);
            }
            string           overlordPath = string.Format("{0}overlord_{1}_back.dbak", dataPath, internalData.name);
            OverlordBackData backData     = new OverlordBackData(dataPath, this);

            File.WriteAllText(overlordPath, JsonConvert.SerializeObject(backData, Formatting.Indented));
            string data = JsonConvert.SerializeObject(internalData.data, Formatting.Indented);
            Regex  r    = new Regex(@"(?<=[^\\])\\n");

            data = r.Replace(data, "\t\n");
            File.WriteAllText(backData.internalData.backupPath, data);
            foreach (GKToyExternalData external in externalDatas)
            {
                data = JsonConvert.SerializeObject(external.data, Formatting.Indented);
                File.WriteAllText(backData.externalDatas[external.name].backupPath, r.Replace(data, "\t\n"));
            }
        }