コード例 #1
0
    protected static void AddTriangle(Vector3 vertexA, Vector3 vertexB, Vector3 vertexC,
                                      ref List <Vector3> vertices, ref List <Vector3> normals, ref List <Vector2> UV, ref List <int> triangles,
                                      TriangleUVTweak tweakUVs)
    {
        int verticeNum = vertices.Count;

        vertices.Add(vertexA);
        vertices.Add(vertexB);
        vertices.Add(vertexC);

        normals.Add(new Vector3(0, 1, 0));
        normals.Add(new Vector3(0, 1, 0));
        normals.Add(new Vector3(0, 1, 0));

        const float v = 0.5f;

        switch (tweakUVs)
        {
        case TriangleUVTweak.NoTweak:    { UV.Add(new Vector2(0, 1)); UV.Add(new Vector2(0, 1)); UV.Add(new Vector2(0, v)); break; }

        case TriangleUVTweak.TweakLeft:  { UV.Add(new Vector2(0, v)); UV.Add(new Vector2(0, 1)); UV.Add(new Vector2(0, v)); break; }

        case TriangleUVTweak.TweakRight: { UV.Add(new Vector2(0, 1)); UV.Add(new Vector2(0, v)); UV.Add(new Vector2(0, v)); break; }
        }

        triangles.Add(verticeNum);
        triangles.Add(verticeNum + 2);
        triangles.Add(verticeNum + 1);
    }
コード例 #2
0
    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);
    }