Example #1
0
        public static void DrawCapsuleCast2DHits(RaycastHit2D[] hits,
                                                 Vector2 origin,
                                                 Vector2 size,
                                                 CapsuleDirection2D capsuleDirection,
                                                 float angle,
                                                 Vector2 direction,
                                                 Color color,
                                                 int maxCount = -1)
        {
            if (maxCount < 0)
            {
                maxCount = hits.Length;
            }

            if (maxCount == 0)
            {
                return;
            }

            direction.EnsureNormalized();

            DrawCapsuleStructure2D capsuleStructure2D = new DrawCapsuleStructure2D(size, capsuleDirection, angle);

            for (int i = 0; i < maxCount; i++)
            {
                DrawCapsule2DFast(origin + direction * hits[i].distance, capsuleStructure2D, DrawLine);
            }

            void DrawLine(Vector3 a, Vector3 b, float v) => lineDelegate(a, b, color);
        }
        public static void DrawCapsule2D(Vector2 origin, Vector2 size, CapsuleDirection2D capsuleDirection, float angle, Color color, float duration = 0)
        {
            DrawCapsuleStructure2D capsuleStructure2D = new DrawCapsuleStructure2D(size, capsuleDirection, angle);

            DrawCapsule2DFast(origin, capsuleStructure2D, DrawLine);
            void DrawLine(Vector3 a, Vector3 b, float t) => lineDelegate(a, b, color, duration);
        }
        internal static void DrawCapsule2DFast(Vector2 offset, DrawCapsuleStructure2D capsuleStructure2D, LineDelegate lineDelegate)
        {
            Vector2 r1 = offset + capsuleStructure2D.VerticalOffset;
            Vector2 r2 = offset - capsuleStructure2D.VerticalOffset;

            DrawArc2D(r1, capsuleStructure2D.Left, capsuleStructure2D.Radius, 180, lineDelegate);
            DrawArc2D(r2, capsuleStructure2D.Left, capsuleStructure2D.Radius, -180, lineDelegate);
            lineDelegate(r1 + capsuleStructure2D.ScaledLeft, r2 + capsuleStructure2D.ScaledLeft, 0);
            lineDelegate(r1 + capsuleStructure2D.ScaledRight, r2 + capsuleStructure2D.ScaledRight, 0);
        }
Example #4
0
        public static void DrawCapsuleCast2D(
            Vector2 origin,
            Vector2 size,
            CapsuleDirection2D capsuleDirection,
            float angle,
            Vector2 direction,
            float distance,
            Color colorStart,
            Color colorEnd)
        {
            direction.EnsureNormalized();

            DrawCapsuleStructure2D capsuleStructure2D = new DrawCapsuleStructure2D(size, capsuleDirection, angle);

            Color color = colorStart;

            DrawCapsule2DFast(origin, capsuleStructure2D, DrawLine);

            var     scaledDirection = direction * distance;
            Vector2 destination     = origin + scaledDirection;


            float dot          = Vector2.Dot(PerpendicularClockwise(capsuleStructure2D.VerticalOffset), direction);
            float sign         = Mathf.Sign(dot);
            float scaledRadius = capsuleStructure2D.Radius * sign;

            Vector2 o1       = PerpendicularCounterClockwise(direction) * scaledRadius;
            Vector2 o2       = PerpendicularClockwise(direction) * scaledRadius;
            Vector2 originA  = origin + capsuleStructure2D.VerticalOffset + o1;
            Vector2 originB  = origin - capsuleStructure2D.VerticalOffset + o2;
            Vector2 currentA = originA;
            Vector2 currentB = originB;

            for (int i = 1; i <= 10; i++)
            {
                float t = i / (float)10;
                color = Color.Lerp(colorStart, colorEnd, t);
                Vector2 nextA = originA + scaledDirection * t;
                Vector2 nextB = originB + scaledDirection * t;

                DrawLine(currentA, nextA, t);
                DrawLine(currentB, nextB, t);

                currentA = nextA;
                currentB = nextB;
            }

            color = colorEnd;
            DrawCapsule2DFast(destination, capsuleStructure2D, DrawLine);

            void DrawLine(Vector3 a, Vector3 b, float v) => lineDelegate(a, b, color);
        }