Ejemplo n.º 1
0
        private void CreateCornerIndex()
        {
            Vector3IntEqualityComparer vector3IntEqualityComparer = new Vector3IntEqualityComparer();

            CornerIndexByPosition = new Dictionary <Vector3Int, int>(vector3IntEqualityComparer);
            CornerPositions       = new Vector3Int[CornerIndexByPosition.Count];
            int cornerIndex = 0;

            foreach (var kvp in TileIndexByPosition)
            {
                List <Vector3Int> corners = HexGrid.GetCorners.OfTile(kvp.Key);
                foreach (Vector3Int corner in corners)
                {
                    Vector3Int cornerToAdd = corner;
                    if (CoordinateWrapper != null)
                    {
                        cornerToAdd = CoordinateWrapper.WrapCornerCoordinate(cornerToAdd);
                    }
                    if (!CornerIndexByPosition.ContainsKey(cornerToAdd))
                    {
                        CornerIndexByPosition.Add(cornerToAdd, cornerIndex);
                        cornerIndex++;
                    }
                }
            }

            CornerPositions = new Vector3Int[CornerIndexByPosition.Count];
            foreach (var kvp in CornerIndexByPosition)
            {
                CornerPositions[kvp.Value] = kvp.Key;
            }
        }
Ejemplo n.º 2
0
        private void CreateEdgeIndex()
        {
            Vector3IntEqualityComparer vector3IntEqualityComparer = new Vector3IntEqualityComparer();

            EdgeIndexByPosition = new Dictionary <Vector3Int, int>(vector3IntEqualityComparer);
            int edgeIndex = 0;

            foreach (var kvp in TileIndexByPosition)
            {
                List <Vector3Int> edges = HexGrid.GetEdges.OfTile(kvp.Key);
                foreach (Vector3Int edge in edges)
                {
                    Vector3Int edgeToAdd = edge;
                    if (CoordinateWrapper != null)
                    {
                        edgeToAdd = CoordinateWrapper.WrapEdgeCoordinate(edgeToAdd);
                    }
                    if (!EdgeIndexByPosition.ContainsKey(edgeToAdd))
                    {
                        EdgeIndexByPosition.Add(edgeToAdd, edgeIndex);
                        edgeIndex++;
                    }
                }
            }

            EdgePositions = new Vector3Int[EdgeIndexByPosition.Count];
            foreach (var kvp in EdgeIndexByPosition)
            {
                EdgePositions[kvp.Value] = kvp.Key;
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// returns indexed positions which form a flat-top hexagonal shaped map with the specified radius
        /// </summary>
        /// <remarks>
        /// ![Hexagonal map with radius 4](HexagonalMap.png)
        /// </remarks>
        public static Dictionary <Vector3Int, int> CreateHexagonalShapedMap(int radius)
        {
            Vector3IntEqualityComparer   vector3IntEqualityComparer = new Vector3IntEqualityComparer();
            Dictionary <Vector3Int, int> TileToIndexMap             = new Dictionary <Vector3Int, int>(vector3IntEqualityComparer);
            List <Vector3Int>            tiles = HexGrid.GetTiles.Disc(Vector3Int.zero, radius, true);
            int idx = 0;

            foreach (var tile in tiles)
            {
                TileToIndexMap.Add(tile, idx);
                idx++;
            }
            return(TileToIndexMap);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// returns indexed positions which form a rectangular shaped map with the specified width(x) and length(y).
        /// Most common map shape for periodic maps
        /// </summary>
        /// <remarks>
        /// ![Rectangular map. Mapsize: x = 9 and y = 9](RectangularMap.png)
        /// </remarks>
        public static Dictionary <Vector3Int, int> CreateRectangularShapedMap(Vector2Int mapSize)
        {
            Vector3IntEqualityComparer   vector3IntEqualityComparer = new Vector3IntEqualityComparer();
            Dictionary <Vector3Int, int> TileToIndexMap             = new Dictionary <Vector3Int, int>(vector3IntEqualityComparer);
            int idx = 0;

            for (int y = 0; y < mapSize.y; y++)
            {
                for (int x = 0; x < mapSize.x; x++)
                {
                    Vector3Int cubeTileCoord = HexConverter.OffsetTileCoordToTileCoord(new Vector2Int(x, y));
                    TileToIndexMap.Add(cubeTileCoord, idx);
                    idx++;
                }
            }
            return(TileToIndexMap);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// returns indexed positions which form a equilateral triangular map with the specified side length
        /// </summary>
        /// <remarks>
        /// ![Triangular map with with sidelength of 9](TriangularMap.png)
        /// </remarks>
        public static Dictionary <Vector3Int, int> CreateTriangularShapedMap(int sideLength)
        {
            Vector3IntEqualityComparer   vector3IntEqualityComparer = new Vector3IntEqualityComparer();
            Dictionary <Vector3Int, int> TileToIndexMap             = new Dictionary <Vector3Int, int>(vector3IntEqualityComparer);

            int idx = 0;

            for (int y = 0; y < sideLength; y++)
            {
                for (int x = y / 2; x < (sideLength - (y + 1) / 2); x++)
                {
                    Vector3Int cubeTileCoord = HexConverter.OffsetTileCoordToTileCoord(new Vector2Int(x, y));
                    TileToIndexMap.Add(cubeTileCoord, idx);
                    idx++;
                }
            }
            return(TileToIndexMap);
        }