Esempio n. 1
0
        // wrestle engine-useful TileMap format into less useful (but writable) SerializableMap
        public static SerializableMap FromTilemap(TileMap map)
        {
            SerializableMap s = new SerializableMap();

            Dictionary <string, int> tileNumbers = new Dictionary <string, int>();
            int tileCount = 0;

            s.tiles       = new int[map.width][];;
            s.collision   = new bool[map.width][];
            s.color       = map.color.PackedValue;
            s.scripts     = map.tileScripts;
            s.npcs        = map.npcs;
            s.playerStart = map.playerStart;

            for (int x = 0; x < map.width; x++)
            {
                s.tiles[x]     = new int[map.height];
                s.collision[x] = new bool[map.height];
                for (int y = 0; y < map.height; y++)
                {
                    Tile   tile     = map.map[x, y];
                    string tilename = tile.filename;
                    if (!tileNumbers.ContainsKey(tilename))
                    {
                        tileNumbers.Add(tilename, tileCount++);
                    }
                    s.tiles[x][y]     = tileNumbers[tilename];
                    s.collision[x][y] = map.checkCollision(new Vector2(x, y));
                }
            }
            s.tilenames = new string[tileCount];
            tileNumbers.Keys.CopyTo(s.tilenames, 0);

            return(s);
        }
Esempio n. 2
0
        public static void Save(ContentManager Content, TileMap map, string filename)
        {
            map.filename = filename;
            SerializableMap s        = FromTilemap(map);
            string          json     = JsonSerializer.Serialize(s, OPTIONS);
            string          location = Content.RootDirectory + MAPS_DIRECTORY + filename;

            File.WriteAllText(location, json);
        }
Esempio n. 3
0
 public static TileMap Load(ContentManager Content, string filename)
 {
     try
     {
         string          json = File.ReadAllText(Content.RootDirectory + MAPS_DIRECTORY + filename);
         SerializableMap s    = JsonSerializer.Deserialize <SerializableMap>(json, OPTIONS);
         return(ToTilemap(Content, filename, s));
     }
     catch (Exception e)
     {
         Debug.WriteLine("No map file found: " + filename);
         //Debug.WriteLine(e.StackTrace);
         return(null);
     }
 }
Esempio n. 4
0
        // the above process, but in reverse
        public static TileMap ToTilemap(ContentManager Content, string filename, SerializableMap s)
        {
            int width = s.tiles.Length, height = s.tiles[0].Length;

            Tile[,] tiles = new Tile[width, height];
            for (int x = 0; x < width; x++)
            {
                for (int y = 0; y < height; y++)
                {
                    tiles[x, y]           = new Tile(Content, s.tilenames[s.tiles[x][y]]);
                    tiles[x, y].collision = s.collision[x][y];
                }
            }
            s.scripts.ForEach(s => s.load());

            // load NPC textures
            s.npcs.ForEach(npc => npc.setTexture(Content, npc.filename));

            return(new TileMap(tiles, new Color(s.color), filename, s.npcs, s.scripts, s.playerStart));
        }