Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        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);
        }