diff --git a/Runtime/Gizmos/DebugX.primitives.cs b/Runtime/Gizmos/DebugX.primitives.cs index f70ac70..1c98d33 100644 --- a/Runtime/Gizmos/DebugX.primitives.cs +++ b/Runtime/Gizmos/DebugX.primitives.cs @@ -12,16 +12,40 @@ namespace DCFApixels public readonly partial struct DrawHandler { #region BillboardCircle - [IN(LINE)] public DrawHandler BillboardCircle(Vector3 position, float radius) => Mesh(position, Quaternion.identity, new Vector3(radius, radius, radius)); + [IN(LINE)] + public DrawHandler BillboardCircle(Vector3 position, float radius) + { + return Mesh(position, Quaternion.identity, new Vector3(radius, radius, radius)); + } #endregion - #region Cross - [IN(LINE)] public DrawHandler Cross(Vector3 position, float size) => Mesh(position, Quaternion.identity, new Vector3(size, size, size)); + #region BillboardCross + [IN(LINE)] + [Obsolete("Use BillboardCross(position, size)")] + public DrawHandler Cross(Vector3 position, float size) + { + return Mesh(position, Quaternion.identity, new Vector3(size, size, size)); + } + [IN(LINE)] + public DrawHandler BillboardCross(Vector3 position, float size) + { + return Mesh(position, Quaternion.identity, new Vector3(size, size, size)); + } #endregion #region Sphere - [IN(LINE)] public DrawHandler Sphere(Vector3 position, float radius) => Mesh(position, Quaternion.identity, new Vector3(radius, radius, radius)); + [IN(LINE)] + public DrawHandler Sphere(Vector3 position, float radius) + where TMat : struct, IStaticMaterial + { + return Mesh(position, Quaternion.identity, new Vector3(radius, radius, radius)); + } + [IN(LINE)] + public DrawHandler Sphere(Vector3 position, float radius) + { + return Mesh(position, Quaternion.identity, new Vector3(radius, radius, radius)); + } #endregion #region WireSphere @@ -107,9 +131,30 @@ namespace DCFApixels } #endregion + #region Circle - [IN(LINE)] public DrawHandler Circle(Vector3 position, Vector3 normal, float radius) => Mesh(position, Quaternion.LookRotation(normal), new Vector3(radius, radius, radius)); - [IN(LINE)] public DrawHandler Circle(Vector3 position, Quaternion rotation, float radius) => Mesh(position, rotation, new Vector3(radius, radius, radius)); + [IN(LINE)] + public DrawHandler Circle(Vector3 position, Vector3 normal, float radius) + where TMat : struct, IStaticMaterial + { + return Mesh(position, Quaternion.LookRotation(normal), new Vector3(radius, radius, radius)); + } + [IN(LINE)] + public DrawHandler Circle(Vector3 position, Quaternion rotation, float radius) + where TMat : struct, IStaticMaterial + { + return Mesh(position, rotation, new Vector3(radius, radius, radius)); + } + [IN(LINE)] + public DrawHandler Circle(Vector3 position, Vector3 normal, float radius) + { + return Mesh(position, Quaternion.LookRotation(normal), new Vector3(radius, radius, radius)); + } + [IN(LINE)] + public DrawHandler Circle(Vector3 position, Quaternion rotation, float radius) + { + return Mesh(position, rotation, new Vector3(radius, radius, radius)); + } #endregion #region WireCircle @@ -120,10 +165,15 @@ namespace DCFApixels #region Cylinder [IN(LINE)] + public DrawHandler Cylinder(Vector3 position, Quaternion rotation, float radius, float height) + where TMat : struct, IStaticMaterial + { + return Mesh(position, rotation * Quaternion.Euler(-90, 0, 0), new Vector3(radius * 2f, radius * 2f, height)); + } + [IN(LINE)] public DrawHandler Cylinder(Vector3 position, Quaternion rotation, float radius, float height) { - Mesh(position, rotation * Quaternion.Euler(-90, 0, 0), new Vector3(radius * 2f, radius * 2f, height)); - return this; + return Mesh(position, rotation * Quaternion.Euler(-90, 0, 0), new Vector3(radius * 2f, radius * 2f, height)); } #endregion @@ -169,12 +219,18 @@ namespace DCFApixels } #endregion + #region Cone [IN(LINE)] + public DrawHandler Cone(Vector3 position, Quaternion rotation, float radius, float height) + where TMat : struct, IStaticMaterial + { + return Mesh(position, rotation * Quaternion.Euler(-90, 0, 0), new Vector3(radius * 2f, radius * 2f, height)); + } + [IN(LINE)] public DrawHandler Cone(Vector3 position, Quaternion rotation, float radius, float height) { - Mesh(position, rotation * Quaternion.Euler(-90, 0, 0), new Vector3(radius * 2f, radius * 2f, height)); - return this; + return Mesh(position, rotation * Quaternion.Euler(-90, 0, 0), new Vector3(radius * 2f, radius * 2f, height)); } #endregion @@ -215,12 +271,18 @@ namespace DCFApixels } #endregion + #region Triangle [IN(LINE)] + public DrawHandler Triangle(Vector3 position, Quaternion rotation, Vector2 size) + where TMat : struct, IStaticMaterial + { + return Mesh(position, rotation, new Vector3(size.x, size.y, 1f)); + } + [IN(LINE)] public DrawHandler Triangle(Vector3 position, Quaternion rotation, Vector2 size) { - Mesh(position, rotation, new Vector3(size.x, size.y, 1f)); - return this; + return Mesh(position, rotation, new Vector3(size.x, size.y, 1f)); } #endregion @@ -236,7 +298,8 @@ namespace DCFApixels #region Capsule [IN(LINE)] - public DrawHandler Capsule(Vector3 position, Quaternion rotation, float radius, float height) + public DrawHandler Capsule(Vector3 position, Quaternion rotation, float radius, float height) + where TMat : struct, IStaticMaterial { radius = Mathf.Max(0, radius); height -= radius * 2f; @@ -244,11 +307,16 @@ namespace DCFApixels var halfHeigth = height * 0.5f; var normal = rotation * Vector3.up; - Mesh(position + normal * halfHeigth, rotation, new Vector3(radius, radius, radius)); - Mesh(position, rotation, new Vector3(radius, height, radius)); - Mesh(position - normal * halfHeigth, rotation * Quaternion.Euler(0, 0, 180), new Vector3(radius, radius, radius)); + Mesh(position + normal * halfHeigth, rotation, new Vector3(radius, radius, radius)); + Mesh(position, rotation, new Vector3(radius, height, radius)); + Mesh(position - normal * halfHeigth, rotation * Quaternion.Euler(0, 0, 180), new Vector3(radius, radius, radius)); return this; } + [IN(LINE)] + public DrawHandler Capsule(Vector3 position, Quaternion rotation, float radius, float height) + { + return Capsule(position, rotation, radius, height); + } #endregion #region WireCapsule @@ -280,9 +348,11 @@ namespace DCFApixels } #endregion + #region FlatCapsule [IN(LINE)] - public DrawHandler FlatCapsule(Vector3 position, Quaternion rotation, float radius, float height) + public DrawHandler FlatCapsule(Vector3 position, Quaternion rotation, float radius, float height) + where TMat : struct, IStaticMaterial { radius = Mathf.Max(0, radius); height -= radius * 2f; @@ -290,11 +360,16 @@ namespace DCFApixels var halfHeigth = height * 0.5f; var normal = rotation * Vector3.up; - Mesh(position + normal * halfHeigth, rotation, new Vector3(radius, radius, radius)); - Mesh(position, rotation, new Vector3(radius, height, radius)); - Mesh(position - normal * halfHeigth, rotation * Quaternion.Euler(0, 0, 180), new Vector3(radius, radius, radius)); + Mesh(position + normal * halfHeigth, rotation, new Vector3(radius, radius, radius)); + Mesh(position, rotation, new Vector3(radius, height, radius)); + Mesh(position - normal * halfHeigth, rotation * Quaternion.Euler(0, 0, 180), new Vector3(radius, radius, radius)); return this; } + [IN(LINE)] + public DrawHandler FlatCapsule(Vector3 position, Quaternion rotation, float radius, float height) + { + return FlatCapsule(position, rotation, radius, height); + } #endregion #region WireFlatCapsule @@ -336,8 +411,28 @@ namespace DCFApixels #region Cube //[IN(LINE)] public void Cube(Vector3 position, float size) => Cube(position, Quaternion.identity, new Vector3(size, size, size)); //[IN(LINE)] public void Cube(Vector3 position, Vector3 size) => Cube(position, Quaternion.identity, size); - [IN(LINE)] public DrawHandler Cube(Vector3 position, Quaternion rotation, float size) => Mesh(position, rotation, new Vector3(size, size, size)); - [IN(LINE)] public DrawHandler Cube(Vector3 position, Quaternion rotation, Vector3 size) => Mesh(position, rotation, size); + [IN(LINE)] + public DrawHandler Cube(Vector3 position, Quaternion rotation, float size) + where TMat : struct, IStaticMaterial + { + return Mesh(position, rotation, new Vector3(size, size, size)); + } + [IN(LINE)] + public DrawHandler Cube(Vector3 position, Quaternion rotation, Vector3 size) + where TMat : struct, IStaticMaterial + { + return Mesh(position, rotation, size); + } + [IN(LINE)] + public DrawHandler Cube(Vector3 position, Quaternion rotation, float size) + { + return Mesh(position, rotation, new Vector3(size, size, size)); + } + [IN(LINE)] + public DrawHandler Cube(Vector3 position, Quaternion rotation, Vector3 size) + { + return Mesh(position, rotation, size); + } #endregion #region WireCube @@ -458,11 +553,32 @@ namespace DCFApixels } #endregion + #region Quad //[IN(LINE)] public DrawHandler Quad(Vector3 position, Vector3 normal, float size) => Mesh(Meshes.Quad, position, Quaternion.LookRotation(normal), new Vector3(size, size, size)); //[IN(LINE)] public DrawHandler Quad(Vector3 position, Vector3 normal, Vector2 size) => Mesh(Meshes.Quad, position, Quaternion.LookRotation(normal), size); - [IN(LINE)] public DrawHandler Quad(Vector3 position, Quaternion rotation, float size) => Mesh(position, rotation, new Vector3(size, size, 1f)); //TODO fix quad mesh - [IN(LINE)] public DrawHandler Quad(Vector3 position, Quaternion rotation, Vector2 size) => Mesh(position, rotation, new Vector3(size.x, size.y, 1f)); //TODO fix quad mesh + [IN(LINE)] + public DrawHandler Quad(Vector3 position, Quaternion rotation, float size) + where TMat : struct, IStaticMaterial + { + return Mesh(position, rotation, new Vector3(size, size, 1f)); + } + [IN(LINE)] + public DrawHandler Quad(Vector3 position, Quaternion rotation, Vector2 size) + where TMat : struct, IStaticMaterial + { + return Mesh(position, rotation, new Vector3(size.x, size.y, 1f)); + } + [IN(LINE)] + public DrawHandler Quad(Vector3 position, Quaternion rotation, float size) + { + return Mesh(position, rotation, new Vector3(size, size, 1f)); + } + [IN(LINE)] + public DrawHandler Quad(Vector3 position, Quaternion rotation, Vector2 size) + { + return Mesh(position, rotation, new Vector3(size.x, size.y, 1f)); + } #endregion #region WireQuad