public void AutoOrient() { Vector2 searchPosLeft = new Vector2(rect.X, rect.Y - rect.Height / 2); Hull hullLeft = Hull.FindHullOld(searchPosLeft, null, false); Vector2 searchPosRight = new Vector2(rect.Right, rect.Y - rect.Height / 2); Hull hullRight = Hull.FindHullOld(searchPosRight, null, false); if (hullLeft != null && hullRight != null && hullLeft != hullRight) { IsHorizontal = true; return; } Vector2 searchPosTop = new Vector2(rect.Center.X, rect.Y); Hull hullTop = Hull.FindHullOld(searchPosTop, null, false); Vector2 searchPosBottom = new Vector2(rect.Center.X, rect.Y - rect.Height); Hull hullBottom = Hull.FindHullOld(searchPosBottom, null, false); if (hullTop != null && hullBottom != null && hullTop != hullBottom) { IsHorizontal = false; return; } if ((hullLeft == null) != (hullRight == null)) { IsHorizontal = true; } else if ((hullTop == null) != (hullBottom == null)) { IsHorizontal = false; } }
private void FindHulls() { Hull[] hulls = new Hull[2]; linkedTo.Clear(); Vector2[] searchPos = new Vector2[2]; if (IsHorizontal) { searchPos[0] = new Vector2(rect.X, rect.Y - rect.Height / 2); searchPos[1] = new Vector2(rect.Right, rect.Y - rect.Height / 2); } else { searchPos[0] = new Vector2(rect.Center.X, rect.Y); searchPos[1] = new Vector2(rect.Center.X, rect.Y - rect.Height); } for (int i = 0; i < 2; i++) { hulls[i] = Hull.FindHullOld(searchPos[i], null, false); if (hulls[i] == null) { hulls[i] = Hull.FindHullOld(searchPos[i], null, false, true); } } if (hulls[0] == null && hulls[1] == null) { return; } if (hulls[0] == null && hulls[1] != null) { Hull temp = hulls[0]; hulls[0] = hulls[1]; hulls[1] = temp; } flowTargetHull = hulls[0]; for (int i = 0; i < 2; i++) { if (hulls[i] == null) { continue; } linkedTo.Add(hulls[i]); if (!hulls[i].ConnectedGaps.Contains(this)) { hulls[i].ConnectedGaps.Add(this); } } }