6-2 河流方向

  在上一章中,我们确认了要使用哪种河流的形式,并分析了河流在地图单元中的几种分布形式。这一章中我们先创建一些变量和方法,用来存储和获取当前地图单元内是否有河流,并且记录河流的流向等。
  首先我们先定义两个变量,用来存储河流经过当前地图单元的流向,即是流入还是流出的。这两个变量我们可以在HexCell中声明,因为构建单个地图单元,都是在这个勒种完成的。代码如下:

HexCell.cs
1
2
3
4
5
6
7
8
9
public class HexCell : MonoBehaviour
{
//用来记录当前cell是否有河流 流入/流出
//只流出是河流起点,只流入是河流终点
private bool hasIncomingRiver;
private bool hasOutgoingRiver;


}

  但是仅仅只有河流的流入和流出信息还不够,我们还需要知道河流的流出方位与流出方位。再声明两个变量,用来存储河流是从哪个方位流入与流出的。代码如下:

HexCell.cs
1
2
3
4
5
6
7
8
public class HexCell : MonoBehaviour
{
//记录河流的流入方位和流出方位
private HexDirection incomingRiver;
private HexDirection outgoingRiver;


}

  变量声明完成后,我们使用对应的Get属性来获取这些变量的值,对这些变量的赋值操作,将会在之后章节的其他方法中实现。代码如下:

HexCell.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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class HexCell : MonoBehaviour
{


//cell中是否有河流 流入/流出 以及 流入、流出方位,都使用属性来获取
//赋值部分会在其他的方法中进行

//获取cell是否有河流的流入
public bool HasIncomingRiver
{
get
{
return hasIncomingRiver;
}
}

//获取cell是否有河流的流出
public bool HasOutgoingRiver
{
get
{
return hasOutgoingRiver;
}
}

//获取cell中河流的流入方向
public HexDirection IncomingRiver
{
get
{
return incomingRiver;
}
}

//获取cell中河流的流出方向
public HexDirection OutgoingRiver
{
get
{
return outgoingRiver;
}
}


}

  接着就是要能获取当前地图单元是否含有河流。我们同样声明一个属性来获取这个信息。代码如下:

HexCell.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class HexCell : MonoBehaviour
{


//获取当前cell中是否有河流
public bool HasRiver
{
get
{
return hasIncomingRiver || hasOutgoingRiver;
}
}


}

  然后是要判断,当前的地图单元是否为河流的起点或者终点,也就是说当hasIncomingRiverhasOutgoingRiver两个变量的值不同的时候,就表示当前地图单元是河流的起点或者终点。代码如下:

HexCell.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class HexCell : MonoBehaviour
{


//获取当前的cell是否为河流的起点或终点
public bool HasRiverBeginOrEnd
{
get
{
return hasIncomingRiver != hasOutgoingRiver;
}
}


}

  最后,我们还需要一个方法来判断,地图单元的某个特定方位的边,是否有河流经过,不管河流是流入还是流出。这个方法是比较重要的,因为它涉及到后面一些三角剖分的工作。代码如下:

HexCell.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class HexCell : MonoBehaviour
{


/// <summary>
/// 检查cell中指定方位的边是否有河流经过,不论是流入还是流出
/// </summary>
/// <param name="direction">当前cell指定方位的边</param>
/// <returns>true该边有河流经过,false该边没有河流经过</returns>
public bool HasRiverThroughEdge(HexDirection direction)
{
return
//检查指定方位是否有河流的流入
hasIncomingRiver && incomingRiver == direction
||
//检查指定方位是否有河流的流出
hasOutgoingRiver && outgoingRiver == direction;
}


}

  至此,我们创建了一些变量、属性和方法,用来保存和获取河流经过一个地图单元的各种形式和状态。在接下来的章节中,我们将创建一些方法用来移出和添加河流。

Github代码