/// <summary> /// Checks whether the tilevertex has the other tile as a registered neighbour /// </summary> /// <param name="other"></param> /// <returns>Whether they are neighbours</returns> public bool HasAdjacent(BaseTile other) { foreach (Edge e in tileVertex.adj) { if (e.destination.parentTile == other) { return(true); } } return(false); }
/// <summary> /// Gets a list of neighbours that allow an agent to walk to /// </summary> /// <param name="tile">The tile to check for</param> /// <returns>A list of walkable neighbours</returns> public List <BaseTile> GetWalkableNeighbours(BaseTile tile) { List <BaseTile> list = new List <BaseTile>(); if (tile.position.x >= BaseTile.tileWidth) { BaseTile newTile = tiles[GetIndexOfTile(tile.position + new Vector2D(-BaseTile.tileWidth, 0))]; if (newTile.isWalkable) { list.Add(newTile); } } if (tile.position.x < GameWorld.instance.gameWidth - BaseTile.tileWidth) { BaseTile newTile = tiles[GetIndexOfTile(tile.position + new Vector2D(BaseTile.tileWidth, 0))]; if (newTile.isWalkable) { list.Add(newTile); } } if (tile.position.y >= BaseTile.tileHeight) { BaseTile newTile = tiles[GetIndexOfTile(tile.position + new Vector2D(0, -BaseTile.tileHeight))]; if (newTile.isWalkable) { list.Add(newTile); } } if (tile.position.y < GameWorld.instance.gameHeight - BaseTile.tileWidth) { BaseTile newTile = tiles[GetIndexOfTile(tile.position + new Vector2D(0, BaseTile.tileHeight))]; if (newTile.isWalkable) { list.Add(newTile); } } return(list); }
/// <summary> /// Gets a list of the neighbours of the tile /// </summary> /// <param name="tile">The tile to check for</param> /// <returns>A list of neighbouring tiles</returns> public List <BaseTile> GetNeighbours(BaseTile tile) { List <BaseTile> list = new List <BaseTile>(); if (tile.position.x >= BaseTile.tileWidth) { list.Add(tiles[GetIndexOfTile(tile.position - new Vector2D(BaseTile.tileWidth, 0))]); } if (tile.position.x < GameWorld.instance.gameWidth - BaseTile.tileWidth) { list.Add(tiles[GetIndexOfTile(tile.position + new Vector2D(BaseTile.tileWidth, 0))]); } if (tile.position.y >= BaseTile.tileHeight) { list.Add(tiles[GetIndexOfTile(tile.position - new Vector2D(0, BaseTile.tileHeight))]); } if (tile.position.y < GameWorld.instance.gameHeight - BaseTile.tileWidth) { list.Add(tiles[GetIndexOfTile(tile.position + new Vector2D(0, BaseTile.tileHeight))]); } return(list); }
public List <BaseTile> GetWalkableDiagonalNeighbours(BaseTile tile) { List <BaseTile> list = new List <BaseTile>(); bool up = false, down = false, left = false, right = false; if (tile.position.x >= BaseTile.tileWidth) { left = true; } if (tile.position.x < GameWorld.instance.gameWidth - BaseTile.tileWidth) { right = true; } if (tile.position.y >= BaseTile.tileHeight) { up = true; } if (tile.position.y < GameWorld.instance.gameHeight - BaseTile.tileWidth) { down = true; } if (up) { BaseTile newTile; if (left) { newTile = tiles[GetIndexOfTile(tile.position + new Vector2D(-BaseTile.tileWidth, -BaseTile.tileHeight))]; if (newTile.isWalkable) { list.Add(tiles[GetIndexOfTile(tile.position + new Vector2D(-BaseTile.tileWidth, -BaseTile.tileHeight))]); } } if (right) { newTile = tiles[GetIndexOfTile(tile.position + new Vector2D(BaseTile.tileWidth, -BaseTile.tileHeight))]; if (newTile.isWalkable) { list.Add(tiles[GetIndexOfTile(tile.position + new Vector2D(BaseTile.tileWidth, -BaseTile.tileHeight))]); } } } if (down) { BaseTile newTile; if (left) { newTile = tiles[GetIndexOfTile(tile.position + new Vector2D(-BaseTile.tileWidth, BaseTile.tileHeight))]; if (newTile.isWalkable) { list.Add(tiles[GetIndexOfTile(tile.position + new Vector2D(-BaseTile.tileWidth, BaseTile.tileHeight))]); } } if (right) { newTile = tiles[GetIndexOfTile(tile.position + new Vector2D(BaseTile.tileWidth, BaseTile.tileHeight))]; if (newTile.isWalkable) { list.Add(tiles[GetIndexOfTile(tile.position + new Vector2D(BaseTile.tileWidth, BaseTile.tileHeight))]); } } } return(list); }