AOIHelper.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. using System.Collections.Generic;
  2. namespace ET.Server
  3. {
  4. [FriendOf(typeof(AOIEntity))]
  5. public static class AOIHelper
  6. {
  7. public static long CreateCellId(int x, int y)
  8. {
  9. return (long) ((ulong) x << 32) | (uint) y;
  10. }
  11. public static void CalcEnterAndLeaveCell(AOIEntity aoiEntity, int cellX, int cellY, HashSet<long> enterCell, HashSet<long> leaveCell)
  12. {
  13. enterCell.Clear();
  14. leaveCell.Clear();
  15. int r = (aoiEntity.ViewDistance - 1) / AOIManagerComponent.CellSize + 1;
  16. int leaveR = r;
  17. if (aoiEntity.Unit.Type == UnitType.Player)
  18. {
  19. leaveR += 1;
  20. }
  21. for (int i = cellX - leaveR; i <= cellX + leaveR; ++i)
  22. {
  23. for (int j = cellY - leaveR; j <= cellY + leaveR; ++j)
  24. {
  25. long cellId = CreateCellId(i, j);
  26. leaveCell.Add(cellId);
  27. if (i > cellX + r || i < cellX - r || j > cellY + r || j < cellY - r)
  28. {
  29. continue;
  30. }
  31. enterCell.Add(cellId);
  32. }
  33. }
  34. }
  35. }
  36. }