示例#1
0
        private Action BuildLevel(IBuilder builder)
        {
            string level = string.Format("level_{0}", builder.Level);

            if (!Directory.Exists(level))
            {
                Directory.CreateDirectory(level);
            }

            TileType[,] map = builder.CreateTileMap(tileTypes);

            Func <string, FileStream> getTileFileStream = tileType =>
            {
                string path = string.Format("../data/tiles/{0}.png", tileType);
                return(File.OpenRead(path));
            };

            string indexTarget    = string.Concat(level, "/map.idx");
            string csvTarget      = string.Concat(level, "/map.csv");
            string fragmentTarget = string.Concat(level, "/map_{0}_{1}.png");

            string metadata         = string.Format(LevelBuilder.FileFormat, builder.Level, "{0}");
            string metadataRelative = string.Concat("../", metadata);
            string metadataTarget   = string.Concat(level, "/map.{0}");
            string mapTarget        = string.Concat(level, "/map.png");

            // metadata actually used for rendering maps.
            FragmentedPersistance fragmentedPersistance = new FragmentedPersistance(getTileFileStream);

            fragmentedPersistance.SaveFragmentMetadata(map, indexTarget, builder);
            fragmentedPersistance.SaveTileMap(map, fragmentTarget);
            fragmentedPersistance.SaveTileMatrix(map, csvTarget);

            // other metadata: just copy over.
            string npcSource = string.Format(metadataRelative, "npc");
            string npcTarget = string.Format(metadataTarget, "npc");

            string itemSource = string.Format(metadataRelative, "item");
            string itemTarget = string.Format(metadataTarget, "item");

            File.Copy(npcSource, npcTarget, true);
            File.Copy(itemSource, itemTarget, true);

            return(() =>
            {
                // full map for preview for viewing and debugging.
                Persistance persistance = new Persistance(getTileFileStream);
                persistance.SaveTileMap(map, mapTarget);
            });
        }