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; } }
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; } }
/// <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); }
/// <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); }
/// <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); }