/// <summary> /// Finds the nearest tile to a location without an item or a resource on it. /// Returns null if all tiles have an item or a resource in the entire map. /// Will not ever return the starting point specified. /// Ensures that there is a walkable path for the creature to get there from the specific map location to the returned location. /// </summary> /// <param name="mapLocation"></param> /// <param name="dimension"></param> /// <returns></returns> public static Point2D FindItemEmptyTile(Point2D mapLocation, int dimension) { List <Point2D> tilesChecking = WorldUtil.GetNeighboringTiles(mapLocation, dimension); while (tilesChecking.Count > 0) { Point2D currentlyChecking = tilesChecking[0]; Tile tile = World.Data.World.GetTile(dimension, currentlyChecking.X, currentlyChecking.Y); if (tile.Item == null && tile.Resources == null && MainPathFinder.IsRoutePossible(dimension, mapLocation, currentlyChecking)) { //Found one! return(currentlyChecking); } //Add all neighbors of the tile since it wasn't free from items and resources. tilesChecking.AddRange(WorldUtil.GetNeighboringTiles(currentlyChecking, dimension)); tilesChecking.RemoveAt(0); } //Didn't find anything return(null); }
public override bool IsQualified(Living living) { Point2D mapLocation = living.GetExactComponent <ComponentSelectable>().MapLocation; return(MainPathFinder.IsRoutePossible(living.Dimension, mapLocation, this.Destination)); }