public void PaintCellEllipse(int xStart, int yStart, int xEnd, int yEnd, Cell cell) { // Draw an ellipse centered in the passed-in coordinates float xCenter = (xEnd + xStart) / 2.0f; float yCenter = (yEnd + yStart) / 2.0f; float radius = Math.Min(xEnd - xStart, yEnd - yStart) / 2.0f; float xAxis = (xEnd - xStart) / 2.0f; float yAxis = (yEnd - yStart) / 2.0f; float majorAxisSquared = (float)Math.Pow(Math.Max(xAxis, yAxis), 2.0); float minorAxisSquared = (float)Math.Pow(Math.Min(xAxis, yAxis), 2.0); for (int y = yStart; y <= yEnd; y++) for (int x = xStart; x <= xEnd; x++) { // Only draw if (x,y) is within the ellipse if (Math.Sqrt((x - xCenter) * (x - xCenter) / majorAxisSquared + (y - yCenter) * (y - yCenter) / minorAxisSquared) <= 1.0f) Cells[x, y] = cell; } }
public void GenerateLevel() { // Create our Cell map and fill with Granite (we'll dig rooms out of it) Cells = new Cell[MapWidth, MapHeight]; PaintCellRectangle(0, 0, MapWidth - 1, MapHeight - 1, new Cell_Granite(), true); rand = new Random(++seed); // Choose which type of Dungeon level we want to create. Only one type for now, but this can // be replaced with a random selection between any number of Generators. Farther out, we can // also tie generation of levels together (e.g. a "town" level generator can specify that the // next level generator should be a "sewer" level generator). DungeonLevelGenerator levelGenerator = new StandardLevelGenerator(this); levelGenerator.Generate(); // Keep a pointer to our level generator for debug rendering purposes. _debugLevelGenerator = levelGenerator; SaveOnHD(m_filename); }
public void PaintCellRectangle(int xStart, int yStart, int xEnd, int yEnd, Cell cell, bool forceDraw) { for (int y = yStart; y <= yEnd; y++) for (int x = xStart; x <= xEnd; x++) { if (forceDraw || Cells[x, y] == null || Cells[x, y].GetType() == typeof(Cell_Granite)) Cells[x, y] = cell; } }
public void PaintCellIfEmpty(int x, int y, Cell cell) { if (x >= 0 && x < MapWidth && y >= 0 && y < MapHeight) if (Cells[x, y].GetType() == typeof(Cell_Granite)) Cells[x, y] = cell; }