private void FillGalaxyWithStars(int numberOfStars, int minPlanets, int maxPlanets, bool[][] grid, Random r) { starSystems = new List<StarSystem>(); _quickLookupSystem = new Dictionary<int, StarSystem>(); StarNode starTree = new StarNode(0, 0, grid.Length - 1, grid.Length - 1); //Set area where stars can be placed (circle, random, star, etc shaped galaxy) for (int i = 0; i < grid.Length; i++) { for (int j = 0; j < grid[i].Length; j++) { if (!grid[i][j]) { starTree.RemoveNodeAtPosition(i, j); } } } int starId = 0; while (starTree.nodes.Count > 0 && numberOfStars > 0) { int x; int y; starTree.GetRandomStarPosition(r, out x, out y); //int newSize = r.Next(3) + 2; Color starColor = Color.White; string description = string.Empty; int randNum = r.Next(100); if (randNum < 30) { starColor = Color.Red; } else if (randNum < 55) { starColor = Color.Green; } else if (randNum < 70) { starColor = Color.Yellow; } else if (randNum < 85) { starColor = Color.Blue; } else if (randNum < 95) { starColor = Color.White; } else { starColor = Color.Purple; } var newStarsystem = new StarSystem(NameGenerator.GetStarName(r), starId, x * PARSEC_SIZE_IN_PIXELS + (r.Next(PARSEC_SIZE_IN_PIXELS)), y * PARSEC_SIZE_IN_PIXELS + (r.Next(PARSEC_SIZE_IN_PIXELS)), starColor, description, minPlanets, maxPlanets, r); starSystems.Add(newStarsystem); _quickLookupSystem.Add(newStarsystem.ID, newStarsystem); bool[][] invalidatedArea = Utility.CalculateDisc(2, 1); for (int i = 0; i < invalidatedArea.Length; i++) { for (int j = 0; j < invalidatedArea.Length; j++) { int xToInvalidate = (x - 2) + i; int yToInvalidate = (y - 2) + j; starTree.RemoveNodeAtPosition(xToInvalidate, yToInvalidate); } } numberOfStars--; starId++; } }
/* * private bool[][] GenerateCluster(int size) * { * //Size is actually a diameter, change to radius * return Utility.CalculateDisc(size / 2, 1); * } * * private bool[][] GenerateRing(int size) * { * //Size is actually a diameter, change to radius * bool[][] grid = Utility.CalculateDisc(size / 2, 1); * * int quarterSize = size / 4; * * bool[][] discToSubtract = Utility.CalculateDisc(quarterSize, 1); * * for (int i = 0; i < discToSubtract.Length; i++) * { * for (int j = 0; j < discToSubtract[i].Length; j++) * { * if (discToSubtract[i][j]) * { * grid[quarterSize + i][quarterSize + j] = false; * } * } * } * * return grid; * } * * private bool[][] GenerateRandom(int size) * { * bool[][] grid = new bool[size][]; * for (int i = 0; i < grid.Length; i++) * { * grid[i] = new bool[size]; * } * * for (int i = 0; i < size; i++) * { * for (int j = 0; j < size; j++) * { * grid[i][j] = true; * } * } * * return grid; * } * * private bool[][] GenerateStar(int size) * { * bool[][] grid = new bool[size][]; * for (int i = 0; i < grid.Length; i++) * { * grid[i] = new bool[size]; * } * int halfSize = size / 2; * * for (int i = 0; i < size; i++) * { * for (int j = 0; j < size; j++) * { * int x = i - halfSize; * int y = halfSize - j; * if (x < 0) * { * x *= -1; * } * if (y < 0) * { * y *= -1; * } * if ((x * x) * (y * y) <= (size * size * (halfSize / 6))) * { * grid[i][j] = true; * } * } * } * * return grid; * } * * private bool[][] GenerateDiamond(int size) * { * bool[][] grid = new bool[size][]; * for (int i = 0; i < grid.Length; i++) * { * grid[i] = new bool[size]; * } * int halfSize = size / 2; * * for (int i = 0; i < size; i++) * { * for (int j = 0; j < size; j++) * { * int x = i - halfSize; * int y = halfSize - j; * if (x < 0) * { * x *= -1; * } * if (y < 0) * { * y *= -1; * } * if (x + y <= halfSize) * { * grid[i][j] = true; * } * } * } * * return grid; * }*/ #endregion #region Galaxy Filling Functions private void FillGalaxyWithStars(int numberOfStars, int minPlanets, int maxPlanets, bool[][] grid, Random r) { starSystems = new List <StarSystem>(); _quickLookupSystem = new Dictionary <int, StarSystem>(); StarNode starTree = new StarNode(0, 0, grid.Length - 1, grid.Length - 1); //Set area where stars can be placed (circle, random, star, etc shaped galaxy) for (int i = 0; i < grid.Length; i++) { for (int j = 0; j < grid[i].Length; j++) { if (!grid[i][j]) { starTree.RemoveNodeAtPosition(i, j); } } } int starId = 0; while (starTree.nodes.Count > 0 && numberOfStars > 0) { int x; int y; starTree.GetRandomStarPosition(r, out x, out y); //int newSize = r.Next(3) + 2; Color starColor = Color.White; string description = string.Empty; int randNum = r.Next(100); if (randNum < 30) { starColor = Color.Red; } else if (randNum < 55) { starColor = Color.Green; } else if (randNum < 70) { starColor = Color.Yellow; } else if (randNum < 85) { starColor = Color.Blue; } else if (randNum < 95) { starColor = Color.White; } else { starColor = Color.Purple; } var newStarsystem = new StarSystem(NameGenerator.GetStarName(r), starId, x * PARSEC_SIZE_IN_PIXELS + (r.Next(PARSEC_SIZE_IN_PIXELS)), y * PARSEC_SIZE_IN_PIXELS + (r.Next(PARSEC_SIZE_IN_PIXELS)), starColor, description, minPlanets, maxPlanets, r); starSystems.Add(newStarsystem); _quickLookupSystem.Add(newStarsystem.ID, newStarsystem); bool[][] invalidatedArea = Utility.CalculateDisc(2, 1); for (int i = 0; i < invalidatedArea.Length; i++) { for (int j = 0; j < invalidatedArea.Length; j++) { int xToInvalidate = (x - 2) + i; int yToInvalidate = (y - 2) + j; starTree.RemoveNodeAtPosition(xToInvalidate, yToInvalidate); } } numberOfStars--; starId++; } }