private void UpdateLocationsBlocked() { blockedLocationDirections.Clear(); if (LastNavigationBlockedPoints.Count > 0) { var Locations = LastNavigationBlockedPoints.Select(item => CurrentLocationBoundary.ComputeOutCode(item.X, item.Y)).ToList(); if (Locations.Count > 2) { //TOP if (Locations.Count(p => p.HasFlag(LocationFlags.Top)) > 2) { blockedLocationDirections.Add(LocationFlags.Top); } //BOTTOM if (Locations.Count(p => p.HasFlag(LocationFlags.Bottom)) > 2) { blockedLocationDirections.Add(LocationFlags.Bottom); } //LEFT if (Locations.Count(p => p.HasFlag(LocationFlags.Left)) > 2) { blockedLocationDirections.Add(LocationFlags.Left); } //RIGHT if (Locations.Count(p => p.HasFlag(LocationFlags.Right)) > 2) { blockedLocationDirections.Add(LocationFlags.Right); } } //CHECK CORNERS if (!blockedLocationDirections.Contains(LocationFlags.Bottom)) { if (!blockedLocationDirections.Contains(LocationFlags.Left) && Locations.Count(p => p.HasFlag(LocationFlags.BottomLeft)) > 0) { blockedLocationDirections.Add(LocationFlags.BottomLeft); } if (!blockedLocationDirections.Contains(LocationFlags.Right) && Locations.Count(p => p.HasFlag(LocationFlags.BottomRight)) > 0) { blockedLocationDirections.Add(LocationFlags.BottomRight); } } if (!blockedLocationDirections.Contains(LocationFlags.Top)) { if (!blockedLocationDirections.Contains(LocationFlags.Left) && Locations.Count(p => p.HasFlag(LocationFlags.TopLeft)) > 0) { blockedLocationDirections.Add(LocationFlags.TopLeft); } if (!blockedLocationDirections.Contains(LocationFlags.Right) && Locations.Count(p => p.HasFlag(LocationFlags.TopRight)) > 0) { blockedLocationDirections.Add(LocationFlags.TopRight); } } //Logger.DBLog.DebugFormat("Blocked Directions Count == [{0}]", blockedLocationDirections.Count.ToString()); } }
public bool CheckPointAgainstBlockedDirection(GridPoint point) { if (blockedLocationDirections.Count > 0) { LocationFlags pointFlags = CurrentLocationBoundary.ComputeOutCode(point.X, point.Y); return(blockedLocationDirections.Contains(pointFlags)); } return(false); }