protected static void AddBorderToTerritory(HexTile tile, RelativeTilePosition relPos, float radius, float territoryBorderYPos, float halfWidth, ref List <Vector3> vertices, ref List <Vector3> normals, ref List <Vector2> UV, ref List <int> triangles, TriangleUVTweak tweakUVs = TriangleUVTweak.NoTweak) { Vector3 worldPos = tile.Grid.ToPixel(tile.Pos); Vector3 botRight = new Vector3(worldPos.x + (radius / 2), territoryBorderYPos, worldPos.z - halfWidth); // botRight Vector3 right = new Vector3(worldPos.x + radius, territoryBorderYPos, worldPos.z); // right Vector3 topRight = new Vector3(worldPos.x + (radius / 2), territoryBorderYPos, worldPos.z + halfWidth); // topRight Vector3 topLeft = new Vector3(worldPos.x + (-radius / 2), territoryBorderYPos, worldPos.z + halfWidth); // topLeft Vector3 left = new Vector3(worldPos.x + (-radius), territoryBorderYPos, worldPos.z); // left Vector3 botLeft = new Vector3(worldPos.x + (-radius / 2), territoryBorderYPos, worldPos.z - halfWidth); // botLeft Vector3 center = new Vector3(worldPos.x, territoryBorderYPos, worldPos.z); // center Vector3 v1 = new Vector3(); Vector3 v2 = new Vector3(); Vector3 v3 = center; switch (relPos) { case RelativeTilePosition.Bot: v1 = botLeft; v2 = botRight; break; case RelativeTilePosition.BotRight: v1 = botRight; v2 = right; break; case RelativeTilePosition.TopRight: v1 = right; v2 = topRight; break; case RelativeTilePosition.Top: v1 = topRight; v2 = topLeft; break; case RelativeTilePosition.TopLeft: v1 = topLeft; v2 = left; break; case RelativeTilePosition.BotLeft: v1 = left; v2 = botLeft; break; } AddTriangle(v1, v2, v3, ref vertices, ref normals, ref UV, ref triangles, tweakUVs); }
protected static void AddSideBorders(RelativeTilePosition left, RelativeTilePosition right, float radius, float territoryBorderYPos, float halfWidth, List <RelativeTilePosition> bordersAdded, HexTile tile, ref List <Vector3> vertices, ref List <Vector3> normals, ref List <Vector2> UV, ref List <int> triangles, bool invertUVs) { bool rightFound = false; bool leftFound = false; for (int k = 0; k < bordersAdded.Count; k++) { if (bordersAdded[k] == right) { rightFound = true; } else if (bordersAdded[k] == left) { leftFound = true; } } if (!leftFound) { if (invertUVs) { AddBorderToTerritory(tile, left, radius, territoryBorderYPos, halfWidth, ref vertices, ref normals, ref UV, ref triangles, TriangleUVTweak.TweakLeft); } else { AddBorderToTerritory(tile, left, radius, territoryBorderYPos, halfWidth, ref vertices, ref normals, ref UV, ref triangles, TriangleUVTweak.TweakRight); } } if (!rightFound) { if (invertUVs) { AddBorderToTerritory(tile, right, radius, territoryBorderYPos, halfWidth, ref vertices, ref normals, ref UV, ref triangles, TriangleUVTweak.TweakRight); } else { AddBorderToTerritory(tile, right, radius, territoryBorderYPos, halfWidth, ref vertices, ref normals, ref UV, ref triangles, TriangleUVTweak.TweakLeft); } } }
protected static HexTile GetTileNeighbour(HexGrid grid, Vector2 tilePos, RelativeTilePosition relPos) { Vector2 posToCheck = new Vector2(); switch (relPos) { case RelativeTilePosition.Bot: posToCheck = new Vector2(tilePos.x, tilePos.y - 1); break; case RelativeTilePosition.BotRight: posToCheck = (tilePos.x % 2 == 0) ? new Vector2(tilePos.x + 1, tilePos.y - 1) : new Vector2(tilePos.x + 1, tilePos.y); break; case RelativeTilePosition.TopRight: posToCheck = (tilePos.x % 2 == 0) ? new Vector2(tilePos.x + 1, tilePos.y) : new Vector2(tilePos.x + 1, tilePos.y + 1); break; case RelativeTilePosition.Top: posToCheck = new Vector2(tilePos.x, tilePos.y + 1); break; case RelativeTilePosition.TopLeft: posToCheck = (tilePos.x % 2 == 0) ? new Vector2(tilePos.x - 1, tilePos.y) : new Vector2(tilePos.x - 1, tilePos.y + 1); break; case RelativeTilePosition.BotLeft: posToCheck = (tilePos.x % 2 == 0) ? new Vector2(tilePos.x - 1, tilePos.y - 1) : new Vector2(tilePos.x - 1, tilePos.y); break; } HexTile neighbour = null; grid.Tiles.TryGetValue(posToCheck, out neighbour); return(neighbour); }