3-13 Slope-Cliff类型三角形连接区域的判断

  在之前的章节中,我们完成了SSF及其变体的情况中,三角形连接区域的阶梯化构建。SSF及其变体,都是高度相差1的情况,在这章中我们来解决地图单元之间高度差大于1的情况。
  Slope-Cliff连接类型有两种情况,第一种是:bottom地图单元高度最低,left地图单元比bottom地图单元高1个单位,right地图单元比Left地图单元高1个单位。如下图:

  第二种是:bottom地图单元高度最低,left地图单元比bottom地图单元高1个单位,right地图单元比Left地图单元高1个以上单位。如下图:

  这两种组合的抽象图如下图所示:

  接下来回到代码部分,构建Slope-Cliff的三角形连接区域的思路与SSF连接区域类似,我们在HexMesh.cs脚本中创建一个新的方法,来构建三角形连接区域,代码如下:

HexMesh.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/// <summary>
/// 针对Slope-Cliff连接类型 创建三角形连接区域
/// </summary>
/// <param name="begin">初始cell位置</param>
/// <param name="beginCell">初始cell实例</param>
/// <param name="left">左侧cell位置</param>
/// <param name="leftCell">左侧cell实例</param>
/// <param name="right">右侧cell位置</param>
/// <param name="rightCell">右侧cell实例</param>
private void TriangulateCornerTerracesCliff(
Vector3 begin, HexCell beginCell,
Vector3 left, HexCell leftCell,
Vector3 right, HexCell rightCell)
{
}

  我们回到TriangulateCorner方法中,在这里添加对TriangulateCornerTerracesCliff的调用。代码如下:

HexMesh.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void TriangulateCorner(
Vector3 bottom, HexCell bottomCell,
Vector3 left, HexCell leftCell,
Vector3 right, HexCell rightCell)
{


if (leftEdgeType == HexEdgeType.Slope)
{


//Slope-Cliff连接类型
//bottom最低,left比bottom高1,right比bottom高2及以上
TriangulateCornerTerracesCliff(bottom, bottomCell, left, leftCell, right, rightCell);
return;
}


}

  这样,我们就完成了Slope-Cliff三角形连接区域的判断。不过因为left的地图单元和right的地图单元,高度差可能为1,也可能大于1,所以Slope-Cliff三角形连接区域需要分类两个步骤进行构建,这两部分的构建,在接下来的章节实现。

Github代码