|  |  |  | 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) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             if (!GameSetting.IsDebugDraw) | 
					
						
							|  |  |  |             { | 
					
						
							|  |  |  |                 return; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             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; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |