コード例 #1
0
        //Resolve relevant tangency
        public static void ResolveTangents(Vector2 from, Vector2 to, float rigidMlt, PlanarDirection direction, out Vector2 fromTangent, out Vector2 toTangent)
        {
            var fromRect = new Rect(0, 0, 1, 1);
            var toRect   = new Rect(0, 0, 1, 1);

            fromRect.center = from;
            toRect.center   = to;
            ResolveTangents(from, to, fromRect, toRect, rigidMlt, direction, out fromTangent, out toTangent);
        }
コード例 #2
0
        //Resolve relevant tangency
        public static void ResolveTangents(Vector2 from, Vector2 to, Rect fromRect, Rect toRect, float rigidMlt, PlanarDirection direction, out Vector2 fromTangent, out Vector2 toTangent)
        {
            var tangentX = Mathf.Abs(from.x - to.x) * rigidMlt;

            tangentX = Mathf.Max(tangentX, 25);

            var tangentY = Mathf.Abs(from.y - to.y) * rigidMlt;

            tangentY = Mathf.Max(tangentY, 25);

            switch (direction)
            {
            case (PlanarDirection.Horizontal):
            {
                fromTangent = new Vector2(tangentX, 0);
                toTangent   = new Vector2(-tangentX, 0);
            }
                return;

            case (PlanarDirection.Vertical):
            {
                fromTangent = new Vector2(0, tangentY);
                toTangent   = new Vector2(0, -tangentY);
            }
                return;

            case (PlanarDirection.Auto):
            {
                var resultFrom = default(Vector2);
                if (from.x <= fromRect.xMin)
                {
                    resultFrom = new Vector2(-tangentX, 0);
                }

                if (from.x >= fromRect.xMax)
                {
                    resultFrom = new Vector2(tangentX, 0);
                }

                if (from.y <= fromRect.yMin)
                {
                    resultFrom = new Vector2(0, -tangentY);
                }

                if (from.y >= fromRect.yMax)
                {
                    resultFrom = new Vector2(0, tangentY);
                }

                var resultTo = default(Vector2);
                if (to.x <= toRect.xMin)
                {
                    resultTo = new Vector2(-tangentX, 0);
                }

                if (to.x >= toRect.xMax)
                {
                    resultTo = new Vector2(tangentX, 0);
                }

                if (to.y <= toRect.yMin)
                {
                    resultTo = new Vector2(0, -tangentY);
                }

                if (to.y >= toRect.yMax)
                {
                    resultTo = new Vector2(0, tangentY);
                }

                fromTangent = resultFrom;
                toTangent   = resultTo;
            }
                return;
            }

            fromTangent = default(Vector2);
            toTangent   = default(Vector2);
        }