UnitPathComponentSystem.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using System.Collections.Generic;
  2. using UnityEngine;
  3. namespace ET
  4. {
  5. public static class UnitPathComponentHelper
  6. {
  7. public static async ETTask MoveAsync(this UnitPathComponent self, List<Vector3> path)
  8. {
  9. if (path.Count == 0)
  10. {
  11. return;
  12. }
  13. // 第一个点是unit的当前位置,所以不用发送
  14. for (int i = 1; i < path.Count; ++i)
  15. {
  16. // 每移动3个点发送下3个点给客户端
  17. if (i % 3 == 1)
  18. {
  19. self.BroadcastPath(path, i, 3);
  20. }
  21. Vector3 v3 = path[i];
  22. //await self.Parent.GetComponent<MoveComponent>().MoveToAsync(v3, self.CancellationToken);
  23. }
  24. await ETTask.CompletedTask;
  25. }
  26. public static async ETVoid MoveTo(this UnitPathComponent self, Vector3 target)
  27. {
  28. if ((self.Target - target).magnitude < 0.1f)
  29. {
  30. return;
  31. }
  32. self.Target = target;
  33. Unit unit = self.GetParent<Unit>();
  34. unit.Position = target;
  35. M2C_PathfindingResult m2CPathfindingResult = new M2C_PathfindingResult();
  36. m2CPathfindingResult.X = unit.Position.x;
  37. m2CPathfindingResult.Y = unit.Position.y;
  38. m2CPathfindingResult.Z = unit.Position.z;
  39. m2CPathfindingResult.Id = unit.Id;
  40. MessageHelper.Broadcast(unit, m2CPathfindingResult);
  41. await ETTask.CompletedTask;
  42. }
  43. // 从index找接下来3个点,广播
  44. public static void BroadcastPath(this UnitPathComponent self, List<Vector3> path, int index, int offset)
  45. {
  46. Unit unit = self.GetParent<Unit>();
  47. Vector3 unitPos = unit.Position;
  48. M2C_PathfindingResult m2CPathfindingResult = new M2C_PathfindingResult();
  49. m2CPathfindingResult.X = unitPos.x;
  50. m2CPathfindingResult.Y = unitPos.y;
  51. m2CPathfindingResult.Z = unitPos.z;
  52. m2CPathfindingResult.Id = unit.Id;
  53. MessageHelper.Broadcast(unit, m2CPathfindingResult);
  54. }
  55. }
  56. }