diff --git a/Runtime/Gizmos/DebugX.lines.cs b/Runtime/Gizmos/DebugX.lines.cs index 78d835e..9783c0b 100644 --- a/Runtime/Gizmos/DebugX.lines.cs +++ b/Runtime/Gizmos/DebugX.lines.cs @@ -1,4 +1,5 @@ using DCFApixels.DebugXCore; +using DCFApixels.DebugXCore.Internal; using System; using System.Collections.Generic; using UnityEngine; @@ -263,24 +264,65 @@ namespace DCFApixels } #endregion + #region Line primitives + [IN(LINE)] + public DrawHandler LineWireBox(Vector3 start, Vector3 end, Quaternion rotation, Vector3 size) + { + size *= 2f; + WidthOutLine(start, end, size.x); + WireCube(start, rotation, size); + WireCube(end, rotation, size); + Setup(Color.SetAlpha(ShadowAlphaMultiplier)).Line(start, end); + return this; + } + [IN(LINE)] + public DrawHandler LineWireSphere(Vector3 start, Vector3 end, float radius) + { + WidthOutLine(start, end, radius * 2f); + WireSphere(start, radius); + WireSphere(end, radius); + Setup(Color.SetAlpha(ShadowAlphaMultiplier)).Line(start, end); + return this; + } + [IN(LINE)] + public DrawHandler LineWireCapsule(Vector3 startPoint1, Vector3 startPoint2, Vector3 end, float radius) => LineWireCapsule_Internal(startPoint1, startPoint1, (startPoint1 + startPoint2) * 0.5f, end, radius); + [IN(LINE)] + private DrawHandler LineWireCapsule_Internal(Vector3 startPoint1, Vector3 startPoint2, Vector3 startCenter, Vector3 end, float radius) + { + Quaternion rotation = Quaternion.LookRotation(startPoint2 - startPoint1, Vector3.up); + rotation = rotation * Quaternion.Euler(90, 0, 0); + LineWireCapsule(startCenter, end, rotation, radius, Vector3.Distance(startPoint1, startPoint2) + radius * 2f); + return this; + } + [IN(LINE)] + public DrawHandler LineWireCapsule(Vector3 start, Vector3 end, Quaternion rotation, float radius, float height) + { + WidthOutLine(start, end, radius * 2f); + WireCapsule(start, rotation, radius, height); + WireCapsule(end, rotation, radius, height); + Setup(Color.SetAlpha(ShadowAlphaMultiplier)).Line(start, end); + return this; + } + #endregion + #region Ray - [IN(LINE)] public DrawHandler Ray(Transform origin, Vector3 localVector) => Ray(origin.position, origin.rotation * localVector); - [IN(LINE)] public DrawHandler Ray(Vector3 origin, Quaternion rotation) => Ray(origin, rotation * Vector3.forward); + [IN(LINE)] public DrawHandler Ray(Transform transform, Vector3 localVector) => Ray(transform.position, transform.rotation * localVector); + [IN(LINE)] public DrawHandler Ray(Vector3 origin, Quaternion direction) => Ray(origin, direction * Vector3.forward); [IN(LINE)] public DrawHandler Ray(Ray ray) => Ray(ray.origin, ray.direction); [IN(LINE)] public DrawHandler Ray(Vector3 origin, Vector3 direction) => Line(origin, origin + direction); #endregion #region RayFade - [IN(LINE)] public DrawHandler RayFade(Transform origin, Vector3 localVector) => RayFade(origin.position, origin.rotation * localVector); - [IN(LINE)] public DrawHandler RayFade(Vector3 origin, Quaternion rotation) => RayFade(origin, rotation * Vector3.forward); + [IN(LINE)] public DrawHandler RayFade(Transform transform, Vector3 localVector) => RayFade(transform.position, transform.rotation * localVector); + [IN(LINE)] public DrawHandler RayFade(Vector3 origin, Quaternion direction) => RayFade(origin, direction * Vector3.forward); [IN(LINE)] public DrawHandler RayFade(Ray ray) => RayFade(ray.origin, ray.direction); [IN(LINE)] public DrawHandler RayFade(Vector3 origin, Vector3 direction) => LineFade(origin, origin + direction); #endregion #region RayArrow - [IN(LINE)] public DrawHandler RayArrow(Transform origin, Vector3 localVector) => RayArrow(origin.position, origin.rotation * localVector); - [IN(LINE)] public DrawHandler RayArrow(Vector3 origin, Quaternion rotation) => RayArrow(origin, rotation * Vector3.forward); + [IN(LINE)] public DrawHandler RayArrow(Transform transform, Vector3 localVector) => RayArrow(transform.position, transform.rotation * localVector); + [IN(LINE)] public DrawHandler RayArrow(Vector3 origin, Quaternion direction) => RayArrow(origin, direction * Vector3.forward); [IN(LINE)] public DrawHandler RayArrow(Ray ray) => RayArrow(ray.origin, ray.direction); [IN(LINE)] public DrawHandler RayArrow(Vector3 origin, Vector3 direction) => LineArrow(origin, origin + direction); #endregion @@ -297,6 +339,37 @@ namespace DCFApixels public DrawHandler Ray(Vector3 origin, Vector3 direction, DebugXLine startType, DebugXLine endType) => Line(origin, origin + direction, startType, endType); #endregion + #region Ray primitives + [IN(LINE)] public DrawHandler RayWireBox(Transform transform, Vector3 localVector, Quaternion rotation, Vector3 size) => RayWireBox(transform.position, transform.rotation * localVector, transform.rotation * rotation, transform.lossyScale.Mult(size)); + [IN(LINE)] public DrawHandler RayWireBox(Vector3 origin, Quaternion direction, Quaternion rotation, Vector3 size) => RayWireBox(origin, direction * Vector3.forward, rotation, size); + [IN(LINE)] public DrawHandler RayWireBox(Ray ray, Quaternion rotation, Vector3 size) => RayWireBox(ray.origin, ray.direction, rotation, size); + [IN(LINE)] public DrawHandler RayWireBox(Vector3 origin, Vector3 direction, Quaternion rotation, Vector3 size) => LineWireBox(origin, origin + direction, rotation, size); + + [IN(LINE)] public DrawHandler RayWireSphere(Transform transform, Vector3 localVector, float radius) => RayWireSphere(transform.position, transform.rotation * localVector, radius); + [IN(LINE)] public DrawHandler RayWireSphere(Vector3 origin, Quaternion direction, float radius) => RayWireSphere(origin, direction * Vector3.forward, radius); + [IN(LINE)] public DrawHandler RayWireSphere(Ray ray, float radius) => RayWireSphere(ray.origin, ray.direction, radius); + [IN(LINE)] public DrawHandler RayWireSphere(Vector3 origin, Vector3 direction, float radius) => LineWireSphere(origin, origin + direction, radius); + + + [IN(LINE)] public DrawHandler RayWireCapsule(Vector3 startPoint1, Vector3 startPoint2, Quaternion direction, float radius) => RayWireCapsule(startPoint1, startPoint2, direction * Vector3.forward, radius); + [IN(LINE)] + public DrawHandler RayWireCapsule(Vector3 startPoint1, Vector3 startPoint2, Vector3 direction, float radius) + { + var center = (startPoint1 + startPoint2) * 0.5f; + return LineWireCapsule_Internal(startPoint1, startPoint1, center, center + direction, radius); + } + + [IN(LINE)] + public DrawHandler RayWireCapsule(Transform transform, Vector3 localVector, Quaternion rotation, float radius, float height) + { + var scale = transform.lossyScale; + return RayWireCapsule(transform.position, transform.rotation * localVector, transform.rotation * rotation, radius + scale.x, height * scale.y); + } + [IN(LINE)] public DrawHandler RayWireCapsule(Vector3 origin, Quaternion direction, Quaternion rotation, float radius, float height) => RayWireCapsule(origin, direction * Vector3.forward, rotation, radius, height); + [IN(LINE)] public DrawHandler RayWireCapsule(Ray ray, Quaternion rotation, float radius, float height) => RayWireCapsule(ray.origin, ray.direction, rotation, radius, height); + [IN(LINE)] public DrawHandler RayWireCapsule(Vector3 origin, Vector3 direction, Quaternion rotation, float radius, float height) => LineWireCapsule(origin, origin + direction, rotation, radius, height); + #endregion + #region WidthLine [IN(LINE)] public DrawHandler WidthLine(Vector3 start, Vector3 end, float width) => Gizmo(new WidthLineGizmo(start, end, width)); diff --git a/Runtime/Gizmos/DebugX.raycasts.cs b/Runtime/Gizmos/DebugX.raycasts.cs index 092da4b..f5fbc54 100644 --- a/Runtime/Gizmos/DebugX.raycasts.cs +++ b/Runtime/Gizmos/DebugX.raycasts.cs @@ -72,7 +72,8 @@ namespace DCFApixels [IN(LINE)] public DrawHandler BoxCast(Vector3 origin, Vector3 direction, Quaternion rotation, Vector3 size, RaycastHit hit) { - WireCube(origin, rotation, size * 2f); + size *= 2f; + WireCube(origin, rotation, size); if (hit.collider == null) { RayFade(origin, direction * 3f); @@ -81,9 +82,9 @@ namespace DCFApixels { Vector3 end = origin + direction * hit.distance; - WidthOutLine(origin, end, size.x * 2f); + WidthOutLine(origin, end, size.x); Setup(Color.SetAlpha(ShadowAlphaMultiplier)).Line(origin, end); - WireCube(end, rotation, size * 2f); + WireCube(end, rotation, size); RaycastHit(hit); } diff --git a/Runtime/Gizmos/Text/TextGizmo.cs b/Runtime/Gizmos/Text/TextGizmo.cs index 903e2a5..101a4fe 100644 --- a/Runtime/Gizmos/Text/TextGizmo.cs +++ b/Runtime/Gizmos/Text/TextGizmo.cs @@ -1,9 +1,9 @@ using DCFApixels.DebugXCore; using System.Runtime.CompilerServices; -using UnityEngine; -using UnityEngine.Rendering; //#if UNITY_EDITOR using UnityEditor; +using UnityEngine; +using UnityEngine.Rendering; //#endif namespace DCFApixels diff --git a/Runtime/Internal/ColorExtensions.cs b/Runtime/Internal/Extensions.cs similarity index 51% rename from Runtime/Internal/ColorExtensions.cs rename to Runtime/Internal/Extensions.cs index 8373a22..5c90f8c 100644 --- a/Runtime/Internal/ColorExtensions.cs +++ b/Runtime/Internal/Extensions.cs @@ -2,7 +2,7 @@ namespace DCFApixels.DebugXCore.Internal { - internal static class ColorExtensions + internal static class Extensions { public static Color SetAlpha(this Color self, float v) { @@ -14,5 +14,18 @@ namespace DCFApixels.DebugXCore.Internal self.color.a *= self.alpha; return self.color; } + public static Vector3 Mult(this Vector3 a, Vector3 b) + { + a.x *= b.x; + a.y *= b.y; + a.z *= b.z; + return a; + } + public static Vector2 Mult(this Vector2 a, Vector2 b) + { + a.x *= b.x; + a.y *= b.y; + return a; + } } } diff --git a/Runtime/Internal/ColorExtensions.cs.meta b/Runtime/Internal/Extensions.cs.meta similarity index 100% rename from Runtime/Internal/ColorExtensions.cs.meta rename to Runtime/Internal/Extensions.cs.meta diff --git a/Samples/Scripts/DebugXSample_Other.cs b/Samples/Scripts/DebugXSample_Other.cs index fbe3d74..d4f5d7f 100644 --- a/Samples/Scripts/DebugXSample_Other.cs +++ b/Samples/Scripts/DebugXSample_Other.cs @@ -31,7 +31,7 @@ namespace DCFApixels.DebugXCore.Samples i++; DebugX.Draw(GetColor(Points[i])).BillboardCircle(Points[i].position, Points[i].localScale.x * RADIUS_M); i++; DebugX.Draw(GetColor(Points[i])).WireMesh(Points[i].position, Points[i].rotation, Points[i].localScale * RADIUS_M); i++; DebugX.Draw(GetColor(Points[i])).Text(Points[i].position, Points[i].name, DebugXTextSettings.WorldSpaceScale.SetSize(26).SetBackground(TextBackgroundColor)); - + i++; DebugX.Draw(GetColor(Points[i])).Dot(Points[i].position); i++; DebugX.Draw(GetColor(Points[i])).WireDot(Points[i].position); i++; DebugX.Draw(GetColor(Points[i])).DotQuad(Points[i].position);