在上一章中,我们确认了要使用哪种河流的形式,并分析了河流在地图单元中的几种分布形式。这一章中我们先创建一些变量和方法,用来存储和获取当前地图单元内是否有河流,并且记录河流的流向等。
  首先我们先定义两个变量,用来存储河流经过当前地图单元的流向,即是流入还是流出的。这两个变量我们可以在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代码