示例#1
0
        public IMapInfo InsertMap(int levelId, Point origin, IMapInfo parentMap = null)
        {
            var levelDetails = engineDataManager.Levels.First(x => x.Id == levelId);

            if (levelDetails.LevelPreset == null)
            {
                // There is no preset level, so we must generate one
                var generator = getRandomizedMapGenerator(levelDetails.LevelName);

                if (generator == null)
                {
                    throw new OpenDiablo2Exception($"Could not locate a map generator for '{levelDetails.LevelName}'.");
                }

                generator.Generate(parentMap, origin);

                // There is no core map so we cannot return a value here. If anyone actually uses
                // this value on a generated map they are making a terrible mistake anyway...
                return(null);
            }

            // Some maps have variations, so lets pick a random one
            var mapNames = new List <string>();

            if (levelDetails.LevelPreset.File1 != "0")
            {
                mapNames.Add(levelDetails.LevelPreset.File1);
            }
            if (levelDetails.LevelPreset.File2 != "0")
            {
                mapNames.Add(levelDetails.LevelPreset.File2);
            }
            if (levelDetails.LevelPreset.File3 != "0")
            {
                mapNames.Add(levelDetails.LevelPreset.File3);
            }
            if (levelDetails.LevelPreset.File4 != "0")
            {
                mapNames.Add(levelDetails.LevelPreset.File4);
            }
            if (levelDetails.LevelPreset.File5 != "0")
            {
                mapNames.Add(levelDetails.LevelPreset.File5);
            }
            if (levelDetails.LevelPreset.File6 != "0")
            {
                mapNames.Add(levelDetails.LevelPreset.File6);
            }


            var random = new Random(Seed);
            // -------------------------------------------------------------------------------------
            // var mapName = "data\\global\\tiles\\" + mapNames[random.Next(mapNames.Count)].Replace("/", "\\");
            // -------------------------------------------------------------------------------------
            // TODO: ***TEMP FOR TESTING
            var mapName = "data\\global\\tiles\\" + mapNames[0].Replace("/", "\\");

            // -------------------------------------------------------------------------------------
            MapName = levelDetails.LevelPreset.Name;
            Act     = levelDetails.LevelType.Act;

            var fileData = resourceManager.GetMPQDS1(mapName, levelDetails.LevelPreset, levelDetails.LevelType);

            var result = new MapInfo
            {
                LevelId      = levelId,
                FileData     = fileData,
                CellInfo     = new Dictionary <eRenderCellType, MapCellInfo[]>(),
                TileLocation = new Rectangle(origin, new Size(fileData.Width - 1, fileData.Height - 1))
            };

            mapInfo.Add(result);

            // Only change music if loading a 'core' map
            if (Enum.IsDefined(typeof(eLevelId), levelId))
            {
                soundProvider.StopSong();
                soundProvider.LoadSong(mpqProvider.GetStream(ResourcePaths.GetMusicPathForLevel((eLevelId)levelId)));
                soundProvider.PlaySong();
            }


            return(result);
        }