3-12 SSF类型的变体

  在上一章中,我们完成了SSF类型的三角形连接区域阶梯化,不过SSF类型还存在两种变体,如下图所示:

  之前的普通SSF连接类型中,两个连接类型为Flat的地图单元,它们相较另一个地图单元,都会高出一个单位。变体的情况其实是正好反过来的。两个连接类型为Flat的地图单元,比另外一个地图单元,都低一个单位,这样也能组成SSF形式的连接。那么我们就这种情况,在TriangulateCorner方法中进行判断,如果符合SSF变体的情况,我们也试用阶梯化三角形连接区域进行构建。代码如下:

HexMesh.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
private void TriangulateCorner(
Vector3 bottom, HexCell bottomCell,
Vector3 left, HexCell leftCell,
Vector3 right, HexCell rightCell)
{


if (leftEdgeType == HexEdgeType.Slope)
{


//SSF变体1 即2个cell高度为0,一个cell高度为1,且高度为1的cell在左侧
if (rightEdgeType == HexEdgeType.Flat)
{
TriangulateCornerTerraces(left, leftCell, right, rightCell, bottom, bottomCell);
return;
}
}

if (rightEdgeType == HexEdgeType.Slope)
{
//SSF变体2 即2个cell高度为0,一个cell高度为1,且高度为1的cell在右侧
if (leftEdgeType == HexEdgeType.Flat)
{
TriangulateCornerTerraces(right, rightCell, bottom, bottomCell, left, leftCell);
return;
}
}


}

  仔细观察代码,当下方和右侧的两个地图单元连接关系为Flat时,我们就要对左侧的地图单元三角形连接区域进行梯形构建。相反的另一种情况也类似。

  现在,两个相邻地图单元高度相差1的话,他们之间的矩形连接区域和三角形连接区域,视觉效果都完全符合预期。现在的问题还存在于两个相邻地图单元高度差大于1的情况。他们之间的三角形连接区域还是使用之前的方式。在下面的章节中,我们将会一步一步来解决这些问题。

Github代码