Loading

Paste #p7c0fpuuh

  1. Index: water_map.h
  2. ===================================================================
  3. --- water_map.h (revision 27210)
  4. +++ water_map.h (working copy)
  5. @@ -16,25 +16,26 @@
  6.  #include "tile_map.h"
  7.  
  8.  /**
  9. - * Bit field layout of m5 for water tiles.
  10. + * Bit field layout for water tiles.
  11.   */
  12.  enum WaterTileTypeBitLayout {
  13. -   WBL_TYPE_BEGIN        = 4,   ///< Start of the 'type' bitfield.
  14. -   WBL_TYPE_COUNT        = 4,   ///< Length of the 'type' bitfield.
  15. +   WBL_TYPE_BEGIN        = 4,   ///< First bit for the structure kind, in m5 bitfield.
  16. +   WBL_TYPE_COUNT        = 4,   ///< Number of bits, for the structure kind, in m5 bitfield.
  17.  
  18. -   WBL_TYPE_NORMAL       = 0x0, ///< Clear water or coast ('type' bitfield).
  19. -   WBL_TYPE_LOCK         = 0x1, ///< Lock ('type' bitfield).
  20. -   WBL_TYPE_DEPOT        = 0x8, ///< Depot ('type' bitfield).
  21. +   WBL_TYPE_NORMAL       = 0x0, ///< Clear water or coast, in m5 (structure kind bitfield).
  22. +   WBL_TYPE_LOCK         = 0x1, ///< Lock, in m5 (structure kind bitfield).
  23. +   WBL_TYPE_DEPOT        = 0x8, ///< Depot, in m5 (structure kind bitfield).
  24.  
  25. -   WBL_COAST_FLAG        = 0,   ///< Flag for coast.
  26. +   WBL_COAST_FLAG        = 0,   ///< Flag for coast, in m5.
  27. +   WBL_RIVER_FLAG        = 0,   ///< Flag for canal on river, in m6.
  28.  
  29. -   WBL_LOCK_ORIENT_BEGIN = 0,   ///< Start of lock orientiation bitfield.
  30. -   WBL_LOCK_ORIENT_COUNT = 2,   ///< Length of lock orientiation bitfield.
  31. -   WBL_LOCK_PART_BEGIN   = 2,   ///< Start of lock part bitfield.
  32. -   WBL_LOCK_PART_COUNT   = 2,   ///< Length of lock part bitfield.
  33. +   WBL_LOCK_ORIENT_BEGIN = 0,   ///< Start of lock orientiation, in m5 bitfield.
  34. +   WBL_LOCK_ORIENT_COUNT = 2,   ///< Length of lock orientiation, in m5 bitfield.
  35. +   WBL_LOCK_PART_BEGIN   = 2,   ///< Start of lock part, in m5 bitfield.
  36. +   WBL_LOCK_PART_COUNT   = 2,   ///< Length of lock part, in m5 bitfield.
  37.  
  38. -   WBL_DEPOT_PART        = 0,   ///< Depot part flag.
  39. -   WBL_DEPOT_AXIS        = 1,   ///< Depot axis flag.
  40. +   WBL_DEPOT_PART        = 0,   ///< Depot part flag, in m5.
  41. +   WBL_DEPOT_AXIS        = 1,   ///< Depot axis flag, in m5.
  42.  };
  43.  
  44.  /** Available water tile types. */
  45. @@ -55,6 +56,12 @@
  46.  /** Helper information for extract tool. */
  47.  template <> struct EnumPropsT<WaterClass> : MakeEnumPropsT<WaterClass, byte, WATER_CLASS_SEA, WATER_CLASS_INVALID, WATER_CLASS_INVALID, 2> {};
  48.  
  49. +/** Bases of a canal (for #WATER_CLASS_CANAL class of water). */
  50. +enum CanalBase {
  51. +   WCC_WITHOUT_RIVER = 0, ///< Without a river under it
  52. +   WCC_WITH_RIVER    = 1, ///< With a river under it
  53. +};
  54. +
  55.  /** Sections of the water depot. */
  56.  enum DepotPart {
  57.     DEPOT_PART_NORTH = 0, ///< Northern part of a depot.
  58. @@ -122,6 +129,40 @@
  59.  }
  60.  
  61.  /**
  62. + * Get the base of the canal at a tile.
  63. + * @param t Water tile to query.
  64. + * @pre GetWaterClass(t) == WATER_CLASS_CANAL
  65. + * @return Base of the canal at the tile.
  66. + */
  67. +static inline CanalBase GetCanalBase(TileIndex t)
  68. +{
  69. +   assert(GetWaterClass(t) == WATER_CLASS_CANAL);
  70. +   return (CanalBase)HasBit(_me[t].m6, WBL_RIVER_FLAG) ? WCC_WITH_RIVER : WCC_WITHOUT_RIVER;
  71. +}
  72. +
  73. +/**
  74. + * Set the base of the canal to indicate there is a river under a tile.
  75. + * @param t Water tile of water class canal to query.
  76. + * @pre GetWaterClass(t) == WATER_CLASS_CANAL
  77. + */
  78. +static inline void SetCanalOnRiver(TileIndex t)
  79. +{
  80. +   assert(GetWaterClass(t) == WATER_CLASS_CANAL);
  81. +   SB(_me[t].m6, 0, WBL_RIVER_FLAG, WCC_WITH_RIVER);
  82. +}
  83. +
  84. +/**
  85. + * Checks whether the canal at a tile has a river under it.
  86. + * @param t Water tile of water class canal to query.
  87. + * @pre GetWaterClass(t) == WATER_CLASS_CANAL
  88. + * @return true if the canal has a river under it.
  89. + */
  90. +static inline bool HasTileCanalOnRiver(TileIndex t)
  91. +{
  92. +   return HasTileWaterClass(t) && GetWaterClass(t) == WATER_CLASS_CANAL && GetCanalBase(t) == WCC_WITH_RIVER;
  93. +}
  94. +
  95. +/**
  96.   * Tests if the tile was built on water.
  97.   * @param t the tile to check
  98.   * @pre IsTileType(t, MP_WATER) || IsTileType(t, MP_STATION) || IsTileType(t, MP_INDUSTRY) || IsTileType(t, MP_OBJECT)

Version history

Revision # Author Created at
ptzeplxmx Anonymous 28 Mar 2015, 22:06:45 UTC Diff

Comments