예제 #1
0
    public void SaveMap(string savefilepath)
    {
        //string savefilepath = StandaloneFileBrowser.SaveFilePanel("Save the map", "", "New Map", extenstionSave);
        //string savefilepath = EditorUtility.SaveFilePanel("Save the map", Application.dataPath + "/Levels", "New Map", "xml");
        List <SerializableTile> temp = new List <SerializableTile>();

        foreach (CombinedTile item in levelTiles)
        {
            SerializableTile tempTile = new SerializableTile(item.Tile.Index, item.Tile.Name, item.Tile.Rotation, item.Tile.Layer, item.Tile.X, item.Tile.Y, item.Tile.Dimensions, item.Tile.Category);
            temp.Add(tempTile);
        }
        CompleteLevel cl = new CompleteLevel(new MapInfo(mapname, levelWidth, levelHeight), temp);

        FileStream fStream = File.Create(savefilepath);

        //Serialize to xml
        DataContractSerializer bf       = new DataContractSerializer(cl.GetType());
        MemoryStream           streamer = new MemoryStream();

        //Serialize the file
        bf.WriteObject(streamer, cl);
        streamer.Seek(0, SeekOrigin.Begin);

        //Save to disk
        fStream.Write(streamer.GetBuffer(), 0, streamer.GetBuffer().Length);

        // Close the file to prevent any corruptions
        fStream.Close();

        string result = XElement.Parse(Encoding.ASCII.GetString(streamer.GetBuffer()).Replace("\0", "")).ToString();

        Debug.Log("Saved level. Saved tiles: " + temp.Count + " Serialized Result: " + result);
    }
예제 #2
0
        private void BuildWorldFromSerialized(SerializableWorld world)
        {
            boardSize = world.WorldData.GetLength(0);
            tiles     = new Tile[boardSize, boardSize];

            for (int x = 0; x < boardSize; x++)
            {
                for (int z = 0; z < boardSize; z++)
                {
                    SerializableTile serialTile = world.WorldData[x, z];
                    Tile             tile       = CreateTileAt(x, z, serialTile.TileType);
                    if (serialTile.Entity != null)
                    {
                        tile.Entity       = entityFactory.Get(serialTile.Entity.EntityType);
                        tile.Entity.Level = serialTile.Entity.Level;
                    }
                }
            }

            RebakeNavMesh();

            resources.Money      = world.ResourceData.Money;
            resources.Population = world.ResourceData.Population;
        }