Пример #1
0
        public static void AddTileToXMap(AbstractTile tile)
        {
            float xPos = tile.transform.position.x;

            // Has this X key been added before?
            if (!m_mapXtoTile.ContainsKey(xPos))
            {
                m_mapXtoTile[xPos] = new List <AbstractTile>();
            }

            m_mapXtoTile[xPos].Add(tile);
        }
Пример #2
0
        public static void AddTileToZMap(AbstractTile tile)
        {
            float zPos = tile.transform.position.z;

            // Has this Y key been added before?
            if (!m_mapZtoTile.ContainsKey(zPos))
            {
                m_mapZtoTile[zPos] = new List <AbstractTile>();
            }

            m_mapZtoTile[zPos].Add(tile);
        }
Пример #3
0
        public static void SetAllNeighbors()
        {
            foreach (var entry in m_mapXtoTile)
            {
                foreach (var tile in entry.Value)
                {
                    AbstractTile northernNeighbor = GetNeighborAtCardinalPoint(tile, AbstractTile.CardinalPoint.NORTH);
                    AbstractTile southernNeighbor = GetNeighborAtCardinalPoint(tile, AbstractTile.CardinalPoint.SOUTH);

                    if (northernNeighbor != null)
                    {
                        tile.AddNeighbor(northernNeighbor, AbstractTile.CardinalPoint.NORTH);
                        northernNeighbor.AddNeighbor(tile, AbstractTile.CardinalPoint.SOUTH);
                    }
                    if (southernNeighbor != null)
                    {
                        tile.AddNeighbor(southernNeighbor, AbstractTile.CardinalPoint.SOUTH);
                        southernNeighbor.AddNeighbor(tile, AbstractTile.CardinalPoint.NORTH);
                    }
                }
            }

            foreach (var entry in m_mapZtoTile)
            {
                foreach (var tile in entry.Value)
                {
                    AbstractTile westernNeighbor = GetNeighborAtCardinalPoint(tile, AbstractTile.CardinalPoint.WEST);
                    AbstractTile easternNeighbor = GetNeighborAtCardinalPoint(tile, AbstractTile.CardinalPoint.EAST);

                    if (westernNeighbor != null)
                    {
                        tile.AddNeighbor(westernNeighbor, AbstractTile.CardinalPoint.WEST);
                        westernNeighbor.AddNeighbor(tile, AbstractTile.CardinalPoint.EAST);
                    }
                    if (easternNeighbor)
                    {
                        tile.AddNeighbor(easternNeighbor, AbstractTile.CardinalPoint.EAST);
                        easternNeighbor.AddNeighbor(tile, AbstractTile.CardinalPoint.WEST);
                    }
                }
            }
        }
Пример #4
0
        private static AbstractTile GetNeighborAtCardinalPoint(AbstractTile tile, AbstractTile.CardinalPoint where)
        {
            Vector3 tilePos = tile.transform.position;

            float key;

            switch (where)
            {
            case AbstractTile.CardinalPoint.NORTH:
                key = tilePos.z + AbstractTile.s_TILE_SIZE;
                if (m_mapZtoTile.ContainsKey(key))
                {
                    foreach (var possibleNeighbor in m_mapZtoTile[key])
                    {
                        if (possibleNeighbor.transform.position.x == tilePos.x && possibleNeighbor.transform.position.y == tilePos.y)
                        {
                            return(possibleNeighbor);
                        }
                    }
                }
                break;

            case AbstractTile.CardinalPoint.SOUTH:
                key = tilePos.z - AbstractTile.s_TILE_SIZE;
                if (m_mapZtoTile.ContainsKey(key))
                {
                    foreach (var possibleNeighbor in m_mapZtoTile[key])
                    {
                        if (possibleNeighbor.transform.position.x == tilePos.x && possibleNeighbor.transform.position.y == tilePos.y)
                        {
                            return(possibleNeighbor);
                        }
                    }
                }
                break;

            case AbstractTile.CardinalPoint.WEST:
                key = tilePos.x - AbstractTile.s_TILE_SIZE;
                if (m_mapXtoTile.ContainsKey(key))
                {
                    foreach (var possibleNeighbor in m_mapXtoTile[key])
                    {
                        if (possibleNeighbor.transform.position.z == tilePos.z && possibleNeighbor.transform.position.y == tilePos.y)
                        {
                            return(possibleNeighbor);
                        }
                    }
                }
                break;

            case AbstractTile.CardinalPoint.EAST:
                key = tilePos.x + AbstractTile.s_TILE_SIZE;
                if (m_mapXtoTile.ContainsKey(key))
                {
                    foreach (var possibleNeighbor in m_mapXtoTile[key])
                    {
                        if (possibleNeighbor.transform.position.z == tilePos.z && possibleNeighbor.transform.position.y == tilePos.y)
                        {
                            return(possibleNeighbor);
                        }
                    }
                }
                break;
            }

            return(null);
        }
Пример #5
0
 public void AddNeighbor(AbstractTile neighbor, CardinalPoint where)
 {
     m_neighborTiles[where] = neighbor;
 }