public static ZoneTileSet[] ExportTileSets() { foreach (var wdt in WDTReader.ReadAllWDTs()) { GetTileSets(wdt); } log.Info("Exported {0} ZoneTileSets.", count); return(Tiles); }
public static BoundingBox[] ExportBoundaries() { foreach (var wdt in WDTReader.ReadAllWDTs()) { Vector3 min; Vector3 max; if (wdt.IsWMOOnly) { const float maxDim = TerrainConstants.TileSize * (32.0f); // No terrain, get the boundaries from the MODF min = wdt.WmoDefinitions[0].Extents.Min; max = wdt.WmoDefinitions[0].Extents.Max; var diff = Math.Max(max.X - min.X, max.Y - min.Y); if ((min.X + diff) > maxDim) { var newdiff = maxDim - diff; if ((min.X - newdiff) < -maxDim) { throw new Exception("Can't square map: " + wdt.Name); } min.X = min.X - newdiff; } if ((min.Y + diff) > maxDim) { var newdiff = maxDim - diff; if ((min.Y - newdiff) < -maxDim) { throw new Exception("Can't square map: " + wdt.Name); } min.Y = min.Y - newdiff; } max.X = min.X + diff; max.Y = min.Y + diff; } else { var minX = TerrainConstants.TilesPerMapSide; var maxX = 0; var minY = TerrainConstants.TilesPerMapSide; var maxY = 0; for (var y = 0; y < TerrainConstants.TilesPerMapSide; y++) { for (var x = 0; x < TerrainConstants.TilesPerMapSide; x++) { if (!wdt.TileProfile[x, y]) { continue; } minX = Math.Min(minX, x); maxX = Math.Max(maxX, x); minY = Math.Min(minY, y); maxY = Math.Max(maxY, y); } } var diff = Math.Max(maxX - minX, maxY - minY); if ((minX + diff) > TerrainConstants.TilesPerMapSide) { var newdiff = TerrainConstants.TilesPerMapSide - diff; if ((minX - newdiff) < 0) { throw new Exception("Can't square this map."); } minX = minX - newdiff; } if ((minY + diff) > TerrainConstants.TilesPerMapSide) { var newdiff = TerrainConstants.TilesPerMapSide - diff; if ((minY - newdiff) < 0) { throw new Exception("Can't square this map."); } minY = minY - newdiff; } maxX = minX + diff; maxY = minY + diff; var maxXLoc = TerrainConstants.TileSize * (32 - minX); var maxYLoc = TerrainConstants.TileSize * (32 - minY); var minXLoc = TerrainConstants.TileSize * (31 - maxX); var minYLoc = TerrainConstants.TileSize * (31 - maxY); //var maxXLoc = TerrainConstants.TileSize * (maxX - 32); //var maxYLoc = TerrainConstants.TileSize * (maxY - 32); //var minXLoc = TerrainConstants.TileSize * (minX - 32); //var minYLoc = TerrainConstants.TileSize * (minY - 32); min = new Vector3(minXLoc, minYLoc, -2048.0f); max = new Vector3(maxXLoc, maxYLoc, 2048.0f); // Convert to in-game coordinates var temp = min.X; min.X = min.Y; min.Y = temp; temp = max.X; max.X = max.Y; max.Y = temp; } // TODO: Map bounds that in the file are a little off min.X -= 200.0f; min.Y -= 200.0f; max.X += 200.0f; max.Y += 200.0f; // Some bounding boxes (specifically the ones for the WMO-only tiles) have incorrect Z spans min.Z = -2048.0f; max.Z = 2048.0f; //text.WriteLine(dbcMapEntry.Id + "\t" + wdtName + "\tMin: " + min + "\tMax: " + max); Boundaries[(int)wdt.Entry.Id] = new BoundingBox(min, max); } return(Boundaries); }