From b6f9a5d25acbc32a91c8888fa5c8228f7c6b6788 Mon Sep 17 00:00:00 2001 From: DCFApixels <99481254+DCFApixels@users.noreply.github.com> Date: Mon, 3 Mar 2025 15:56:04 +0800 Subject: [PATCH] update gizmos --- Runtime/Gizmos/DebugX.lines.cs | 52 ++++++++++++++++-- Runtime/Gizmos/DebugX.raycasts.cs | 89 +++++++++++++++---------------- 2 files changed, 93 insertions(+), 48 deletions(-) diff --git a/Runtime/Gizmos/DebugX.lines.cs b/Runtime/Gizmos/DebugX.lines.cs index e43fa54..a8e67d5 100644 --- a/Runtime/Gizmos/DebugX.lines.cs +++ b/Runtime/Gizmos/DebugX.lines.cs @@ -1,5 +1,7 @@ //#undef DEBUG using DCFApixels.DebugXCore; +using System; +using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering; @@ -10,6 +12,41 @@ namespace DCFApixels { public readonly partial struct DrawHandler { + #region Lines + public DrawHandler Lines(ReadOnlySpan lines) + { + for (int i = 0, iMax = lines.Length & ~1; i < iMax;) + { + Line(lines[i++], lines[i++]); + } + return this; + } + public DrawHandler LinesStrip(ReadOnlySpan lines) + { + for (int i = 0, iMax = lines.Length; i < iMax;) + { + Line(lines[i], lines[i++]); + } + return this; + } + public DrawHandler Lines(List lines) + { + for (int i = 0, iMax = lines.Count & ~1; i < iMax;) + { + Line(lines[i++], lines[i++]); + } + return this; + } + public DrawHandler LinesStrip(List lines) + { + for (int i = 0, iMax = lines.Count; i < iMax;) + { + Line(lines[i], lines[i++]); + } + return this; + } + #endregion + //TODO часть функционала рейкастс перенести сюда, типа рисование линий примитивами #region LineFade [IN(LINE)] @@ -107,18 +144,21 @@ namespace DCFApixels #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(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(Vector3 origin, Quaternion rotation) => Ray(origin, rotation * Vector3.forward); + [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(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(Ray ray) => RayArrow(ray.origin, ray.direction); [IN(LINE)] public DrawHandler RayArrow(Vector3 origin, Vector3 direction) => LineArrow(origin, origin + direction); @@ -126,8 +166,14 @@ namespace DCFApixels #region Ray custom [IN(LINE)] - public DrawHandler Ray(Vector3 start, Vector3 direction, DebugXLine endType) => Line(start, start + direction, DebugXLine.Default, endType); - public DrawHandler Ray(Vector3 start, Vector3 direction, DebugXLine startType, DebugXLine endType) => Line(start, start + direction, startType, endType); + public DrawHandler Ray(Transform origin, Vector3 localVector, DebugXLine endType) => Ray(origin.position, origin.rotation * localVector, endType); + public DrawHandler Ray(Vector3 origin, Quaternion rotation, DebugXLine endType) => Ray(origin, rotation * Vector3.forward, endType); + public DrawHandler Ray(Ray ray, DebugXLine endType) => Ray(ray.origin, ray.direction, endType); + public DrawHandler Ray(Vector3 origin, Vector3 direction, DebugXLine endType) => Line(origin, origin + direction, DebugXLine.Default, endType); + public DrawHandler Ray(Transform origin, Vector3 localVector, DebugXLine startType, DebugXLine endType) => Ray(origin.position, origin.rotation * localVector, startType, endType); + public DrawHandler Ray(Vector3 origin, Quaternion rotation, DebugXLine startType, DebugXLine endType) => Ray(origin, rotation * Vector3.forward, startType, endType); + public DrawHandler Ray(Ray ray, DebugXLine startType, DebugXLine endType) => Ray(ray.origin, ray.direction, startType, endType); + public DrawHandler Ray(Vector3 origin, Vector3 direction, DebugXLine startType, DebugXLine endType) => Line(origin, origin + direction, startType, endType); #endregion diff --git a/Runtime/Gizmos/DebugX.raycasts.cs b/Runtime/Gizmos/DebugX.raycasts.cs index 59c2724..ebb185f 100644 --- a/Runtime/Gizmos/DebugX.raycasts.cs +++ b/Runtime/Gizmos/DebugX.raycasts.cs @@ -11,6 +11,30 @@ namespace DCFApixels private const float ShadowAlphaMultiplier = 0.3f; public readonly partial struct DrawHandler { + #region RaycastHit + [IN(LINE)] + public DrawHandler RaycastHit(RaycastHit hit) + { + if (hit.collider != null) + { + DotDiamond(hit.point); + RayArrow(hit.point, hit.normal); + } + return this; + } + [IN(LINE)] + public DrawHandler RaycastHit(RaycastHit2D hit) + { + if (hit.collider != null) + { + DotDiamond(hit.point); + RayArrow(hit.point, hit.normal); + } + return this; + } + #endregion + + #region Raycast [IN(LINE)] public DrawHandler Raycast(Ray ray, RaycastHit hit) => Raycast(ray.origin, ray.direction, hit); [IN(LINE)] @@ -23,9 +47,7 @@ namespace DCFApixels else { Line(origin, origin + direction * hit.distance); - - DotDiamond(hit.point); - RayArrow(hit.point, hit.normal); + RaycastHit(hit); } return this; } @@ -46,12 +68,10 @@ namespace DCFApixels Vector3 end = origin + direction * hit.distance; WidthOutLine(origin, end, radius * 2f); - - DotDiamond(hit.point); - WireSphere(end, radius); - RayArrow(hit.point, hit.normal); - Setup(Color.SetAlpha(ShadowAlphaMultiplier)).Line(origin, end); + WireSphere(end, radius); + + RaycastHit(hit); } return this; } @@ -72,13 +92,10 @@ namespace DCFApixels Vector3 end = origin + direction * hit.distance; WidthOutLine(origin, end, size.x * 2f); - - DotDiamond(hit.point); - WireCube(end, rotation, size * 2f); - RayArrow(hit.point, hit.normal); - - Setup(Color.SetAlpha(ShadowAlphaMultiplier)).Line(origin, end); + WireCube(end, rotation, size * 2f); + + RaycastHit(hit); } return this; } @@ -113,13 +130,10 @@ namespace DCFApixels Vector3 end = origin + direction * hit.distance; WidthOutLine(origin, end, radius * 2f); - - DotDiamond(hit.point); - WireCapsule(end, rotation, radius, height); - RayArrow(hit.point, hit.normal); - - Setup(Color.SetAlpha(ShadowAlphaMultiplier)).Line(origin, end); + WireCapsule(end, rotation, radius, height); + + RaycastHit(hit); } return this; } @@ -139,8 +153,7 @@ namespace DCFApixels { Line(origin, origin + (Vector3)direction * hit.distance); - DotDiamond(new Vector3(hit.point.x, hit.point.y, origin.z)); - RayArrow(new Vector3(hit.point.x, hit.point.y, origin.z), hit.normal); + RaycastHit(hit); } return this; } @@ -161,14 +174,10 @@ namespace DCFApixels { Vector3 end = origin + (Vector3)direction * hit.distance; - //WidthOutLine(origin, end, radius * 2f); - - DotDiamond(new Vector3(hit.point.x, hit.point.y, origin.z)); - WireCircle(end, Normal2D, radius); - RayArrow(new Vector3(hit.point.x, hit.point.y, origin.z), hit.normal); - - //Setup(Color.SetAlpha(ShadowAlphaMultiplier)). Line(origin, end); + WireCircle(end, Normal2D, radius); + + RaycastHit(hit); } return this; } @@ -190,15 +199,10 @@ namespace DCFApixels { Vector3 end = origin + (Vector3)direction * hit.distance; - //WidthOutLine(origin, end, size.x * 2f); - - DotDiamond(new Vector3(hit.point.x, hit.point.y, origin.z)); - WireQuad(end, rotation, size * 2f); - RayArrow(new Vector3(hit.point.x, hit.point.y, origin.z), hit.normal); - - - //Setup(Color.SetAlpha(ShadowAlphaMultiplier)). Line(origin, end); + WireQuad(end, rotation, size * 2f); + + RaycastHit(hit); } return this; } @@ -221,15 +225,10 @@ namespace DCFApixels { Vector3 end = origin + (Vector3)direction * hit.distance; - //WidthOutLine(origin, end, radius * 2f); - - DotDiamond(new Vector3(hit.point.x, hit.point.y, origin.z)); - WireFlatCapsule(end, rotation, radius, height); - RayArrow(new Vector3(hit.point.x, hit.point.y, origin.z), hit.normal); - - - //Setup(Color.SetAlpha(ShadowAlphaMultiplier)). Line(origin, end); + WireFlatCapsule(end, rotation, radius, height); + + RaycastHit(hit); } return this; }