using System.Collections; using UnityEngine; namespace Game { public abstract partial class Util { public static void Draw(Vector3 start, Vector3 end, Color color, float duration = 0) { if (!GameSetting.IsDebugDraw) { return; } Debug.DrawLine(start, end, color, duration); } public static void DrawShape(Shape shape, Vector3 posReal, Vector3 direction, Color color) { var posRealTop = posReal + Vector3.up * shape.Height; var posRealMid = posReal + Vector3.up * (shape.Height / 2); switch (shape.Type) { case EShapeType.Dot: DrawShapeCross(posReal, 1, color); DrawShapeCenter(posReal, 1, color); break; case EShapeType.Box: DrawShapeBody(shape, posReal, direction, color); break; case EShapeType.Sector: DrawShapeBody(shape, posReal, direction, color); break; case EShapeType.Circle: DrawShapeBody(shape, posReal, direction, color); DrawShapeCenter(posRealMid, shape.Height / 2, color); DrawShapeCross(posReal, shape.Radius, color); DrawShapeCross(posRealTop, shape.Radius, color); break; } } private static void DrawShapeCenter(Vector3 pos, float h, Color color) { Debug.DrawLine(pos + Vector3.down * h, pos + Vector3.up * h, color); } private static void DrawShapeCross(Vector3 pos, float r, Color color) { Debug.DrawLine(pos + Vector3.left * r, pos + Vector3.right * r, color); Debug.DrawLine(pos + Vector3.back * r, pos + Vector3.forward * r, color); } private static void DrawShapeBody(Shape shape, Vector3 posReal, Vector3 direction, Color color) { var posRealTop = posReal + Vector3.up * shape.Height; shape.ForeachVerticesPair(direction, (v1, v2) => { Debug.DrawLine(posReal + v1, posReal + v2, color); Debug.DrawLine(posRealTop + v1, posRealTop + v2, color); }); shape.ForeachVertices(direction, v => { Debug.DrawLine(posReal + v, posRealTop + v, color); }); } public static void Print(params object[] values) { string text = ""; foreach (object obj in values) { text += Str(obj) + " "; } Debug.Log(text); } private static string Str(object obj) { string ret = ""; if (obj is null) { ret = $"null"; } else if (obj is string) { ret = $"\"{obj}\""; } else if (obj is IEnumerable) { ret += "List["; foreach (object subobj in (IEnumerable)obj) { ret += Str(subobj) + " "; } ret += "]"; } else { ret = obj.ToString(); } return ret; } } }