public int NextAxialIndex(int axialIndex, AxialDirection dir) { switch (dir) { case AxialDirection.Right: axialIndex++; break; default: axialIndex--; if (axialIndex < 0) { axialIndex = AxialDirectionsCount - 1; } break; } axialIndex %= AxialDirectionsCount; return(axialIndex); }
private static void AddTileToLevel(LevelEnvironmentData data, TileData tile, Vector3 worldPosition, byte bitmask) { int verticeCount = data.Vertices.Count; TileMeshData meshData = tile.Brush.GetMeshData(bitmask); // Vertices. foreach (Vector3 vertex in meshData.Vertices) { data.Vertices.Add(Utility.ScaleToHexagonalSize(vertex) + worldPosition); } // Triangles. int[][] rawTriangles = meshData.Triangles; for (int i = 0; i < rawTriangles.Length; i++) { int[] trianglesToSet = new int[rawTriangles[i].Length]; // Offset the triangles for (int w = 0; w < rawTriangles[i].Length; w++) { trianglesToSet[w] = rawTriangles[i][w] + verticeCount; } data.SetTriangles(tile.BrushMaterials[i], trianglesToSet); } // UVs. foreach (Vector2 uv in meshData.UVs) { data.UVs.Add(uv); } // Edges. if (!AxialDirection.ContainsDirection(bitmask, AxialDirection.DownLeft) || !AxialDirection.ContainsDirection(bitmask, AxialDirection.DownRight)) { EdgeBuilder.Build(data, tile, worldPosition, bitmask); } }
private static float GetMovementCost(Node current, AxialDirection direction) { return(direction.Magnitude); }
public Vector2Int NextAxial(int axialIndex, AxialDirection dir) { int nextIndex = NextAxialIndex(axialIndex, dir); return(NeighborAxialLocs[nextIndex]); }
public static ref readonly Vector3 GetDirectionVector(this AxialDirection axialDirection) { return(ref DirectionVectors[(int)axialDirection]);