AOIHelper.cs 1.2 KB

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