UnitPathComponentSystem.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. }
  25. public static async ETVoid MoveTo(this UnitPathComponent self, Vector3 target)
  26. {
  27. if ((self.Target - target).magnitude < 0.1f)
  28. {
  29. return;
  30. }
  31. self.Target = target;
  32. Unit unit = self.GetParent<Unit>();
  33. unit.Position = target;
  34. M2C_PathfindingResult m2CPathfindingResult = new M2C_PathfindingResult();
  35. m2CPathfindingResult.X = unit.Position.x;
  36. m2CPathfindingResult.Y = unit.Position.y;
  37. m2CPathfindingResult.Z = unit.Position.z;
  38. m2CPathfindingResult.Id = unit.Id;
  39. MessageHelper.Broadcast(unit, m2CPathfindingResult);
  40. }
  41. // 从index找接下来3个点,广播
  42. public static void BroadcastPath(this UnitPathComponent self, List<Vector3> path, int index, int offset)
  43. {
  44. Unit unit = self.GetParent<Unit>();
  45. Vector3 unitPos = unit.Position;
  46. M2C_PathfindingResult m2CPathfindingResult = new M2C_PathfindingResult();
  47. m2CPathfindingResult.X = unitPos.x;
  48. m2CPathfindingResult.Y = unitPos.y;
  49. m2CPathfindingResult.Z = unitPos.z;
  50. m2CPathfindingResult.Id = unit.Id;
  51. MessageHelper.Broadcast(unit, m2CPathfindingResult);
  52. }
  53. }
  54. }