Newer
Older
DungeonShooting / DungeonShooting_Godot / src / framework / common / Utils.cs
@小李xl 小李xl on 11 Jul 2023 2 KB 搭建地图编辑器中...
  1. using System.Linq;
  2. using Godot;
  3.  
  4. /// <summary>
  5. /// 常用函数工具类
  6. /// </summary>
  7. public static class Utils
  8. {
  9. /// <summary>
  10. /// 默认随机数对象
  11. /// </summary>
  12. public static SeedRandom Random { get; }
  13. static Utils()
  14. {
  15. Random = new SeedRandom();
  16. GD.Print("随机种子为: ", Random.Seed);
  17. }
  18.  
  19. /// <summary>
  20. /// 根据四个点计算出矩形
  21. /// </summary>
  22. public static Rect2 CalcRect(float start1, float end1, float start2, float end2)
  23. {
  24. return new Rect2(
  25. Mathf.Min(start1, start2), Mathf.Min(end1, end2),
  26. Mathf.Abs(start1 - start2), Mathf.Abs(end1 - end2)
  27. );
  28. }
  29. /// <summary>
  30. /// 返回碰撞层 mask 是否会检测 layer
  31. /// </summary>
  32. public static bool CollisionMaskWithLayer(uint mask, uint layer)
  33. {
  34. return (mask & layer) != 0;
  35. }
  36.  
  37. /// <summary>
  38. /// 使用定的 canvasItem 绘制导航区域, 注意, 该函数只能在 draw 函数中调用
  39. /// </summary>
  40. public static void DrawNavigationPolygon(CanvasItem canvasItem, NavigationPolygonData[] polygonData, int width = 1)
  41. {
  42. for (var i = 0; i < polygonData.Length; i++)
  43. {
  44. var item = polygonData[i];
  45. if (item.Points.Count >= 2)
  46. {
  47. var array = item.ConvertPointsToVector2Array().ToList();
  48. array.Add(array[0]);
  49. if (item.Type == NavigationPolygonType.In)
  50. {
  51. canvasItem.DrawPolyline(array.ToArray(), Colors.Yellow, width);
  52. }
  53. else
  54. {
  55. canvasItem.DrawPolyline(array.ToArray(), Colors.Red, width);
  56. }
  57. }
  58. }
  59. }
  60. /// <summary>
  61. /// 将一个任意角度转为0到360度
  62. /// </summary>
  63. public static float ConvertAngle(float angle)
  64. {
  65. angle %= 360; // 取余
  66.  
  67. if (angle < 0) // 如果角度为负数,转为正数
  68. {
  69. angle += 360;
  70. }
  71.  
  72. return angle;
  73. }
  74.  
  75. /// <summary>
  76. /// 字符串首字母小写
  77. /// </summary>
  78. public static string FirstToLower(this string str)
  79. {
  80. return str.Substring(0, 1).ToLower() + str.Substring(1);
  81. }
  82. /// <summary>
  83. /// 字符串首字母大写
  84. /// </summary>
  85. public static string FirstToUpper(this string str)
  86. {
  87. return str.Substring(0, 1).ToUpper() + str.Substring(1);
  88. }
  89.  
  90. /// <summary>
  91. /// 将 Vector2 类型转为 Vector2I 类型
  92. /// </summary>
  93. public static Vector2I AsVector2I(this Vector2 vector2)
  94. {
  95. return new Vector2I((int)vector2.X, (int)vector2.Y);
  96. }
  97. }