void CreateRing(float scale, int sectionsPerQuarter, bool details, Color detailColor, bool lights) { // Only draws top right quarter, the rest is mirrored List <SS_Point> DetailPoints = new List <SS_Point>(); SS_Texture tmpTexture = new SS_Texture(Size, Size, Color.clear); int innerRadius = (int)((Size / 8) * scale); int outerRadius = (int)(((Size / 2) - 4) * scale); List <SS_Point> innerPoints = new List <SS_Point>(); List <SS_Point> outerPoints = new List <SS_Point>(); int step = 90 / sectionsPerQuarter; for (int a = 0; a <= 90; a += step) { int innerX = Sprite.Center.x + (int)(Mathf.Cos(a * Mathf.Deg2Rad) * innerRadius); int innerY = Sprite.Center.y + (int)(Mathf.Sin(a * Mathf.Deg2Rad) * innerRadius); innerPoints.Add(new SS_Point(innerX, innerY)); int outerX = Sprite.Center.x + (int)(Mathf.Cos(a * Mathf.Deg2Rad) * outerRadius); int outerY = Sprite.Center.y + (int)(Mathf.Sin(a * Mathf.Deg2Rad) * outerRadius); outerPoints.Add(new SS_Point(outerX, outerY)); if (lights) { LightPoints.Add(new SS_Point(outerX, outerY)); LightPoints.Add(new SS_Point(Size - outerX, outerY)); LightPoints.Add(new SS_Point(Size - outerX, Size - outerY)); LightPoints.Add(new SS_Point(outerX, Size - outerY)); } } // Determine centroids (detail points) for each ring section for (int i = 0; i < innerPoints.Count - 1; i++) { SS_Point[] points = new SS_Point[4]; int j = i; int j2 = i + 1; if (i == innerPoints.Count - 1) { j2 = 0; } points[0] = innerPoints[j]; points[1] = outerPoints[j]; points[2] = outerPoints[j2]; points[3] = innerPoints[j2]; SS_Point centroid = SS_Utilities.Centroid(points); if (random.NextBool()) { DetailPoints.Add(centroid); } } List <SS_Point> ringPoints = new List <SS_Point>(); for (int i = 0; i < innerPoints.Count; i++) { ringPoints.Add(innerPoints[i]); } for (int i = outerPoints.Count - 1; i >= 0; i--) { ringPoints.Add(outerPoints[i]); } SS_Drawing.PolygonFill(tmpTexture, ringPoints.ToArray(), SS_StellarSprite.OutlineColor, SS_StellarSprite.FillColor); // Add borders between sectons float colorVal = 0;// random.Range(0.25f, 1f); Color sectionBorder = new Color(colorVal, colorVal, colorVal); for (int i = 0; i < innerPoints.Count; i++) { SS_Drawing.Line(tmpTexture, innerPoints[i].x, innerPoints[i].y, outerPoints[i].x, outerPoints[i].y, sectionBorder); } if (details) { for (int i = 0; i < DetailPoints.Count; i++) { SS_Drawing.EllipseFill(tmpTexture, DetailPoints[i].x, DetailPoints[i].y, 8, 8, 12, SS_StellarSprite.OutlineColor, detailColor); } } // Texture the section Texturize(tmpTexture, SS_StellarSprite.FillColor, Color.grey, false, true); SS_StellarSprite.ShadeEdge(tmpTexture); SS_StellarSprite.Mirror(tmpTexture, SS_Mirror.TopRight); SS_Drawing.MergeColors(Sprite, tmpTexture, 0, 0); }