Beispiel #1
0
        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;
            }
        }
Beispiel #2
0
        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);
                }
            }
        }