public List <Vector2> GetGroundPath(float startX, float startY, float endX, float endY, int frame) { var cells = MapDataService.GetCells(startX, startY, MaxDistance); var end = new Vector2(endX, endY); var best = cells.Where(c => c.Walkable && !c.PathBlocked).OrderBy(c => c.EnemyGroundDpsInRange).ThenBy(c => Vector2.DistanceSquared(end, new Vector2(c.X, c.Y))).FirstOrDefault(); if (best != null) { var grid = GetGroundGrid(frame); return(GetPath(grid, startX, startY, best.X, best.Y)); } return(new List <Vector2>()); }
public List <Vector2> GetSafeGroundPath(float startX, float startY, float endX, float endY, int frame) { var cells = MapDataService.GetCells(startX, startY, 10); var end = new Vector2(endX, endY); var best = cells.Where(c => c.Walkable).OrderBy(c => c.EnemyGroundDpsInRange).ThenBy(c => Vector2.DistanceSquared(end, new Vector2(c.X, c.Y))).FirstOrDefault(); if (best != null) { return(new List <Vector2> { new Vector2(startX, startY), new Vector2(best.X, best.Y) }); } return(new List <Vector2>()); }
public List <Vector2> GetSafeGroundPath(float startX, float startY, float endX, float endY, int frame) { var grid = GetGroundDamageGrid(frame); var path = GetPath(grid, startX, startY, endX, endY); if (path.Count() == 0) { var cells = MapDataService.GetCells(startX, startY, 1); var best = cells.Where(c => c.Walkable).OrderBy(c => c.EnemyGroundDpsInRange).FirstOrDefault(); if (best != null) { path = new List <Vector2> { new Vector2(startX, startY), new Vector2(best.X, best.Y) }; } } return(path); }