public static bool TryTurn_Debug(Polygon myPoly, Polygon StationaryPoly, ref float amt, List <Vector2[]> lines, List <Color> linecolors) { Vector2 CircleCenter = myPoly.Position; Pair <float, bool, float>[] distances; float greatestMine = 0; float lowestOther = -1; ArrayBuilder <Pair <float, bool, float> > build = new ArrayBuilder <Pair <float, bool, float> >(myPoly.NumberOfSides() + StationaryPoly.NumberOfSides()); for (int x = 0; x < myPoly.NumberOfSides(); x++) { float next = LocationManager.getDistance(CircleCenter, myPoly.GetCorner(x)); build.Add(new Pair <float, bool, float>(next, true, LocationManager.getRotation(CircleCenter, myPoly.GetCorner(x)))); if (next > greatestMine) { greatestMine = next; } } for (int x = 0; x < StationaryPoly.NumberOfSides(); x++) { float next = LocationManager.getDistance(CircleCenter, StationaryPoly.GetCorner(x)); build.Add(new Pair <float, bool, float>(next, false, LocationManager.getRotation(CircleCenter, StationaryPoly.GetCorner(x)))); if (lowestOther == -1 || next < lowestOther) { lowestOther = next; } } distances = build.Finish(); float currentMin = amt; for (int i = 0; i < distances.Length; i++) { for (int i2 = 0; i2 < (distances[i].second ? StationaryPoly.NumberOfSides() : myPoly.NumberOfSides()); i2++) { Vector2[] line = (distances[i].second ? StationaryPoly.GetEdge(i2) : myPoly.GetEdge(i2)); float minAngle = distances[i].third; foreach (float f in LocationManager.CircleIntersects_A(line, CircleCenter, distances[i].first)) { lines.Add(new Vector2[] { Vector2.Add(new Vector2(-2, 0), LocationManager.moveByRotation(CircleCenter, distances[i].first, f)), Vector2.Add(new Vector2(2, 0), LocationManager.moveByRotation(CircleCenter, distances[i].first, f)) }); linecolors.Add(Color.Red); lines.Add(new Vector2[] { Vector2.Add(new Vector2(0, -2), LocationManager.moveByRotation(CircleCenter, distances[i].first, f)), Vector2.Add(new Vector2(0, 2), LocationManager.moveByRotation(CircleCenter, distances[i].first, f)) }); linecolors.Add(Color.Red); if (amt > 0) { if (f > minAngle && LocationManager.NormalRelitiveAngle(minAngle, f) < amt) { lines.Add(new Vector2[] { Vector2.Add(new Vector2(-8, 0), LocationManager.moveByRotation(CircleCenter, distances[i].first, f)), Vector2.Add(new Vector2(8, 0), LocationManager.moveByRotation(CircleCenter, distances[i].first, f)) }); linecolors.Add(Color.Blue); lines.Add(new Vector2[] { Vector2.Add(new Vector2(0, -8), LocationManager.moveByRotation(CircleCenter, distances[i].first, f)), Vector2.Add(new Vector2(0, 8), LocationManager.moveByRotation(CircleCenter, distances[i].first, f)) }); linecolors.Add(Color.Blue); } if (f > (minAngle) && LocationManager.NormalRelitiveAngle(minAngle, f) < currentMin) { currentMin = LocationManager.NormalRelitiveAngle(minAngle, f); } } else if (amt < 0) { if (f < minAngle && LocationManager.NormalRelitiveAngle(f, minAngle) < -amt) { lines.Add(new Vector2[] { Vector2.Add(new Vector2(-8, 0), LocationManager.moveByRotation(CircleCenter, distances[i].first, f)), Vector2.Add(new Vector2(8, 0), LocationManager.moveByRotation(CircleCenter, distances[i].first, f)) }); linecolors.Add(Color.Blue); lines.Add(new Vector2[] { Vector2.Add(new Vector2(0, -8), LocationManager.moveByRotation(CircleCenter, distances[i].first, f)), Vector2.Add(new Vector2(0, 8), LocationManager.moveByRotation(CircleCenter, distances[i].first, f)) }); linecolors.Add(Color.Blue); } if (f < minAngle && LocationManager.NormalRelitiveAngle(f, minAngle) < -currentMin) { currentMin = LocationManager.NormalRelitiveAngle(f, minAngle); } } } } } if (currentMin == amt) { myPoly.Rotation += amt; return(false); } else { myPoly.Rotation += currentMin * .9f; amt *= -.9f; return(true); } }