在上一章中,我们确认了要使用哪种河流的形式,并分析了河流在地图单元中的几种分布形式。这一章中我们先创建一些变量和方法,用来存储和获取当前地图单元内是否有河流,并且记录河流的流向等。
首先我们先定义两个变量,用来存储河流经过当前地图单元的流向,即是流入还是流出的。这两个变量我们可以在HexCell
中声明,因为构建单个地图单元,都是在这个勒种完成的。代码如下:
HexCell.cs1 2 3 4 5 6 7 8 9
| public class HexCell : MonoBehaviour { private bool hasIncomingRiver; private bool hasOutgoingRiver; … }
|
但是仅仅只有河流的流入和流出信息还不够,我们还需要知道河流的流出方位与流出方位。再声明两个变量,用来存储河流是从哪个方位流入与流出的。代码如下:
HexCell.cs1 2 3 4 5 6 7 8
| public class HexCell : MonoBehaviour { private HexDirection incomingRiver; private HexDirection outgoingRiver; … }
|
变量声明完成后,我们使用对应的Get属性来获取这些变量的值,对这些变量的赋值操作,将会在之后章节的其他方法中实现。代码如下:
HexCell.cs1 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 { …
public bool HasIncomingRiver { get { return hasIncomingRiver; } }
public bool HasOutgoingRiver { get { return hasOutgoingRiver; } }
public HexDirection IncomingRiver { get { return incomingRiver; } }
public HexDirection OutgoingRiver { get { return outgoingRiver; } } … }
|
接着就是要能获取当前地图单元是否含有河流。我们同样声明一个属性来获取这个信息。代码如下:
HexCell.cs1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class HexCell : MonoBehaviour { … public bool HasRiver { get { return hasIncomingRiver || hasOutgoingRiver; } } … }
|
然后是要判断,当前的地图单元是否为河流的起点或者终点,也就是说当hasIncomingRiver
与hasOutgoingRiver
两个变量的值不同的时候,就表示当前地图单元是河流的起点或者终点。代码如下:
HexCell.cs1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| public class HexCell : MonoBehaviour { … public bool HasRiverBeginOrEnd { get { return hasIncomingRiver != hasOutgoingRiver; } } … }
|
最后,我们还需要一个方法来判断,地图单元的某个特定方位的边,是否有河流经过,不管河流是流入还是流出。这个方法是比较重要的,因为它涉及到后面一些三角剖分的工作。代码如下:
HexCell.cs1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public class HexCell : MonoBehaviour { … public bool HasRiverThroughEdge(HexDirection direction) { return hasIncomingRiver && incomingRiver == direction || hasOutgoingRiver && outgoingRiver == direction; } … }
|
至此,我们创建了一些变量、属性和方法,用来保存和获取河流经过一个地图单元的各种形式和状态。在接下来的章节中,我们将创建一些方法用来移出和添加河流。
Github代码