private static TileRect GetCornerRect(LevelCorner corner, int width, int height, int size) { int minX, maxX, minY, maxY; if (corner.IsSouth()) { minY = 0; maxY = size - 1; } else { minY = height - size; maxY = height - 1; } if (corner.IsEast()) { minX = 0; maxX = size - 1; } else { minX = width - size; maxX = width - 1; } var rect = new TileRect(minX, minY, maxX, maxY); rect.Clamp(width, height); return(rect); }
private TilePosition GetRandomTileExcludingRect(int width, int height, TileRect excludedRect) { var totalArea = width * height; var entryRectArea = excludedRect.Area; var availableTilesCount = totalArea - entryRectArea; if (availableTilesCount == 0) { return(new TilePosition(0, 0)); } var exitTileIndex = _random.Next() % availableTilesCount; var tileIndex = 0; for (var x = 0; x < width; x++) { for (var y = 0; y < height; y++) { var position = new TilePosition(x, y); if (excludedRect.Contains(position)) { continue; } if (tileIndex == exitTileIndex) { return(position); } tileIndex++; } } return(TilePosition.Zero); }
private TilePosition GetRandomPositionIn(TileRect rect) { var x = rect.Min.Y + _random.Next() % rect.Width; var y = rect.Min.Y + _random.Next() % rect.Height; return(new TilePosition(x, y)); }
public TilePosition GenerateExitPosition(int width, int height, TilePosition entryPosition) { var minX = entryPosition.X - _minDistanceFromExitToEntry; var minY = entryPosition.Y - _minDistanceFromExitToEntry; var maxX = entryPosition.X + _minDistanceFromExitToEntry; var maxY = entryPosition.Y + _minDistanceFromExitToEntry; var entryRect = new TileRect(minX, minY, maxX, maxY); entryRect.Clamp(width, height); return(GetRandomTileExcludingRect(width, height, entryRect)); }