private void writeCoords(systemElement elem) { if (showText && TextBox != null) { TextBox.Text += elem.x + " - " + elem.y + " Typ " + elem.type + Environment.NewLine; } }
private systemElement createDummyElement(int _circleNo, int _childOf) { systemElement newElement = new systemElement(); newElement.circleNo = _circleNo; newElement.childOf = _childOf; return(newElement); }
private systemElement createElement(int _circleNo, int _childOf) { systemElement newElement = new systemElement(); newElement.circleNo = _circleNo; newElement.childOf = _childOf; newElement.id = elementId; elementId++; systemElements.Add(newElement); return(newElement); }
public systemElement createFromDummyElement(systemElement _dummy) { systemElement newElement = new systemElement(); newElement.circleNo = _dummy.circleNo; newElement.childOf = _dummy.childOf; newElement.x = _dummy.x; newElement.y = _dummy.y; newElement.id = elementId; elementId++; systemElements.Add(newElement); return(newElement); }
public static bool GoodDistance(systemElement tempStar, systemElement tempStar2, int minDistance) { //int tempDistance = Distance2D(tempStar.x, tempStar.y, tempStar2.x, tempStar2.y); int tempDistance = Math.Max(Math.Abs(tempStar.x - tempStar2.x), Math.Abs(tempStar.y - tempStar2.y));// tempStar.y, tempStar2.x, tempStar2.y); if (tempDistance < minDistance) { return(false); } else { return(true); } }
//active version: //number of asteroid circles, planets and else is calculated before the elements are generated // 1 : 5 - 13 // 2 : 5 - 14, danach per Zufall, aber nicht zu nah an dem ersten... // 3 : 5 - 15, danach per Zufall, aber nicht zu nah an dem ersten... //check if a circle and the next two circles are not asteroidic // private void createPlanetCircle(int _circleNo, int type) { if (_circleNo > 10) { return; } systemElement planet = createElement(_circleNo, 0); while (true) { int angle = randomGenerator.Next(360); planet.x = (int)(centerX + (_circleNo + 2) * Math.Cos(angle)); planet.y = (int)(centerX + (_circleNo + 2) * Math.Sin(angle)); neighbouringStars.Clear(); neighbouringStars.Add(systemElements[planet.id - 1]); if (planet.id > 1) { neighbouringStars.Add(systemElements[planet.id - 2]); } //if (planet.id > 3) neighbouringStars.Add(systemElements[planet.id - 3]); //if (planet.id > 6) neighbouringStars.Add(systemElements[planet.id - 3]); if (systemElements.Any(e => e.id != planet.id && e.x == planet.x && e.y == planet.y)) { continue; } if (planet.checkAgainstNeighbours(neighbouringStars, _circleNo)) { break; } } planet.type = type; writeCoords(planet); if (planet.type != 32) { PlanetsCount++; //Gas giants are not counted } if (planet.type == 25 || planet.type == 26 || planet.type == 24) { HabitablePlanetsCount++; } }
private void createAsteroidCircle(int _circleNo, asteroidCircleTypes _type) { int degrees = 0; double angle = Math.PI * degrees / 180.0; int x_last = 0; int y_last = 0; asteroidTypes lastType = 0; while (degrees < 360) { angle = Math.PI * degrees / 180.0; int x_new = (int)(centerX + (_circleNo + 2) * Math.Cos(angle)); int y_new = (int)(centerX + (_circleNo + 2) * Math.Sin(angle)); if (x_new != x_last || y_new != y_last) { x_last = x_new; y_last = y_new; lastType = typeDetector.getAsteroidType(lastType, _type); if (lastType != asteroidTypes.None) { if (!systemElements.Any(e => e.x == x_new && e.y == y_new)) { systemElement asteroid = createElement(_circleNo, 0); asteroid.x = x_new; asteroid.y = y_new; asteroid.type = typeDetector.asteroidObjectId(lastType); if (x_last == centerX || y_last == centerX) { writeCoords(asteroid); } } } } degrees += 3; } }
private void createSun(sunTypes _type) { systemElement sun = createElement(-1, -1); sun.x = centerX - 1; //11, since coords go from 0->23, and the sun is not a point but two whole coords (11-13) sun.y = centerX - 1; sun.size = 2; switch (_type) { case sunTypes.WhiteGiant: sun.type = 45; break; case sunTypes.YellowGiant: sun.type = 45; break; case sunTypes.OrangeGiant: sun.type = 45; break; case sunTypes.RedGiant: sun.type = 50; break; case sunTypes.MSWhite: sun.type = 45; break; case sunTypes.MSBlue: sun.type = 45; break; case sunTypes.MSYellow: sun.type = 59; break; case sunTypes.MSOrange: sun.type = 55; break; case sunTypes.MSRed: sun.type = 50; break; case sunTypes.WhiteDwarfStar: sun.type = 45; break; default: sun.type = 55; break; } //sun.type = (randomGenerator.Next(0, 3) * 10) + 45; //45 Blauer Riese //50 Roter Riese //55 Oranger Riese writeCoords(sun); }
private void createMoons() { for (int i = 0; i < systemElements.Count; i++) { if (systemElements[i].circleNo < 2) { continue; //innermost circle has no moons } if (systemElements[i].type == 10 || systemElements[i].type == 11) { continue; //no asteroid has moons } if (systemElements[i].childOf > 0) { continue; //moons themselves do not have moons } int numberOfMoons = randomGenerator.Next(0, 3); //up to two moons int firstMoonX = -10; int firstMoonY = -10; for (int j = 0; j < numberOfMoons; j++) { int newX = systemElements[i].x; int newY = systemElements[i].y; systemElement dummymoon = createDummyElement(systemElements[i].circleNo, systemElements[i].id); bool skip = false; int retryCount = 0; while (true) { retryCount++; if (retryCount == 100) { skip = true; break; } newX = randomGenerator.Next(-1, 2) + systemElements[i].x; newY = randomGenerator.Next(-1, 2) + systemElements[i].y; if (newX == systemElements[i].x && newY == systemElements[i].y) { continue; //moon has to be on a diefferent position than its planet } if (newX == firstMoonX && newY == firstMoonY) { continue; //moon has to be on a diefferent position than its sibling-moon (values are set by the first moon } //todo: check that moon is not on same field as asteroid... systemElement coordCheck = findSystemElementsWithCoords(newX, newY); if (coordCheck != null) { continue; } dummymoon.x = newX; dummymoon.y = newY; neighbouringStars.Clear(); for (int z = 0; z < systemElements.Count; z++) { if (systemElements[z].type == 10 || systemElements[z].type == 11 || // no asteroids to check systemElements[z].id == systemElements[i].id || //not the own motherplanet to check systemElements[z].childOf == systemElements[i].id) //not the sibling to check { continue; } neighbouringStars.Add(systemElements[z]); } if (dummymoon.checkAgainstNeighbours(neighbouringStars, 2)) { break; } } if (skip) { continue; } systemElement moon = createFromDummyElement(dummymoon); firstMoonX = moon.x; firstMoonY = moon.y; moon.type = typeDetector.getMoonType(systemElements[i].circleNo); writeCoords(moon); } } }