示例#1
0
    /// <summary>
    /// 序列化游戏进度到文件
    /// </summary>
    /// <param name="dataSource">游戏进度数据源</param>
    /// <param name="path">保存路径</param>
    /// <param name="fileName">文件名</param>
    public static void ToFile(FormatSaveFile dataSource, string path, string fileName)
    {
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }
        var file = path + @"\" + fileName;

        using (StreamWriter sw = File.CreateText(file))
        {
            var scene = dataSource.scene;
            var pos   = dataSource.pos;
            var euler = dataSource.euler;

            sw.WriteLine($"Scene {scene}");
            sw.WriteLine($"Pos {pos.x:0.000} {pos.y:0.000} {pos.z:0.000}");
            sw.WriteLine($"Euler {euler.x:0.000} {euler.y:0.000} {euler.z:0.000}");

            var cache = dataSource.cache;
            foreach (var pair in cache)
            {
                sw.WriteLine($"Pair {pair.Key} {pair.Value}");
            }
        }
    }
示例#2
0
    /// <summary>
    /// 从存档文件到内存,没有安全校验
    /// </summary>
    /// <param name="file">完整的存档文件路径</param>
    /// <returns></returns>
    public static FormatSaveFile ToObj(string file)
    {
        FormatSaveFile reserve = new FormatSaveFile
        {
            cache = new Dictionary <string, int>()
        };

        using (StreamReader sr = File.OpenText(file))
        {
            string s = string.Empty;
            while ((s = sr.ReadLine()) != null)
            {
                var line = s.Split(' ');
                if (line[0].Equals("Scene"))
                {
                    reserve.scene = line[1];
                }
                if (line[0].Equals("Pos"))
                {
                    reserve.pos = new Vector3(
                        float.Parse(line[1]), float.Parse(line[2]), float.Parse(line[3]));
                }
                if (line[0].Equals("Euler"))
                {
                    reserve.euler = new Vector3(
                        float.Parse(line[1]), float.Parse(line[2]), float.Parse(line[3]));
                }
                if (line[0].Equals("Pair"))
                {
                    reserve.cache.Add(line[1], int.Parse(line[2]));
                }
            }
        }
        return(reserve);
    }
示例#3
0
    /// <summary>
    /// 写入初始化游戏进度存档
    /// </summary>
    public void CreateInitSaveFile()
    {
        PlayerPos     = initPlayerPos;
        PlayerForward = initPlayerForward;
        PlayerScene   = initPlayerScene;
        Url2Point     = new Dictionary <string, int>()
        {
            { "Player", (int)COLOR_TYPE.NULL },
            { "BKeyFlag", 0 }
        };

        FormatSaveFile saveFile = new FormatSaveFile
        {
            scene = PlayerScene,
            pos   = PlayerPos,
            euler = PlayerForward,
            cache = Url2Point
        };

        SerializeTool.ToFile(saveFile, savePath, saveFileName);

        string hash = SerializeTool.GetMD5Hash(savePath + @"\" + saveFileName);

        SerializeTool.ToFile(hash, savePath, hashFileName);
    }