Example #1
0
        private static RegionModels ExtractRegionM2s(WDTFile wdt)
        {
            LoadedM2Ids = new List <uint>(250);
            RegionModels models;

            if (wdt == null)
            {
                return(null);
            }
            if ((wdt.Header.Header1 & WDTFlags.GlobalWMO) != 0)
            {
                // No terrain, load the global WMO
                if (wdt.ObjectDefinitions == null)
                {
                    return(null);
                }

                models = new RegionModels
                {
                    HasTiles      = false,
                    ObjectsByTile = new TileModels[1, 1]
                };

                models.ObjectsByTile[0, 0] = ExtractWDTM2s(wdt.ObjectDefinitions);

                LoadedM2Ids.Clear();
                return(models);
            }


            models = new RegionModels
            {
                HasTiles = true
            };

            for (var tileY = 0; tileY < TerrainConstants.TilesPerMapSide; tileY++)
            {
                for (var tileX = 0; tileX < TerrainConstants.TilesPerMapSide; tileX++)
                {
                    //if (tileX != 36) continue;
                    //if (tileY != 49) continue;

                    if (!wdt.TileProfile[tileX, tileY])
                    {
                        continue;
                    }
                    var adtName = string.Format("{0}_{1:00}_{2:00}", wdt.Name, tileX, tileY);
                    var adt     = ADTParser.Process(manager, wdt.Path, adtName);
                    if (adt == null)
                    {
                        continue;
                    }

                    models.ObjectsByTile[tileX, tileY] = ExtractTileM2s(tileX, tileY, adt);
                }
            }

            LoadedM2Ids.Clear();
            return(models);
        }
Example #2
0
        private static RegionModels ExtractRegionM2s(WDTFile wdt)
        {
            LoadedM2Ids = new List<uint>(250);
            RegionModels models;

            if (wdt == null) return null;
            if ((wdt.Header.Header1 & WDTFlags.GlobalWMO) != 0)
            {
                // No terrain, load the global WMO
                if (wdt.ObjectDefinitions == null) return null;

                models = new RegionModels
                {
                    HasTiles = false,
                    ObjectsByTile = new TileModels[1, 1]
                };

                models.ObjectsByTile[0, 0] = ExtractWDTM2s(wdt.ObjectDefinitions);

                LoadedM2Ids.Clear();
                return models;
            }

            models = new RegionModels
            {
                HasTiles = true
            };

            for (var tileY = 0; tileY < TerrainConstants.TilesPerMapSide; tileY++)
            {
                for (var tileX = 0; tileX < TerrainConstants.TilesPerMapSide; tileX++)
                {
                    //if (tileX != 36) continue;
                    //if (tileY != 49) continue;

                    if (!wdt.TileProfile[tileX, tileY]) continue;
                    var adtName = string.Format("{0}_{1:00}_{2:00}", wdt.Name, tileX, tileY);
                    var adt = ADTParser.Process(manager, wdt.Path, adtName);
                    if (adt == null) continue;

                    models.ObjectsByTile[tileX, tileY] = ExtractTileM2s(tileX, tileY, adt);
                }
            }

            LoadedM2Ids.Clear();
            return models;
        }